Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
lightdimming.c
Go to the documentation of this file.
8
9/* Enable and configure light dimming
10
11 Example setup in ScriptedLightBase constructor:
12
13 DimmingConfig dimCfg = new DimmingConfig();
14 // randomized
15 dimCfg.SetRandomBrigthnessLimits(10, 50);
16 dimCfg.SetRandomDimSpeedLimits(0.1, 1);
17 dimCfg.SetRandomDurationLimits(0.2, 1);
18 dimCfg.SetRandomBrightenSpeedLimits(0.1, 1);
19 dimCfg.SetRandomPauseDurationLimits(1, 2);
20
21 // custom patterns
22 float f = LightDimming.FLICKER_TIME;
23 dimCfg.AddDimmingPattern( {0, 0, 50}, {f, f, 0.1}, {f, f, 2}, {f, f, 0.1}, {0.1, 0.1, 4});
24 dimCfg.AddDimmingPattern( {0, 50, 0}, {f, 0.1, f}, {f, 1, f}, {f, 0.1, f}, {0.1, 0.1, 3});
25 dimCfg.SetPatternQueueRepeat(2);
26
27 EnableDimming(6.5, dimCfg);
28*/
29class LightDimming
30{
31 const float FLICKER_TIME = 0.05; // duration of a flicker -> when this speed is set in phase, DIM / BRIGHTEN phases are skipped, producing a quick flicker
32
33 protected float m_DimBrigthnessBase;
34 protected float m_DimBrigthnessSpeedCoef; // interp speed multiplier
35 protected float m_DimBrigthnessTarget; // brightness value we want to dim to
36 protected float m_DimDelta; // delta used for timing states
37
38 protected int m_CurrentPatternID;
39 protected int m_CurrentEntryID;
40
41 protected bool m_ToBeDestroyed;
46
47 void LightDimming(ScriptedLightBase light, float baseBrightness, DimmingConfig dimCfg)
48 {
49 m_Light = light;
50 m_DimBrigthnessBase = baseBrightness;
51 m_Configs.Insert(dimCfg);
52 m_ActiveCfg = dimCfg;
53 }
54
56 {
57 return m_DimState;
58 }
59
60 // load additional config for dimming to allow switches between multiple configurations
62 {
63 m_Configs.Insert(cfg);
64 }
65
66 protected void SetDimmingVal(float val)
67 {
68 m_Light.SetBrightnessTo(val);
69 }
70
71 protected void AdvanceState(ELightDimmingState lastState)
72 {
73 if (lastState == ELightDimmingState.PAUSED)
74 {
76
77 if (m_ActiveCfg.m_UsePatterns)
78 {
81 return;
82
84
86 if (m_DimDelta == FLICKER_TIME) // flicker, skip dim interp
87 {
89 return;
90 }
91 }
92 else
93 {
94 m_DimBrigthnessTarget = Math.RandomFloat(m_ActiveCfg.m_DimBrigthnessMin * m_DimBrigthnessBase, m_ActiveCfg.m_DimBrigthnessMax * m_DimBrigthnessBase);
95 m_DimDelta = Math.RandomFloat(m_ActiveCfg.m_DimSpeedMin, m_ActiveCfg.m_DimSpeedMax);
96 }
97
99 }
100 else if (lastState == ELightDimmingState.DIMMING)
101 {
102 m_DimState = ELightDimmingState.PAUSED_DIMMED;
103 if (m_ActiveCfg.m_UsePatterns)
105 else
106 m_DimDelta = Math.RandomFloat(m_ActiveCfg.m_DimBrigthnessDurationMin,m_ActiveCfg. m_DimBrigthnessDurationMax);
107
109
110 }
111 else if (lastState == ELightDimmingState.PAUSED_DIMMED)
112 {
113 m_DimState = ELightDimmingState.BRIGHTENING;
114
115 if (m_ActiveCfg.m_UsePatterns)
116 {
117 m_DimDelta = m_ActiveCfg.m_BrightenSpeedPatterns[m_CurrentPatternID][m_CurrentEntryID];
118 if (m_DimDelta == FLICKER_TIME) // flicker, skip brighten interp
119 {
120 AdvanceState(ELightDimmingState.BRIGHTENING);
121 return;
122 }
123 }
124 else
125 m_DimDelta = Math.RandomFloat(m_ActiveCfg.m_BrightenSpeedMin, m_ActiveCfg.m_BrightenSpeedMax);
126
128 }
129 else if (lastState == ELightDimmingState.BRIGHTENING)
130 {
132
133 if (m_ActiveCfg.m_UsePatterns)
134 {
137 }
138 else
139 m_DimDelta = Math.RandomFloat(m_ActiveCfg.m_DimBrigthnessPauseMin, m_ActiveCfg.m_DimBrigthnessPauseMax);
140
142 }
143 }
144
145 protected void SelectPattern()
146 {
147 if (m_CurrentEntryID != m_ActiveCfg.m_BrightnessPatterns[m_CurrentPatternID].Count())
148 return; // pattern in progress
149
152
153 if (m_CurrentPatternID == m_ActiveCfg.m_PatternCount)
154 {
155 if (m_ActiveCfg.m_PatternRepeatCount == -1)
157 else if (m_ActiveCfg.m_PatternRepeatCount == 0)
158 {
159 m_ToBeDestroyed = true;
160 m_Light.StopDimming();
161 }
162 else
163 {
164 m_ActiveCfg.m_PatternRepeatCount--;
166 }
167 }
168 }
169
170 void SwapConfig(int index)
171 {
172 if (!m_Configs.IsValidIndex(index))
173 return;
174
175 m_ActiveCfg = m_Configs[index];
176
180 }
181
182 void HandleDimming(float timeSlice)
183 {
184 if (m_ToBeDestroyed)
185 return;
186
187 m_DimDelta -= timeSlice;
188 if (m_DimDelta < 0)
189 {
191 return;
192 }
193
194 if (m_DimState == ELightDimmingState.DIMMING || m_DimState == ELightDimmingState.BRIGHTENING)
195 {
196 if (m_DimState == ELightDimmingState.DIMMING)
198 else
200 }
201 }
202}
Definition enmath.c:7
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
class Land_Buoy extends House m_Light
DimmingConfig m_ActiveCfg
int m_CurrentPatternID
ref array< ref DimmingConfig > m_Configs
int m_CurrentEntryID
void HandleDimming(float timeSlice)
float m_DimBrigthnessBase
bool m_ToBeDestroyed
void SwapConfig(int index)
void SelectPattern()
void SetDimmingVal(float val)
void LightDimming(ScriptedLightBase light, float baseBrightness, DimmingConfig dimCfg)
void AdvanceState(ELightDimmingState lastState)
ELightDimmingState
Definition lightdimming.c:2
@ DIMMING
Definition lightdimming.c:4
@ PAUSED_DIMMED
Definition lightdimming.c:5
@ BRIGHTENING
Definition lightdimming.c:6
@ PAUSED
Definition lightdimming.c:3
float m_DimDelta
void AddConfig(DimmingConfig cfg)
enum ELightDimmingState FLICKER_TIME
float m_DimBrigthnessTarget
ELightDimmingState m_DimState
float m_DimBrigthnessSpeedCoef