Dayz
Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Toggle main menu visibility
Loading...
Searching...
No Matches
rainprocurementhandler.c
Go to the documentation of this file.
1
class
RainProcurementHandler
:
Managed
2
{
3
protected
MissionBaseWorld
m_Mission
;
4
protected
ref set<RainProcurementComponentBase>
m_ActiveComponents
;
5
protected
ref set<RainProcurementComponentBase>
m_ChangedQueue
;
6
protected
ref set<int>
m_CleanupQueue
;
7
protected
const
int
UPDATE_BATCH_SIZE
= 20;
//Tweak this to adjust max batch size
8
const
int
UPDATE_TIME
= 10;
//seconds
9
protected
bool
m_Update
;
10
protected
bool
m_ProcessComponents
;
11
protected
bool
m_ProcessingFinished
;
12
protected
int
m_NextToProcessIdx
;
13
protected
float
m_UpdateTimer
;
14
protected
float
m_LiquidAmountCoef
;
15
16
void
RainProcurementHandler
(
MissionBaseWorld
mission
)
17
{
18
m_Mission
=
mission
;
19
m_Update
=
false
;
20
m_ProcessComponents
=
false
;
21
m_ProcessingFinished
=
true
;
22
m_ActiveComponents
=
new
set<RainProcurementComponentBase>;
23
m_ChangedQueue
=
new
set<RainProcurementComponentBase>;
24
m_CleanupQueue
=
new
set<int>;
25
m_NextToProcessIdx
= 0;
26
m_UpdateTimer
= 0;
27
}
28
29
void
QueueStart
(
RainProcurementComponentBase
component
)
30
{
31
m_ChangedQueue
.Insert(
component
);
32
m_Update
=
true
;
33
}
34
35
void
QueueStop
(
RainProcurementComponentBase
component
)
36
{
37
m_ChangedQueue
.Insert(
component
);
38
m_Update
=
true
;
39
}
40
41
void
Update
(
float
timeslice)
42
{
43
if
(!
m_Update
)
44
return
;
45
46
if
(
m_ProcessComponents
)
47
{
48
if
(
m_ProcessingFinished
)
//do on start and after the batch is finished
49
{
50
m_LiquidAmountCoef
=
DetermineAmountCoef
();
51
if
(
m_LiquidAmountCoef
== 0)
//skip processing when not raining
52
{
53
Reset
();
54
return
;
55
}
56
}
57
58
m_ProcessingFinished
=
ProcessBatch
();
59
60
if
(
m_ProcessingFinished
)
61
{
62
Reset
();
63
}
64
}
65
else
66
{
67
m_UpdateTimer
+= timeslice;
68
if
(
m_UpdateTimer
>=
UPDATE_TIME
)
69
{
70
HandleChangedComponents
();
71
Cleanup
();
72
CheckUpdating
();
73
m_ProcessComponents
=
m_Update
;
74
if
(!
m_Update
)
75
Reset
();
76
}
77
}
78
}
79
81
protected
bool
ProcessBatch
()
82
{
83
bool
ret =
false
;
84
int
count =
m_ActiveComponents
.Count();
85
int
target = (
int
)
Math
.
Clamp
(
m_NextToProcessIdx
+
UPDATE_BATCH_SIZE
, 0, count);
86
87
for
(
m_NextToProcessIdx
;
m_NextToProcessIdx
< target; ++
m_NextToProcessIdx
)
88
{
89
if
(
m_ActiveComponents
[
m_NextToProcessIdx
])
90
m_ActiveComponents
[
m_NextToProcessIdx
].OnUpdate(
m_UpdateTimer
,
m_LiquidAmountCoef
);
91
else
92
m_CleanupQueue
.Insert(
m_NextToProcessIdx
);
93
}
94
95
ret = target == count;
96
if
(ret)
97
{
98
m_NextToProcessIdx
= 0;
99
}
100
101
return
ret;
102
}
103
104
protected
void
Cleanup
()
105
{
106
int
count =
m_CleanupQueue
.Count();
107
if
(count == 0)
108
return
;
109
110
for
(
int
i = count - 1; i > -1; i--)
111
{
112
m_ActiveComponents
.Remove(
m_CleanupQueue
[i]);
113
}
114
m_CleanupQueue
.Clear();
115
}
116
117
protected
void
Reset
()
118
{
119
m_ProcessComponents
=
false
;
120
m_ProcessingFinished
=
true
;
121
m_UpdateTimer
= 0;
122
}
123
124
protected
void
HandleChangedComponents
()
125
{
126
127
int
count =
m_ChangedQueue
.Count();
128
int
idx;
129
130
foreach
(
RainProcurementComponentBase
component
:
m_ChangedQueue
)
131
{
132
if
(!
component
)
133
continue
;
134
135
if
(
component
.IsActive())
136
{
137
m_ActiveComponents
.Insert(
component
);
138
}
139
else
140
{
141
idx =
m_ActiveComponents
.Find(
component
);
142
if
(idx != -1)
143
m_ActiveComponents
.Remove(idx);
144
}
145
}
146
m_ChangedQueue
.Clear();
147
}
148
149
protected
void
CheckUpdating
()
150
{
151
m_Update
=
m_ActiveComponents
.Count() != 0;
152
}
153
154
float
GetLiquidAmountCoef
()
155
{
156
return
m_LiquidAmountCoef
;
157
}
158
160
float
DetermineAmountCoef
()
161
{
162
return
g_Game
.GetWeather().GetRain().GetActual() +
g_Game
.GetWeather().GetSnowfall().GetActual();
163
}
164
};
int
Param3 int
Managed
TODO doc.
Definition
enscript.c:118
Math
Definition
enmath.c:7
MissionBaseWorld
Definition
missionbase.c:2
RainProcurementComponentBase
Definition
rainprocurementcomponent.c:2
RainProcurementHandler::m_ChangedQueue
ref set< RainProcurementComponentBase > m_ChangedQueue
Definition
rainprocurementhandler.c:5
RainProcurementHandler::m_ActiveComponents
ref set< RainProcurementComponentBase > m_ActiveComponents
Definition
rainprocurementhandler.c:4
RainProcurementHandler::GetLiquidAmountCoef
float GetLiquidAmountCoef()
Definition
rainprocurementhandler.c:154
RainProcurementHandler::Update
void Update(float timeslice)
Definition
rainprocurementhandler.c:41
RainProcurementHandler::Reset
void Reset()
Definition
rainprocurementhandler.c:117
RainProcurementHandler::ProcessBatch
bool ProcessBatch()
returns 'true' when all the batches are finished
Definition
rainprocurementhandler.c:81
RainProcurementHandler::m_CleanupQueue
ref set< int > m_CleanupQueue
Definition
rainprocurementhandler.c:6
RainProcurementHandler::m_Mission
MissionBaseWorld m_Mission
Definition
rainprocurementhandler.c:3
RainProcurementHandler::m_LiquidAmountCoef
float m_LiquidAmountCoef
Definition
rainprocurementhandler.c:14
RainProcurementHandler::RainProcurementHandler
void RainProcurementHandler(MissionBaseWorld mission)
Definition
rainprocurementhandler.c:16
RainProcurementHandler::UPDATE_TIME
const int UPDATE_TIME
Definition
rainprocurementhandler.c:8
RainProcurementHandler::HandleChangedComponents
void HandleChangedComponents()
Definition
rainprocurementhandler.c:124
RainProcurementHandler::CheckUpdating
void CheckUpdating()
Definition
rainprocurementhandler.c:149
RainProcurementHandler::DetermineAmountCoef
float DetermineAmountCoef()
scalable on handler level. Now also handles SNOW, total value can exceed 1.0
Definition
rainprocurementhandler.c:160
RainProcurementHandler::m_ProcessComponents
bool m_ProcessComponents
Definition
rainprocurementhandler.c:10
RainProcurementHandler::m_NextToProcessIdx
int m_NextToProcessIdx
Definition
rainprocurementhandler.c:12
RainProcurementHandler::QueueStart
void QueueStart(RainProcurementComponentBase component)
Definition
rainprocurementhandler.c:29
RainProcurementHandler::m_UpdateTimer
float m_UpdateTimer
Definition
rainprocurementhandler.c:13
RainProcurementHandler::QueueStop
void QueueStop(RainProcurementComponentBase component)
Definition
rainprocurementhandler.c:35
RainProcurementHandler::Cleanup
void Cleanup()
Definition
rainprocurementhandler.c:104
RainProcurementHandler::UPDATE_BATCH_SIZE
const int UPDATE_BATCH_SIZE
Definition
rainprocurementhandler.c:7
RainProcurementHandler::m_ProcessingFinished
bool m_ProcessingFinished
Definition
rainprocurementhandler.c:11
RainProcurementHandler::m_Update
bool m_Update
Definition
rainprocurementhandler.c:9
g_Game
DayZGame g_Game
Definition
dayzgame.c:3942
mission
Mission mission
Definition
displaystatus.c:28
Math::Clamp
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
component
class BoxCollidingParams component
ComponentInfo for BoxCollidingResult.
Games
Dayz
scripts
4_world
classes
rainprocurementhandler.c
Generated by
1.17.0