Dayz
Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Toggle main menu visibility
Loading...
Searching...
No Matches
lightdimming.c
Go to the documentation of this file.
1
enum
ELightDimmingState
2
{
3
PAUSED
,
4
DIMMING
,
5
PAUSED_DIMMED
,
6
BRIGHTENING
7
}
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
*/
29
class
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
;
42
protected
ELightDimmingState
m_DimState
;
43
protected
ScriptedLightBase
m_Light
;
44
protected
DimmingConfig
m_ActiveCfg
;
45
protected
ref
array<ref DimmingConfig>
m_Configs
=
new
array<ref DimmingConfig>
();
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
55
ELightDimmingState
GetState
()
56
{
57
return
m_DimState
;
58
}
59
60
// load additional config for dimming to allow switches between multiple configurations
61
void
AddConfig
(
DimmingConfig
cfg)
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
{
75
m_DimState
=
ELightDimmingState
.DIMMING;
76
77
if
(
m_ActiveCfg
.m_UsePatterns)
78
{
79
SelectPattern
();
80
if
(
m_ToBeDestroyed
)
81
return
;
82
83
m_DimBrigthnessTarget
=
m_ActiveCfg
.m_BrightnessPatterns[
m_CurrentPatternID
][
m_CurrentEntryID
] * 0.01 *
m_DimBrigthnessBase
;
84
85
m_DimDelta
=
m_ActiveCfg
.m_DimSpeedPatterns[
m_CurrentPatternID
][
m_CurrentEntryID
];
86
if
(
m_DimDelta
==
FLICKER_TIME
)
// flicker, skip dim interp
87
{
88
AdvanceState
(
ELightDimmingState
.DIMMING);
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
98
m_DimBrigthnessSpeedCoef
= 1/
m_DimDelta
;
99
}
100
else
if
(lastState ==
ELightDimmingState
.DIMMING)
101
{
102
m_DimState
=
ELightDimmingState
.PAUSED_DIMMED;
103
if
(
m_ActiveCfg
.m_UsePatterns)
104
m_DimDelta
=
m_ActiveCfg
.m_DurationPatterns[
m_CurrentPatternID
][
m_CurrentEntryID
];
105
else
106
m_DimDelta
=
Math
.
RandomFloat
(
m_ActiveCfg
.m_DimBrigthnessDurationMin,
m_ActiveCfg
. m_DimBrigthnessDurationMax);
107
108
SetDimmingVal
(
m_DimBrigthnessTarget
);
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
127
m_DimBrigthnessSpeedCoef
= 1/
m_DimDelta
;
128
}
129
else
if
(lastState ==
ELightDimmingState
.BRIGHTENING)
130
{
131
m_DimState
=
ELightDimmingState
.PAUSED;
132
133
if
(
m_ActiveCfg
.m_UsePatterns)
134
{
135
m_DimDelta
=
m_ActiveCfg
.m_PausePatterns[
m_CurrentPatternID
][
m_CurrentEntryID
];
136
m_CurrentEntryID
++;
137
}
138
else
139
m_DimDelta
=
Math
.
RandomFloat
(
m_ActiveCfg
.m_DimBrigthnessPauseMin,
m_ActiveCfg
.m_DimBrigthnessPauseMax);
140
141
SetDimmingVal
(
m_DimBrigthnessBase
);
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
150
m_CurrentPatternID
++;
151
m_CurrentEntryID
= 0;
152
153
if
(
m_CurrentPatternID
==
m_ActiveCfg
.m_PatternCount)
154
{
155
if
(
m_ActiveCfg
.m_PatternRepeatCount == -1)
156
m_CurrentPatternID
= 0;
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--;
165
m_CurrentPatternID
= 0;
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
177
m_CurrentPatternID
= 0;
178
m_CurrentEntryID
= 0;
179
m_DimState
=
ELightDimmingState
.PAUSED;
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
{
190
AdvanceState
(
m_DimState
);
191
return
;
192
}
193
194
if
(
m_DimState
==
ELightDimmingState
.DIMMING ||
m_DimState
==
ELightDimmingState
.BRIGHTENING)
195
{
196
if
(
m_DimState
==
ELightDimmingState
.DIMMING)
197
SetDimmingVal
(
Math
.
Lerp
(
m_DimBrigthnessTarget
,
m_DimBrigthnessBase
,
m_DimDelta
*
m_DimBrigthnessSpeedCoef
));
198
else
199
SetDimmingVal
(
Math
.
Lerp
(
m_DimBrigthnessBase
,
m_DimBrigthnessTarget
,
m_DimDelta
*
m_DimBrigthnessSpeedCoef
));
200
}
201
}
202
}
DimmingConfig
Definition
dimmingconfig.c:2
Math
Definition
enmath.c:7
ScriptedLightBase
Definition
pointlightbase.c:2
array
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Definition
isboxcollidinggeometryproxyclasses.c:28
Math::RandomFloat
static proto float RandomFloat(float min, float max)
Returns a random float number between and min[inclusive] and max[exclusive].
Math::Lerp
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
PAUSED
@ PAUSED
The video is paused.
Definition
enwidgets.c:523
GetState
proto native int GetState()
returns one of STATE_...
Definition
staminahandler.c:31
m_Light
class Land_Buoy extends House m_Light
m_ActiveCfg
DimmingConfig m_ActiveCfg
Definition
lightdimming.c:44
m_CurrentPatternID
int m_CurrentPatternID
Definition
lightdimming.c:38
m_Configs
ref array< ref DimmingConfig > m_Configs
Definition
lightdimming.c:45
m_CurrentEntryID
int m_CurrentEntryID
Definition
lightdimming.c:39
HandleDimming
void HandleDimming(float timeSlice)
Definition
lightdimming.c:182
m_DimBrigthnessBase
float m_DimBrigthnessBase
Definition
lightdimming.c:33
m_ToBeDestroyed
bool m_ToBeDestroyed
Definition
lightdimming.c:41
SwapConfig
void SwapConfig(int index)
Definition
lightdimming.c:170
SelectPattern
void SelectPattern()
Definition
lightdimming.c:145
SetDimmingVal
void SetDimmingVal(float val)
Definition
lightdimming.c:66
LightDimming
void LightDimming(ScriptedLightBase light, float baseBrightness, DimmingConfig dimCfg)
Definition
lightdimming.c:47
AdvanceState
void AdvanceState(ELightDimmingState lastState)
Definition
lightdimming.c:71
ELightDimmingState
ELightDimmingState
Definition
lightdimming.c:2
DIMMING
@ DIMMING
Definition
lightdimming.c:4
PAUSED_DIMMED
@ PAUSED_DIMMED
Definition
lightdimming.c:5
BRIGHTENING
@ BRIGHTENING
Definition
lightdimming.c:6
m_DimDelta
float m_DimDelta
Definition
lightdimming.c:36
AddConfig
void AddConfig(DimmingConfig cfg)
Definition
lightdimming.c:61
FLICKER_TIME
enum ELightDimmingState FLICKER_TIME
m_DimBrigthnessTarget
float m_DimBrigthnessTarget
Definition
lightdimming.c:35
m_DimState
ELightDimmingState m_DimState
Definition
lightdimming.c:42
m_DimBrigthnessSpeedCoef
float m_DimBrigthnessSpeedCoef
Definition
lightdimming.c:34
Games
Dayz
scripts
4_world
entities
scriptedlightbase
dimming
lightdimming.c
Generated by
1.17.0