25 protected const int WIDGETSET_BREATH = 100;
36 m_UniqueLayouts =
new set<ref Widget>;
38 m_RunningEffects =
new set<int>;
39 m_RunningEffectsPrevious =
new set<int>;
43 m_SuspendRequests =
new set<int>;
46 m_TimeProgBreath = 0.0;
47 m_BreathMultStamina = 1.0;
52 RegisterLayouts(
"gui/layouts/gameplay/BleedingEffects.layout",{EffectWidgetsTypes.BLEEDING_LAYER});
54 InitWidgetSet(EffectWidgetsTypes.MASK_BREATH,
true,WIDGETSET_BREATH);
55 InitWidgetSet(EffectWidgetsTypes.HELMET_BREATH,
true,WIDGETSET_BREATH);
56 InitWidgetSet(EffectWidgetsTypes.MOTO_BREATH,
true,WIDGETSET_BREATH);
58 InitWidgetSet(EffectWidgetsTypes.MASK_OCCLUDER,
false,EffectWidgetsTypes.MASK_OCCLUDER);
62 InitWidgetSet(EffectWidgetsTypes.NVG_OCCLUDER,
false,EffectWidgetsTypes.NVG_OCCLUDER);
63 InitWidgetSet(EffectWidgetsTypes.PUMPKIN_OCCLUDER,
false,EffectWidgetsTypes.NVG_OCCLUDER);
75 for (
int i = 0; i < m_Layouts.Count(); i++)
77 if (m_Layouts.GetElement(i))
78 m_Layouts.GetElement(i).Unlink();
89 m_UniqueLayouts.Insert(w);
91 foreach (
int i : types)
99 m_IDToTypeMap.Insert(EffectWidgetsTypes.BLEEDING_LAYER,GameplayEffectsDataBleeding);
104 return m_IDToTypeMap.Get(typeID);
109 if (!m_WidgetDataMap.Get(
id).DataInitialized())
111 m_WidgetDataMap.Get(
id).RegisterData(p);
125 protected void InitWidgetSet(
int type,
bool updating =
false,
int user_id_override = -1)
128 if (user_id_override != -1)
130 parent = m_Layouts.Get(type).FindAnyWidgetById(user_id_override);
134 parent = m_Layouts.Get(type).FindAnyWidgetById(type);
139 Print(
"InitWidgetSet | type: " + type +
" - parent not found!");
144 Widget w = parent.GetChildren();
157 if (parent.GetChildren())
166 if (ImageWidget.Cast(parent.GetChildren()))
178 m_UpdatingEffects.Insert(type);
187 data.
Init(input,type,m_Layouts.Get(type),user_override);
188 m_WidgetDataMap.Set(type, data);
198 ret.Insert(EffectWidgetsTypes.MASK_OCCLUDER);
199 ret.Insert(EffectWidgetsTypes.MASK_BREATH);
200 ret.Insert(EffectWidgetsTypes.HELMET_OCCLUDER);
201 ret.Insert(EffectWidgetsTypes.HELMET_BREATH);
202 ret.Insert(EffectWidgetsTypes.MOTO_OCCLUDER);
203 ret.Insert(EffectWidgetsTypes.MOTO_BREATH);
204 ret.Insert(EffectWidgetsTypes.COVER_FLASHBANG);
205 ret.Insert(EffectWidgetsTypes.NVG_OCCLUDER);
206 ret.Insert(EffectWidgetsTypes.PUMPKIN_OCCLUDER);
207 ret.Insert(EffectWidgetsTypes.EYEPATCH_OCCLUDER);
208 ret.Insert(EffectWidgetsTypes.HELMET2_OCCLUDER);
218 int runningEffectCount = m_RunningEffects.Count();
219 bool runningEffectsPresent = runningEffectCount > 0;
221 for (
int i = 0; i < m_RunningEffectsPrevious.Count(); i++)
223 value = m_RunningEffectsPrevious.Get(i);
224 dta = m_WidgetDataMap.Get(value);
225 if (runningEffectCount < 1 || m_RunningEffects.Find(value) == -1)
233 for (
int j = 0; j < m_WidgetDataMap.Get(value).GetWidgetSet().
Count(); j++)
235 w = m_WidgetDataMap.Get(value).GetWidgetSet().Get(j);
238 w.GetParent().Show(
false);
244 if (runningEffectsPresent)
247 for (i = 0; i < runningEffectCount; i++)
249 value = m_RunningEffects.Get(i);
250 dta = m_WidgetDataMap.Get(value);
253 dta.m_LayoutRoot.Show(
true);
258 for (j = 0; j < m_WidgetDataMap.Get(value).GetWidgetSet().
Count(); j++)
260 w = m_WidgetDataMap.Get(value).GetWidgetSet().Get(j);
277 m_Root.Show(runningEffectsPresent && m_SuspendRequests.Count() < 1);
278 m_RunningEffectsPrevious.
Clear();
283 if (effects && effects.Count() > 0)
285 m_RunningEffectsPrevious.Copy(m_RunningEffects);
288 for (
int i = 0; i < effects.Count(); i++)
290 value = effects.Get(i);
291 m_RunningEffects.Insert(value);
294 if (m_RunningEffectsPrevious.Count() != m_RunningEffects.Count())
303 if (effects && effects.Count() > 0)
305 m_RunningEffectsPrevious.Copy(m_RunningEffects);
309 for (
int i = 0; i < effects.Count(); i++)
311 value = effects.Get(i);
312 idx = m_RunningEffects.Find(value);
315 m_RunningEffects.Remove(idx);
319 if (m_RunningEffectsPrevious.Count() != m_RunningEffects.Count())
332 int count = m_RunningEffects.Count();
334 for (
int i = 0; i < count; i++)
336 data = m_WidgetDataMap.Get(m_RunningEffects[i]);
341 m_RunningEffectsPrevious.Copy(m_RunningEffects);
342 m_RunningEffects.Clear();
348 return m_RunningEffects && m_RunningEffects.Count() > 0;
353 m_SuspendRequests.Insert(request_id);
359 int idx = m_SuspendRequests.Find(request_id);
362 m_SuspendRequests.Remove(idx);
369 m_SuspendRequests.Clear();
375 return m_SuspendRequests.Count();
384 if (type == EffectWidgetsTypes.ROOT)
390 int type_widgetset = 0;
391 for (
int i = 0; i < m_UpdatingEffects.Count(); i++)
393 if (m_RunningEffects.Find(m_UpdatingEffects.Get(i)) != -1)
395 type_widgetset = m_UpdatingEffects.Get(i);
397 dta = m_WidgetDataMap.Get(type_widgetset);
401 dta.
Update(timeSlice,p,handle);
406 widget_set = dta.GetWidgetSet();
407 foreach (
Widget w : widget_set)
409 if (w.IsVisibleHierarchy() && m_UpdatedWidgetsCheck.Find(w) == -1)
411 m_UpdatedWidgetsCheck.Insert(w);
421 if (m_RunningEffects.Find(type) != -1)
423 dta = m_WidgetDataMap.Get(type);
427 dta.
Update(timeSlice,p,handle);
432 widget_set = dta.GetWidgetSet();
433 foreach (
Widget w2 : widget_set)
435 if (w2.IsVisibleHierarchy() && m_UpdatedWidgetsCheck.Find(w2) == -1)
437 m_UpdatedWidgetsCheck.Insert(w2);
445 m_UpdatedWidgetsCheck.Clear();
446 m_UpdatedWidgetSetsCheck.Clear();
452 if (m_UpdatedWidgetSetsCheck.Find(m_WidgetDataMap.Get(type).GetWidgetSetID()) != -1)
460 case EffectWidgetsTypes.MOTO_BREATH:
461 case EffectWidgetsTypes.HELMET_BREATH:
462 case EffectWidgetsTypes.MASK_BREATH:
468 case EffectWidgetsTypes.MOTO_OCCLUDER:
469 case EffectWidgetsTypes.EYEPATCH_OCCLUDER:
470 case EffectWidgetsTypes.HELMET_OCCLUDER:
471 case EffectWidgetsTypes.HELMET2_OCCLUDER:
472 case EffectWidgetsTypes.MASK_OCCLUDER:
478 case EffectWidgetsTypes.COVER_FLASHBANG:
489 m_UpdatedWidgetSetsCheck.Insert(m_WidgetDataMap.Get(type).GetWidgetSetID());
496 case EffectWidgetsTypes.MOTO_BREATH:
497 case EffectWidgetsTypes.HELMET_BREATH:
498 case EffectWidgetsTypes.MASK_BREATH:
504 case EffectWidgetsTypes.MOTO_OCCLUDER:
505 case EffectWidgetsTypes.EYEPATCH_OCCLUDER:
506 case EffectWidgetsTypes.HELMET_OCCLUDER:
507 case EffectWidgetsTypes.HELMET2_OCCLUDER:
508 case EffectWidgetsTypes.MASK_OCCLUDER:
514 case EffectWidgetsTypes.COVER_FLASHBANG:
529 const float BREATH_HDR_MIN = 0.005;
530 const float BREATH_HDR_MAX = 1.0;
531 const float BREATH_COLOR_MULT_MIN = 0.5;
532 const float BREATH_COLOR_MULT_MAX = 0.8;
539 float modifier =
Math.
Lerp(0.25, 0.5, m_BreathResidue);
540 float speed = timeSlice * modifier;
541 m_BreathResidue -= speed;
542 m_BreathResidue =
Math.
Clamp(m_BreathResidue,0,1);
543 float residue_final =
Math.
Lerp(0, 0.7, m_BreathResidue);
547 hdr_mult =
Math.
Clamp(hdr_mult,BREATH_HDR_MIN,BREATH_HDR_MAX);
549 hdr_mult =
Math.
Lerp(BREATH_COLOR_MULT_MAX,BREATH_COLOR_MULT_MIN,hdr_mult);
550 m_BreathColor =
ARGBF(0.0,1.0 * hdr_mult,1.0 * hdr_mult,1.0 * hdr_mult);
553 m_BreathAlphaVal =
Math.
Lerp(m_BreathAlphaVal, residue_final, timeSlice);
558 w.SetColor(m_BreathColor);
559 w.SetAlpha(m_BreathAlphaVal);
578 Param1<float> par = Param1<float>.Cast(p);
579 m_FlashbangCoverAlphaVal = par.param1;
590 w.SetAlpha(1 - m_FlashbangCoverAlphaVal);
602 Param1<float> par = Param1<float>.Cast(p);
605 float alpha_mod =
Math.
Clamp(par.param1,0.0,1.0);
607 m_Root.SetAlpha(alpha_mod);
618 if (m_SuspendRequests.Count() > 0)
648 m_BreathResidue +=
Math.
Lerp(0,0.35,breathing_resistance01);
649 m_BreathResidue =
Math.
Clamp(m_BreathResidue,0,1);
proto native WorkspaceWidget GetWorkspace()
Manages all bleeding indicators and their updates.
override void Init(array< ref Widget > input, int type, Widget layout_root, int user_override=-1)
override bool HasDefinedHandle()
override bool DataInitialized()
override void UpdateVisibility(bool state)
override void ForceStop()
stops and re-sets indicators and images even out of sequence. Should still be tied to the 'player' up...
override void Update(float timeSlice=0, Param p=null, int handle=-1)
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native CGame GetGame()
proto void Print(void var)
Prints content of variable to console/log.
proto native float GetSceneHDRMul(int camera)
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'.
static proto float InverseLerp(float a, float b, float value)
Calculates the linear value that produces the interpolant value within the range [a,...
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
int ARGBF(float fa, float fr, float fg, float fb)
Converts <0.0, 1.0> ARGB into color.