DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
GEWidgetsMetaDataBleeding.c
См. документацию.
1
4{
5 protected bool m_Initialized; //tied to initialization of 'BleedingSourcesManagerBase' on player object, skips updates until ready, even when formally active
6 protected bool m_Visible; //overall visibility
10 protected int m_LastDropIdx;
11 protected int m_ImageWidgetCount; //number of available blood drop image widgets
15
17
25
26 override void Init(array<ref Widget> input, int type, Widget layout_root, int user_override = -1)
27 {
28 super.Init(input, type, layout_root, user_override);
29
30 m_WidgetArray.ShuffleArray(); //shuffles order of the widgets on every init
31 m_ImageWidgetCount = m_WidgetArray.Count();
32 m_BloodDropsFrame = m_LayoutRoot.FindAnyWidgetById(EffectWidgetsTypes.BLEEDING_LAYER);
33 m_Visible = g_Game.GetProfileOption(EDayZProfilesOptions.BLEEDINGINDICATION);
35 m_LastDropIdx = -1;
37
42 }
43
44 override bool HasDefinedHandle()
45 {
46 return true;
47 }
48
49 override bool DataInitialized()
50 {
51 return m_Initialized;
52 }
53
54 override void RegisterData(Param p)
55 {
56 if (m_Initialized)
57 {
58 #ifdef DEVELOPER
59 ErrorEx("" + this + " is already initialized, further registration not possible!");
60 #else
61 Debug.Log("ERROR: " + this + " is already initialized, further registration not possible!");
62 #endif
63 return;
64 }
65
66 //<finish registration,bit,flow_modifier>
68 if (Class.CastTo(par,p))
69 {
70 if (par.param1 == true) //finish registration
71 {
72 m_Initialized = true;
73 return;
74 }
75
76 RegisterBleedingIndicatorInstance(par.param2,par.param3);
77 }
78 }
79
80 void RegisterBleedingIndicatorInstance(int bit, float flow_modifier)
81 {
82 int severity = CalculateSeverity(flow_modifier);
83 BleedingIndicator indicator = new BleedingIndicator(bit,severity,this); //source_ID == bit for the purpose of pairing
84 m_RegisteredInstances.Set(bit,indicator);
85 }
86
87 void SpawnBleedingIndicator(int source_ID, vector position)
88 {
89 if (m_RunningIndicators.Find(source_ID) != -1)
90 {
91 return;
92 }
93 BleedingIndicator indicator = m_RegisteredInstances.Get(source_ID);
94 //indicator.InitIndicator(position); //would be nice if we could pair the indicator position to the hit position that caused the bleeding, wouldn't it
95 indicator.InitIndicator(GenerateSequenceRandomPosition());
96 m_RunningIndicators.Insert(source_ID);
97 }
98
114
115 ImageWidget GetNextDropImage()
116 {
119 {
120 m_LastDropIdx = 0;
121 }
122
123 return ImageWidget.Cast(m_WidgetArray[m_LastDropIdx]);
124 }
125
126 void StopBleedingIndicator(int source_ID, bool instant = false)
127 {
128 m_RegisteredInstances.Get(source_ID).StopIndicator(instant); //stop queued, evaluated on update!
129 }
130
131 void UpdateBleedingIndicators(float timeSlice)
132 {
133 BleedingIndicator bib;
134 for (int i = 0; i < m_RunningIndicators.Count(); i++)
135 {
137 bib.Update(timeSlice);
138 if ( bib.GetEndNow() )
139 {
141 }
142 }
143 }
144
146 {
147 for (int i = 0; i < m_CleanupQueue.Count(); i++)
148 {
149 m_RunningIndicators.RemoveItem(m_CleanupQueue[i]);
150 }
151 m_CleanupQueue.Clear();
152 }
153
154 override void Update(float timeSlice = 0, Param p = null, int handle = -1)
155 {
156 //starts or ends a bleeding indicator
157 if (p)
158 {
159 //start/stop of the indicator
160 //<state,bit,position,immediate>
161 Param4<bool,int,vector,bool> par;
162
163 //hide/show of bleeding effect visuals
164 //<state>
165 Param1<bool> parShow;
166
167 if (Class.CastTo(par,p))
168 {
169 bool state = par.param1;
170 if (state) //queue add indicator
171 {
172 SpawnBleedingIndicator(par.param2,par.param3);
173 }
174 else //queue stop indicator
175 {
176 StopBleedingIndicator(par.param2,par.param4);
177 }
178 }
179 else if (Class.CastTo(parShow,p) && m_Visible != parShow.param1)
180 {
181 m_Visible = parShow.param1;
183 }
184 }
185
186 //updates bleeding indicators
187 UpdateBleedingIndicators(timeSlice);
189
190 if (m_RunningIndicators.Count() <= 0)
191 {
192 GetGame().GetMission().GetEffectWidgets().RemoveActiveEffects({EffectWidgetsTypes.BLEEDING_LAYER});
193 m_WidgetArray.ShuffleArray();
194 }
195 }
196
197 override void UpdateVisibility(bool state)
198 {
199 m_Visible = g_Game.GetProfileOption(EDayZProfilesOptions.BLEEDINGINDICATION); //ugh
200 //manage layout visibility
202 while (w && w != m_LayoutRoot && m_Visible == state && w.IsVisibleHierarchy() != state)
203 {
204 w.Show(state);
205 w = w.GetParent();
206 }
207 }
208
210 override void ForceStop()
211 {
212 super.ForceStop();
213
214 foreach (int i: m_RunningIndicators)
215 {
216 m_RegisteredInstances.Get(i).StopIndicator(true);
217 }
218 Update();
219 }
220
221 void BuildProbabilityData(int severity, float frequency)
222 {
223 if (!m_ProbabilityMap)
224 {
226 }
227
228 array<float> probabilities = new array<float>;
229
230 for (int i = 0; i < BleedingIndicationConstants.SEQUENCE_STEPS; i++)
231 {
232 probabilities.Insert(Math.Poisson(frequency,i));
233 }
234
235 m_ProbabilityMap.Insert(severity,probabilities);
236 }
237
239 {
240 array<float> ret = m_ProbabilityMap.Get(severity);
241 if (!ret)
242 {
243 ErrorEx("No defined data for the selected severity!");
244 }
245 return ret;
246 }
247
249 {
250 Widget frameParent = m_LayoutRoot.FindAnyWidget("PoisitioningFrames");
251 if (frameParent)
252 {
254 {
256 }
257
258 Widget frame = frameParent.GetChildren();
259 while (frame)
260 {
261 m_PositioningFramesArray.Insert(frame);
262 frame = frame.GetSibling();
263 }
264 }
265 }
266
268 {
270 {
271 int arrayCount = m_PositioningFramesArray.Count();
272 int index = Math.RandomInt(0,arrayCount);
273 if (index == m_LastPositionFrameUsed)
274 {
275 index++;
276 if (index >= arrayCount)
277 {
278 index = 0;
279 }
280 }
281
282 Widget frame = m_PositioningFramesArray[index];
284
285 if (frame)
286 {
287 int screenX,screenY;
288 float x,y,x_size,y_size;
289 frame.GetScreenPos(x,y);
290 frame.GetScreenSize(x_size,y_size);
291
292 x = Math.RandomFloatInclusive(x,x+x_size);
293 y = Math.RandomFloatInclusive(y,y+y_size);
294
295 return Vector(x,y,0);
296 }
297 }
298 return vector.Zero;
299 }
300}
map
Определения ControlsXboxNew.c:4
DayZGame g_Game
Определения DayZGame.c:3868
EDayZProfilesOptions
Определения EDayZProfilesOptions.c:2
Icon x
Icon y
static const int SEQUENCE_STEPS
Определения BleedingIndicationConstants.c:8
static const float SEQUENCE_DROP_AVERAGE_HIGH
Определения BleedingIndicationConstants.c:51
static const float SEQUENCE_DROP_AVERAGE_MEDIUM
Определения BleedingIndicationConstants.c:38
static const int INDICATOR_SEVERITY_MEDIUM
Определения BleedingIndicationConstants.c:6
static const float SEQUENCE_DROP_AVERAGE_LOW
Определения BleedingIndicationConstants.c:25
static const int INDICATOR_SEVERITY_LOW
Определения BleedingIndicationConstants.c:5
static const int INDICATOR_SEVERITY_HIGH
Определения BleedingIndicationConstants.c:7
proto native Mission GetMission()
Super root of all classes in Enforce script.
Определения EnScript.c:11
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
Определения Debug.c:122
Определения Debug.c:2
override void RemoveActiveEffects(array< int > effects)
Определения GameplayEffectWidgets.c:301
override bool DataInitialized()
Определения GEWidgetsMetaDataBleeding.c:49
ref map< int, ref BleedingIndicator > m_RegisteredInstances
Определения GEWidgetsMetaDataBleeding.c:7
override void Init(array< ref Widget > input, int type, Widget layout_root, int user_override=-1)
Определения GEWidgetsMetaDataBleeding.c:26
override void ForceStop()
stops and re-sets indicators and images even out of sequence. Should still be tied to the 'player' up...
Определения GEWidgetsMetaDataBleeding.c:210
ref array< int > m_CleanupQueue
Определения GEWidgetsMetaDataBleeding.c:8
ImageWidget GetNextDropImage()
Определения GEWidgetsMetaDataBleeding.c:115
override void RegisterData(Param p)
Определения GEWidgetsMetaDataBleeding.c:54
ref array< Widget > m_PositioningFramesArray
Определения GEWidgetsMetaDataBleeding.c:13
void CleanupBleedingIndicators()
Определения GEWidgetsMetaDataBleeding.c:145
void SpawnBleedingIndicator(int source_ID, vector position)
Определения GEWidgetsMetaDataBleeding.c:87
array< float > GetProbabilities(int severity)
Определения GEWidgetsMetaDataBleeding.c:238
override void Update(float timeSlice=0, Param p=null, int handle=-1)
Определения GEWidgetsMetaDataBleeding.c:154
vector GenerateSequenceRandomPosition()
Определения GEWidgetsMetaDataBleeding.c:267
ref map< int, ref array< float > > m_ProbabilityMap
Определения GEWidgetsMetaDataBleeding.c:12
void BuildProbabilityData(int severity, float frequency)
Определения GEWidgetsMetaDataBleeding.c:221
int CalculateSeverity(float flow_modifier)
Определения GEWidgetsMetaDataBleeding.c:99
override void UpdateVisibility(bool state)
Определения GEWidgetsMetaDataBleeding.c:197
ref array< int > m_RunningIndicators
Определения GEWidgetsMetaDataBleeding.c:9
void GameplayEffectsDataBleeding(array< ref Widget > input, int type, int user_override=-1)
Определения GEWidgetsMetaDataBleeding.c:18
void BuildPositioningData()
Определения GEWidgetsMetaDataBleeding.c:248
override bool HasDefinedHandle()
Определения GEWidgetsMetaDataBleeding.c:44
int m_LastPositionFrameUsed
Определения GEWidgetsMetaDataBleeding.c:16
void StopBleedingIndicator(int source_ID, bool instant=false)
Определения GEWidgetsMetaDataBleeding.c:126
void UpdateBleedingIndicators(float timeSlice)
Определения GEWidgetsMetaDataBleeding.c:131
void RegisterBleedingIndicatorInstance(int bit, float flow_modifier)
Определения GEWidgetsMetaDataBleeding.c:80
Widget m_BloodDropsFrame
Определения GEWidgetsMetaDataBleeding.c:14
Manages all bleeding indicators and their updates.
Определения GEWidgetsMetaDataBleeding.c:4
Определения EnMath.c:7
GameplayEffectWidgets_base GetEffectWidgets()
Определения EntityAI.c:95
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Определения param.c:12
static const float BLEEDING_SOURCE_FLOW_MODIFIER_LOW
Определения PlayerConstants.c:173
static const float BLEEDING_SOURCE_FLOW_MODIFIER_HIGH
Определения PlayerConstants.c:174
static const float BLEEDING_SOURCE_FLOW_MODIFIER_MEDIUM
Определения PlayerConstants.c:172
Определения PlayerConstants.c:2
Определения EnWidgets.c:190
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static const vector Zero
Определения EnConvert.c:110
Определения EnConvert.c:106
proto native CGame GetGame()
enum ShapeType ErrorEx
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static float Poisson(float mean, int occurences)
occurences values above '12' will cause Factorial to overflow int.
Определения EnMath.c:708
static float RandomFloatInclusive(float min, float max)
Returns a random float number between and min [inclusive] and max [inclusive].
Определения EnMath.c:106
static proto int RandomInt(int min, int max)
Returns a random int number between and min [inclusive] and max [exclusive].
proto native volatile void Update()
Определения PlayerSoundManager.c:125