rott/kf_sources/HideMut/Classes/menu_c_Light.uc
2026-07-14 20:27:09 +07:00

955 lines
31 KiB
Ucode

class menu_c_Light extends GUI2K4.MidGamePanel
config(HideMut);
// =================================================================Interface section
var automated GUISectionBackground sb_ControlsAllMap, sb_Stats, sb_Tweaker;
var automated moNumericEdit nu_Radius, nu_newRadius, nu_maxRadius, nu_LightCone,
nu_LightPeriod, nu_LightBrightness,
nu_LightHue, nu_LightSaturation, nu_LightEffect, nu_LightType;
var automated MOCheckBox ch_Optimize, ch_RemoveFlickering, ch_FlickeringToStatic,
ch_ActorShadows, ch_AttenByLife, ch_bCorona,
ch_bDirectionalCorona, ch_bDynamicLight, ch_bLightingVisibility,
ch_bSpecialLit;
var automated GUIScrollTextBox lb_Actions;
var automated GUIButton b_HideLights, b_OptAllLights, b_MakeAllLightVisible, b_DisableCoronas,
b_SaveConfig, b_OptStatic, b_ClearLog;
// ====================================================================End of interface section
var transient array<Light> CachedLights; // Cached lights for checks, stats and etc.
var transient array<TriggerLight> CachedTriggerLights; // Cached trigger lights just in case
var transient array<int> LightColors; // Unique light colors
var bool bCached; // Prevents multiple caching
var int maxRadius_L, maxRadius_TL; // Max radius for light sources(trigger light and lights)
// ==========================================config variables
var config bool bActorShadows, bAttenByLife, bLightingVisibility, bCorona, bDirectionalCorona,
bSpecialLit, // Tweaker
Optimize, RemoveFlickering, FlickeringToStatic;
var config int NewRadius, maxRadius;
var config byte byteRadius, byteLightBrightness, byteLightHue, byteLightSaturation, byteLightType,
byteLightEffect, byteLightCone, byteLightPeriod;
// ==========================================end of config variables
var PlayerController PC;
var bool IsUnlited, bConfigLoaded;
simulated function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
local GUIButton B;
local string s;
local int i;
super.InitComponent(MyController,MyOwner);
PC = PlayerOwner();
sb_Stats.ManageComponent(lb_Actions);
sb_Stats.ManageComponent(b_ClearLog);
sb_Tweaker.ManageComponent(nu_newRadius);
sb_Tweaker.ManageComponent(nu_maxRadius);
sb_Tweaker.ManageComponent(ch_Optimize);
sb_Tweaker.ManageComponent(ch_RemoveFlickering);
sb_Tweaker.ManageComponent(ch_FlickeringToStatic);
sb_Tweaker.ManageComponent(b_HideLights);
sb_Tweaker.ManageComponent(b_DisableCoronas);
sb_Tweaker.ManageComponent(b_OptStatic);
sb_ControlsAllMap.ManageComponent(nu_Radius);
sb_ControlsAllMap.ManageComponent(nu_LightCone);
sb_ControlsAllMap.ManageComponent(nu_LightPeriod);
sb_ControlsAllMap.ManageComponent(nu_LightBrightness);
sb_ControlsAllMap.ManageComponent(nu_LightHue);
sb_ControlsAllMap.ManageComponent(nu_LightSaturation);
sb_ControlsAllMap.ManageComponent(nu_LightEffect);
sb_ControlsAllMap.ManageComponent(nu_LightType);
sb_ControlsAllMap.ManageComponent(ch_ActorShadows);
sb_ControlsAllMap.ManageComponent(ch_AttenByLife);
sb_ControlsAllMap.ManageComponent(ch_bCorona);
sb_ControlsAllMap.ManageComponent(ch_bDirectionalCorona);
sb_ControlsAllMap.ManageComponent(ch_bDynamicLight);
sb_ControlsAllMap.ManageComponent(ch_bLightingVisibility);
sb_ControlsAllMap.ManageComponent(ch_bSpecialLit);
sb_ControlsAllMap.ManageComponent(b_OptAllLights);
sb_ControlsAllMap.ManageComponent(b_SaveConfig);
sb_ControlsAllMap.ManageComponent(b_MakeAllLightVisible);
// For resizing buttons
s = GetSizingCaption();
for (i = 0; i < Controls.length; i++)
{
B = GUIButton(Controls[i]);
if (B != none)
{
B.bAutoSize = true;
B.SizingCaption = s;
B.AutoSizePadding.HorzPerc = 0.04;
B.AutoSizePadding.VertPerc = 0.8;
}
}
ch_ActorShadows.Checked(bActorShadows);
ch_AttenByLife.Checked(bAttenByLife);
nu_Radius.SetValue(byteRadius);
ch_bLightingVisibility.Checked(bLightingVisibility);
ch_bCorona.Checked(bCorona);
ch_bDirectionalCorona.Checked(bDirectionalCorona);
nu_LightBrightness.SetValue(byteLightBrightness);
nu_LightHue.SetValue(byteLightHue);
nu_LightSaturation.SetValue(byteLightSaturation);
ch_bSpecialLit.Checked(bSpecialLit);
nu_LightType.SetValue(byteLightType);
nu_LightEffect.SetValue(byteLightEffect);
nu_LightCone.SetValue(byteLightCone);
nu_LightPeriod.SetValue(byteLightPeriod);
}
function string GetSizingCaption()
{
local int i;
local string S;
for (i = 0; i < Controls.length; i++)
if (GUIButton(Controls[i]) != none)
if (S == "" || Len(GUIButton(Controls[i]).Caption) > Len(S))
S = GUIButton(Controls[i]).Caption;
return S;
}
function ShowPanel(bool bShow)
{
super.ShowPanel(bShow);
if (bShow)
CacheLights();
}
event Opened(GUIComponent Sender)
{
super.Opened(Sender);
// Caching lights
if (!bCached)
{
CacheLights();
}
if (!bConfigLoaded)
{
LoadLightConfig();
bConfigLoaded = true;
}
}
simulated function bool ButtonClicked(GUIComponent Sender)
{
// Caching lights
if (!bCached)
{
CacheLights();
}
switch (Sender)
{
case b_HideLights:
OptLights(nu_newRadius.GetValue(), nu_maxRadius.GetValue(), ch_Optimize.IsChecked(), ch_RemoveFlickering.IsChecked(), ch_FlickeringToStatic.IsChecked());
break;
case b_OptAllLights:
OptAllLights();
break;
case b_MakeAllLightVisible:
AllLightVisible();
break;
case b_DisableCoronas:
RemoveCoronas();
break;
case b_SaveConfig:
SaveLightConfig();
break;
case b_OptStatic:
OptimizeStaticMeshes();
break;
case b_ClearLog:
lb_Actions.SetContent("");
break;
}
// Get lighting statistics
StatLights();
return true;
}
simulated function SaveLightConfig()
{
bActorShadows = ch_ActorShadows.IsChecked();
bAttenByLife = ch_AttenByLife.IsChecked();
byteRadius = nu_Radius.GetValue();
bLightingVisibility = ch_bLightingVisibility.IsChecked();
bCorona = ch_bCorona.IsChecked();
bDirectionalCorona = ch_bDirectionalCorona.IsChecked();
byteLightBrightness = nu_LightBrightness.GetValue();
byteLightHue = nu_LightHue.GetValue();
byteLightSaturation = nu_LightSaturation.GetValue();
bSpecialLit = ch_bSpecialLit.IsChecked();
byteLightType = nu_LightType.GetValue();
byteLightEffect = nu_LightEffect.GetValue();
byteLightCone = nu_LightCone.GetValue();
byteLightPeriod = nu_LightPeriod.GetValue();
NewRadius = nu_newRadius.GetValue();
maxRadius = nu_maxRadius.GetValue();
Optimize = ch_Optimize.IsChecked();
RemoveFlickering = ch_RemoveFlickering.IsChecked();
FlickeringToStatic = ch_FlickeringToStatic.IsChecked();
SaveConfig();
}
simulated function LoadLightConfig()
{
ch_ActorShadows.Checked(bActorShadows);
ch_AttenByLife.Checked(bAttenByLife);
nu_Radius.SetValue(byteRadius);
ch_bLightingVisibility.Checked(bLightingVisibility);
ch_bCorona.Checked(bCorona);
ch_bDirectionalCorona.Checked(bDirectionalCorona);
nu_LightBrightness.SetValue(byteLightBrightness);
nu_LightHue.SetValue(byteLightHue);
nu_LightSaturation.SetValue(byteLightSaturation);
ch_bSpecialLit.Checked(bSpecialLit);
nu_LightType.SetValue(byteLightType);
nu_LightEffect.SetValue(byteLightEffect);
nu_LightCone.SetValue(byteLightCone);
nu_LightPeriod.SetValue(byteLightPeriod );
nu_newRadius.SetValue(NewRadius);
nu_maxRadius.SetValue(maxRadius);
ch_Optimize.Checked(Optimize);
ch_RemoveFlickering.Checked(RemoveFlickering);
ch_FlickeringToStatic.Checked(FlickeringToStatic);
}
simulated function AllLightVisible() // Toggle lights visibility
{
local int i;
for (i=0;i<CachedLights.length;i++)
{
if (CachedLights[i].bHidden)
CachedLights[i].bHidden = false;
else
CachedLights[i].bHidden = true;
if (CachedLights[i].bStatic)
CachedLights[i].ResetStaticFilterState();
}
}
simulated function CacheLights() // Cache lights
{
local Light LE;
local TriggerLight TL;
local int i;
// Cached lights for checks, stats and etc.
forEach AllObjects (class'Light', LE)
{
CachedLights[i] = LE;
i++;
}
i=0;
// Cached TriggerLights
forEach AllObjects (class'TriggerLight', TL)
{
CachedTriggerLights[i] = TL;
i++;
}
// Empty lights check
if (CachedLights.length > 0 || CachedTriggerLights.Length > 0)
bCached = true;
}
// Clear cache
simulated function ClearCache()
{
CachedLights.Remove(0,CachedLights.Length);
CachedTriggerLights.Remove(0,CachedTriggerLights.Length);
bCached = false;
}
// Get max radius of light sources and triggerlight
simulated function MaxRad(out int MRad, out int TlMRad)
{
local int i;
if (CachedLights.length == 0)
return;
MRad = CachedLights[0].LightRadius;
// Find max radius
for (i=0;i<CachedLights.length; i++)
{
if (CachedLights[i].LightRadius > MRad)
{
MRad = CachedLights[i].LightRadius ;
}
}
if (CachedTriggerLights.length == 0)
return;
TlMRad = CachedTriggerLights[0].LightRadius;
// Find max radius
for (i = 0; i < CachedTriggerLights.length; i++)
{
if (CachedLights[i].LightRadius > TlMRad)
{
TlMRad = CachedLights[i].LightRadius;
}
}
}
simulated function GetUniqueColorsLights()
{
local int i, k, count;
local bool bAlreadyIsIn;
if (CachedLights.Length == 0)
return;
if (LightColors.Length == 0)
{
LightColors[0] = CachedLights[0].LightHue;
count++;
}
for (i = 0; i < CachedLights.length; i++)
{
for (k = 0; k < LightColors.length; k++) // Finding unique color
{
if (LightColors[k] == CachedLights[i].LightHue)
{
bAlreadyIsIn = true;
break; // Already having dat color
}
}
if (!bAlreadyIsIn)
{
LightColors[count] = CachedLights[i].LightHue; // Adding unique light
count++;
}
bAlreadyIsIn = false; // Next iteration
}
}
// Statistics
simulated function StatLights() // Get light statistics
{
local int i, maxRadiusCountL, maxRadiusCountTL, SpecialLit_CountL, SpecialLit_CountTL;
if (maxRadius_TL == 0 || maxRadius_L == 0)
{
MaxRad(maxRadius_L, maxRadius_TL);
}
if (CachedTriggerLights.length > 0)
{
for (i = 0; i < cachedTriggerLights.length; i++)
{
if (CachedTriggerLights[i].bSpecialLit)
SpecialLit_CountTL++;
if (CachedTriggerLights[i].LightRadius == maxRadius_TL)
maxRadiusCountTL++;
}
}
if (CachedLights.length == 0) // if no lights on map == fuckoff
return;
for (i = 0; i < CachedLights.length; i++)
{
if (CachedLights[i].bSpecialLit)
SpecialLit_CountL++;
if (CachedLights[i].LightRadius == maxRadius_L)
maxRadiusCountL++;
}
LightColors.Length = 0;
GetUniqueColorsLights();
lb_Actions.Addtext("There are" @ CachedLights.length @ "light sources" @ "and" @ cachedTriggerLights.length @ "Trigger light sources");
lb_Actions.Addtext("Max Radius for light source is " @ maxRadius_L @ ". Light sources that uses max radius:" @ maxRadiusCountL
@ "Max Radius for triggerlight source is " @ maxRadius_TL @ ". TriggerLight sources that uses max radius:" @ maxRadiusCountTL);
lb_Actions.Addtext("Detected" @ LightColors.length @ "unique lights");
lb_Actions.Addtext("Detected" @ SpecialLit_CountL @ " SpecialLit lights"
@ "Detected" @ SpecialLit_CountTL @ " SpecialLit triggerlights");
}
// =======Lights
// Light Optimization
simulated function OptLights(Int Radius, Int maxRadius, bool Optimize, bool RemoveFlickering, bool FlickeringToStatic)
{
local Light LE;
local TriggerLight TL;
local int i, count;
if (Radius == 0 || maxRadius == 0)
return;
forEach AllObjects (class'Light', LE)
{
if (LE.LightRadius > maxRadius)
{
LE.bSpecialLit = Optimize;
LE.LightRadius = Radius;
i++;
}
if (RemoveFlickering)
{
switch (LE.LightType)
{
case LT_Pulse: // 3 Laggy types of lights
LE.LightType = LT_Steady; // Replace this to steady light
count++;
if (FlickeringToStatic)
{
LE.bSpecialLit = true;
LE.bLightingVisibility = false;
}
break;
case LT_Blink:
LE.LightType = LT_Steady; // Replace this to steady light
count++;
if (FlickeringToStatic)
{
LE.bSpecialLit = true;
LE.bLightingVisibility = false;
}
break;
case LT_Flicker:
LE.LightType = LT_Steady; // Replace this to steady light
count++;
if (FlickeringToStatic)
{
LE.bSpecialLit = true;
LE.bLightingVisibility = false;
}
break;
default:
break;
}
}
LE.bLightChanged = true; // Recalculate light now
if (LE.bStatic)
LE.ResetStaticFilterState();
}
forEach AllObjects (class'TriggerLight', TL)
{
if (TL.LightRadius > maxRadius)
{
TL.bSpecialLit = Optimize;
TL.LightRadius = Radius;
i++;
}
if (RemoveFlickering)
{
switch (TL.LightType)
{
case LT_Pulse: // 3 Laggy types of lights
TL.LightType = LT_Steady; // Replace this to steady light
TL.InitialState = '';
count++;
if (FlickeringToStatic)
{
TL.bSpecialLit = true;
TL.bLightingVisibility = false;
}
break;
case LT_Blink:
TL.LightType = LT_Steady; // Replace this to steady light
TL.InitialState = '';
count++;
if (FlickeringToStatic)
{
TL.bSpecialLit = true;
TL.bLightingVisibility = false;
}
break;
case LT_Flicker:
TL.LightType = LT_Steady; // Replace this to steady light
TL.InitialState = '';
count++;
if (FlickeringToStatic)
{
TL.bSpecialLit = true;
TL.bLightingVisibility = false;
}
break;
default:
break;
}
}
TL.bLightChanged = true; // Recalculate light now
if (TL.bStatic)
TL.ResetStaticFilterState();
}
if (Optimize)
lb_Actions.Addtext("Laggy lights are now fully static.");
lb_Actions.Addtext("Radius for " @ i @ " lights set to " @ Radius @ ".Removed" @ count @ " flickering/pulsing/blinking light sources");
foreach AllObjects(class'Light', LE)
if (LE.bLightChanged)
LE.bLightChanged = false;
}
// RemoveCoronas
simulated function RemoveCoronas()
{
local Light tempL;
// Corona will be rendered because map author decide to force dis. No freedom for players...
// Somehow this slow down Mesh lighting quite a bit(x2, x3)...
forEach AllObjects (class'Light', tempL)
{
if (tempL.bCorona == true)
{
tempL.bCorona = false;
if (tempL.bStatic)
tempL.ResetStaticFilterState();
}
}
lb_Actions.Addtext("All coronas disabled!");
}
simulated function OptimizeStaticMeshes()
{
local StaticMeshActor SMA;
local Decoration Deco;
IsUnlited = !IsUnlited;
foreach AllObjects(class'StaticMeshActor', SMA)
{
SMA.bUnlit = IsUnlited;
SMA.ResetStaticFilterstate();
}
foreach AllObjects(class'Decoration', Deco)
{
Deco.bUnlit = IsUnlited;
if (Deco.bStatic)
Deco.ResetStaticFilterstate();
}
}
simulated function OptAllLights()
{
local int i;
local light L;
for (i = 0; i < CachedLights.length; i++)
{
CachedLights[i].bActorShadows = ch_ActorShadows.IsChecked();
CachedLights[i].bAttenByLife = ch_AttenByLife.IsChecked();
CachedLights[i].LightRadius = nu_Radius.GetValue();
CachedLights[i].bLightingVisibility = ch_bLightingVisibility.IsChecked();
CachedLights[i].bCorona = ch_bCorona.IsChecked(); // Must be tweak
CachedLights[i].bDirectionalCorona = ch_bDirectionalCorona.IsChecked();
CachedLights[i].LightBrightness = nu_LightBrightness.GetValue();
CachedLights[i].LightHue = nu_LightHue.GetValue();
CachedLights[i].LightSaturation = nu_LightSaturation.GetValue();
CachedLights[i].bSpecialLit = ch_bSpecialLit.IsChecked();
CachedLights[i].LightType = ELightType(nu_LightType.GetValue());
CachedLights[i].LightEffect = ELightEffect(nu_LightEffect.GetValue());
CachedLights[i].LightCone = nu_LightCone.GetValue();
CachedLights[i].LightPeriod = nu_LightPeriod.GetValue();
CachedLights[i].bDynamicLight=ch_bDynamicLight.IsChecked();
CachedLights[i].bLightChanged=true; // Recalculate light now
CachedLights[i].Style = STY_Additive; // Enabling bDeferRendering
CachedLights[i].bDeferRendering = true;
CachedLights[i].bUnlit = true;
CachedLights[i].bStaticLighting = false;
if (CachedLights[i].bStatic)
CachedLights[i].ResetStaticFilterState();
}
lb_Actions.Addtext("All lights on map set to given parameters");
if (CachedTriggerLights.length == 0)
return;
for (i = 0; i < CachedTriggerLights.length; i++)
{
CachedTriggerLights[i].bActorShadows = ch_ActorShadows.IsChecked();
CachedTriggerLights[i].bAttenByLife = ch_AttenByLife.IsChecked();
CachedTriggerLights[i].LightCone = nu_Radius.GetValue();
CachedTriggerLights[i].bLightingVisibility = ch_bLightingVisibility.IsChecked();
CachedTriggerLights[i].bCorona = ch_bCorona.IsChecked(); // Must be tweak
CachedTriggerLights[i].bDirectionalCorona = ch_bDirectionalCorona.IsChecked();
CachedTriggerLights[i].LightBrightness = nu_LightBrightness.GetValue();
CachedTriggerLights[i].LightHue = nu_LightHue.GetValue();
CachedTriggerLights[i].LightSaturation = nu_LightSaturation.GetValue();
CachedTriggerLights[i].bSpecialLit = ch_bSpecialLit.IsChecked();
CachedTriggerLights[i].LightType = ELightType(nu_LightType.GetValue());
CachedTriggerLights[i].LightEffect = ELightEffect(nu_LightEffect.GetValue());
CachedTriggerLights[i].LightCone = nu_LightCone.GetValue();
CachedTriggerLights[i].LightPeriod = nu_LightPeriod.GetValue();
CachedTriggerLights[i].bDynamicLight=ch_bDynamicLight.IsChecked();
CachedTriggerLights[i].bLightChanged=true; // Recalculate light now
if (CachedTriggerLights[i].bStatic)
CachedTriggerLights[i].ResetStaticFilterState();
}
foreach AllObjects(class'Light', L)
if (L.bLightChanged)
L.bLightChanged = false;
}
// ===================================================================
simulated function InternalOnChange(GUIComponent Sender)
{
// switch (Sender)
// {
// case ch_HideNiggaz:
// break;
// }
}
defaultproperties
{
Begin Object Class=GUISectionBackground Name=BGControlsAllMap
bFillClient=True
Caption="Control of light sources and shadows on all map"
WinTop=0.010000
WinLeft=0.400000
WinWidth=0.500000
WinHeight=0.900000
OnPreDraw=BGControlsAllMap.InternalPreDraw
End Object
sb_ControlsAllMap=GUISectionBackground'HideMut.menu_c_Light.BGControlsAllMap'
Begin Object Class=GUISectionBackground Name=BGStats
bFillClient=True
Caption="Statistics of light sources on current map"
WinTop=0.510000
WinWidth=0.400000
WinHeight=0.460000
OnPreDraw=BGStats.InternalPreDraw
End Object
sb_Stats=GUISectionBackground'HideMut.menu_c_Light.BGStats'
Begin Object Class=GUISectionBackground Name=BGTweaker
bFillClient=True
Caption="Various lighting tweaks"
WinTop=0.010000
WinWidth=0.400000
WinHeight=0.500000
OnPreDraw=BGTweaker.InternalPreDraw
End Object
sb_Tweaker=GUISectionBackground'HideMut.menu_c_Light.BGTweaker'
Begin Object Class=moNumericEdit Name=Radius
MinValue=0
MaxValue=1024
Caption="Light Radius"
OnCreateComponent=Radius.InternalOnCreateComponent
Hint="Light radius for all lights"
OnChange=menu_c_Light.InternalOnChange
End Object
nu_Radius=moNumericEdit'HideMut.menu_c_Light.Radius'
Begin Object Class=moNumericEdit Name=LightnewRadius
MinValue=0
MaxValue=512
Caption="New Light radius"
OnCreateComponent=LightnewRadius.InternalOnCreateComponent
Hint="New Light radius for laggy lights"
OnChange=menu_c_Light.InternalOnChange
End Object
nu_newRadius=moNumericEdit'HideMut.menu_c_Light.LightnewRadius'
Begin Object Class=moNumericEdit Name=LightmaxRadius
MinValue=1
MaxValue=1024
Caption="Max light Radius"
OnCreateComponent=LightmaxRadius.InternalOnCreateComponent
Hint="Max Light radius for laggy lights"
OnChange=menu_c_Light.InternalOnChange
End Object
nu_maxRadius=moNumericEdit'HideMut.menu_c_Light.LightmaxRadius'
Begin Object Class=moNumericEdit Name=LightCone
MinValue=0
MaxValue=255
Caption="LightCone"
OnCreateComponent=LightCone.InternalOnCreateComponent
Hint="Changes the size of the lightbeam in specific lights such as the spotlight."
OnChange=menu_c_Light.InternalOnChange
End Object
nu_LightCone=moNumericEdit'HideMut.menu_c_Light.LightCone'
Begin Object Class=moNumericEdit Name=LightPeriod
MinValue=0
MaxValue=255
Caption="LightPeriod"
OnCreateComponent=LightPeriod.InternalOnCreateComponent
Hint="Sets speed of selected LightType and/or LightEffect."
OnChange=menu_c_Light.InternalOnChange
End Object
nu_LightPeriod=moNumericEdit'HideMut.menu_c_Light.LightPeriod'
Begin Object Class=moNumericEdit Name=LightBrightness
MinValue=0
MaxValue=255
Caption="LightBrightness"
OnCreateComponent=LightPeriod.InternalOnCreateComponent
Hint="How bright the light should be from source and outwards."
OnChange=menu_c_Light.InternalOnChange
End Object
nu_LightBrightness=moNumericEdit'HideMut.menu_c_Light.LightBrightness'
Begin Object Class=moNumericEdit Name=LightHue
MinValue=0
MaxValue=255
Caption="LightHue"
OnCreateComponent=LightPeriod.InternalOnCreateComponent
Hint="Allows you to select a color through the default color spectrum. Affects the color chosen."
OnChange=menu_c_Light.InternalOnChange
End Object
nu_LightHue=moNumericEdit'HideMut.menu_c_Light.LightHue'
Begin Object Class=moNumericEdit Name=LightSaturation
MinValue=0
MaxValue=255
Caption="LightSaturation"
OnCreateComponent=LightSaturation.InternalOnCreateComponent
Hint="This value sets the amount of white light to mix with the color selected. If the value is set to 0, it will be the pure color. The higher the value, the less rich the color becomes. This is very effective when creating realistic lighting schemes. The default saturation is 127. Affects the chosen color."
OnChange=menu_c_Light.InternalOnChange
End Object
nu_LightSaturation=moNumericEdit'HideMut.menu_c_Light.LightSaturation'
Begin Object Class=moNumericEdit Name=LightEffect
MinValue=0
MaxValue=15
Caption="LightEffect"
OnCreateComponent=LightEffect.InternalOnCreateComponent
Hint="Adds an animation to the light."
OnChange=menu_c_Light.InternalOnChange
End Object
nu_LightEffect=moNumericEdit'HideMut.menu_c_Light.LightEffect'
Begin Object Class=moNumericEdit Name=LightType
MinValue=0
MaxValue=8
Caption="LightType"
OnCreateComponent=LightType.InternalOnCreateComponent
Hint="Light types affect the brightness and darkness values of a lights' lighteffect."
OnChange=menu_c_Light.InternalOnChange
End Object
nu_LightType=moNumericEdit'HideMut.menu_c_Light.LightType'
Begin Object Class=moCheckBox Name=moOptimize
Caption="Toggle static lighting on laggy lights"
OnCreateComponent=moOptimize.InternalOnCreateComponent
Hint="Toggle static lighting on laggy lights(if they are >maxRadus)"
OnChange=menu_c_Light.InternalOnChange
End Object
ch_Optimize=moCheckBox'HideMut.menu_c_Light.moOptimize'
Begin Object Class=moCheckBox Name=moRemoveFlickering
Caption="Remove flickering lights"
OnCreateComponent=moRemoveFlickering.InternalOnCreateComponent
Hint="Remove flickering, blinking, pulse lights cuz fuk TWI optimization bullcrap"
OnChange=menu_c_Light.InternalOnChange
End Object
ch_RemoveFlickering=moCheckBox'HideMut.menu_c_Light.moRemoveFlickering'
Begin Object Class=moCheckBox Name=moFlickeringToStatic
Caption="Flickering to Static lighting"
OnCreateComponent=moFlickeringToStatic.InternalOnCreateComponent
Hint="Makes all flickering lights static and steady"
OnChange=menu_c_Light.InternalOnChange
End Object
ch_FlickeringToStatic=moCheckBox'HideMut.menu_c_Light.moFlickeringToStatic'
Begin Object Class=moCheckBox Name=moActorShadows
Caption="Actor Shadows"
OnCreateComponent=moActorShadows.InternalOnCreateComponent
Hint="Light casts actor shadows."
OnChange=menu_c_Light.InternalOnChange
End Object
ch_ActorShadows=moCheckBox'HideMut.menu_c_Light.moActorShadows'
Begin Object Class=moCheckBox Name=moAttenByLife
Caption="Attenuate light"
OnCreateComponent=moAttenByLife.InternalOnCreateComponent
Hint="Attenuate light by diminishing lifespan"
OnChange=menu_c_Light.InternalOnChange
End Object
ch_AttenByLife=moCheckBox'HideMut.menu_c_Light.moAttenByLife'
Begin Object Class=moCheckBox Name=moCorona
Caption="Light Corona"
OnCreateComponent=moCorona.InternalOnCreateComponent
Hint="Toggle Coronas"
OnChange=menu_c_Light.InternalOnChange
End Object
ch_bCorona=moCheckBox'HideMut.menu_c_Light.moCorona'
Begin Object Class=moCheckBox Name=moDirectionalCorona
Caption="Directional Corona"
OnCreateComponent=moDirectionalCorona.InternalOnCreateComponent
Hint="(if bCorona) Make corona bigger if it faces you, and zero and 90 degrees or beyond."
OnChange=menu_c_Light.InternalOnChange
End Object
ch_bDirectionalCorona=moCheckBox'HideMut.menu_c_Light.moDirectionalCorona'
Begin Object Class=moCheckBox Name=moDynamicLight
Caption="DynamicLight"
OnCreateComponent=moDirectionalCorona.InternalOnCreateComponent
Hint="Use dynamic light on lightsources"
OnChange=menu_c_Light.InternalOnChange
End Object
ch_bDynamicLight=moCheckBox'HideMut.menu_c_Light.moDynamicLight'
Begin Object Class=moCheckBox Name=moLightingVisibility
Caption="LightingVisibility"
OnCreateComponent=moDirectionalCorona.InternalOnCreateComponent
Hint="Calculate Lighting Visibility by using line checks"
OnChange=menu_c_Light.InternalOnChange
End Object
ch_bLightingVisibility=moCheckBox'HideMut.menu_c_Light.moLightingVisibility'
Begin Object Class=moCheckBox Name=moSpecialLit
Caption="SpecialLit"
OnCreateComponent=moDirectionalCorona.InternalOnCreateComponent
Hint="Special Lit adds another layer of lighting used to isolate lighting to specific surfaces."
OnChange=menu_c_Light.InternalOnChange
End Object
ch_bSpecialLit=moCheckBox'HideMut.menu_c_Light.moSpecialLit'
Begin Object Class=GUIScrollTextBox Name=lbActions
bNoTeletype=True
CharDelay=0.000000
EOLDelay=0.000000
RepeatDelay=0.000000
OnCreateComponent=lbActions.InternalOnCreateComponent
FontScale=FNS_Small
bNeverFocus=True
End Object
lb_Actions=GUIScrollTextBox'HideMut.menu_c_Light.lbActions'
Begin Object Class=GUIButton Name=HideLights_Button
Caption="Optimize lights!"
Hint="Optimize light radius to your value(if light radius >maxRadius)"
OnClick=menu_c_Light.ButtonClicked
OnKeyEvent=HideLights_Button.InternalOnKeyEvent
End Object
b_HideLights=GUIButton'HideMut.menu_c_Light.HideLights_Button'
Begin Object Class=GUIButton Name=OptAllLights_Button
Caption="Optimize all lights!"
Hint="Optimize all lights on map by given parameters"
OnClick=menu_c_Light.ButtonClicked
OnKeyEvent=OptAllLights_Button.InternalOnKeyEvent
End Object
b_OptAllLights=GUIButton'HideMut.menu_c_Light.OptAllLights_Button'
Begin Object Class=GUIButton Name=MakeAllLightVisible_Button
Caption="Make all lights visible to player(debug)"
Hint="Debug light sources"
OnClick=menu_c_Light.ButtonClicked
OnKeyEvent=MakeAllLightVisible_Button.InternalOnKeyEvent
End Object
b_MakeAllLightVisible=GUIButton'HideMut.menu_c_Light.MakeAllLightVisible_Button'
Begin Object Class=GUIButton Name=DisableCoronas_Button
Caption="Remove coronas"
Hint="Remove coronas from light sources"
OnClick=menu_c_Light.ButtonClicked
OnKeyEvent=DisableCoronas_Button.InternalOnKeyEvent
End Object
b_DisableCoronas=GUIButton'HideMut.menu_c_Light.DisableCoronas_Button'
Begin Object Class=GUIButton Name=SaveConfig_Button
Caption="Save config variables"
Hint="Remove coronas from light sources"
OnClick=menu_c_Light.ButtonClicked
OnKeyEvent=SaveConfig_Button.InternalOnKeyEvent
End Object
b_SaveConfig=GUIButton'HideMut.menu_c_Light.SaveConfig_Button'
Begin Object Class=GUIButton Name=OptStatic_Button
Caption="Optimize lighting on static meshes"
Hint="Apply bUnlit to all static meshes. Fixes retarded light calculate render to static meshes"
OnClick=menu_c_Light.ButtonClicked
OnKeyEvent=OptStatic_Button.InternalOnKeyEvent
End Object
b_OptStatic=GUIButton'HideMut.menu_c_Light.OptStatic_Button'
Begin Object Class=GUIButton Name=clearLog
Caption="Clear log spam"
Hint="Clear log"
OnClick=menu_c_Light.ButtonClicked
OnKeyEvent=clearLog.InternalOnKeyEvent
End Object
b_ClearLog=GUIButton'HideMut.menu_c_Light.clearLog'
PropagateVisibility=False
WinHeight=1.000000
}