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;
56 for (
int i = 0; i < m_Layouts.Count(); i++)
58 if (m_Layouts.GetElement(i))
59 m_Layouts.GetElement(i).Unlink();
76 m_IDToTypeMap.Insert(EffectWidgetsTypes.BLEEDING_LAYER,GameplayEffectsDataBleeding);
82 RegisterLayouts(
"gui/layouts/gameplay/BleedingEffects.layout",{EffectWidgetsTypes.BLEEDING_LAYER});
87 InitWidgetSet(EffectWidgetsTypes.MASK_BREATH,
true,WIDGETSET_BREATH);
88 InitWidgetSet(EffectWidgetsTypes.HELMET_BREATH,
true,WIDGETSET_BREATH);
89 InitWidgetSet(EffectWidgetsTypes.MOTO_BREATH,
true,WIDGETSET_BREATH);
96 InitWidgetSet(EffectWidgetsTypes.PUMPKIN_OCCLUDER,
false,EffectWidgetsTypes.NVG_OCCLUDER);
113 m_UniqueLayouts.Insert(w);
115 foreach (
int i : types)
123 return m_IDToTypeMap.Get(typeID);
128 if (!m_WidgetDataMap.Get(
id).DataInitialized())
130 m_WidgetDataMap.Get(
id).RegisterData(p);
144 protected void InitWidgetSet(
int type,
bool updating =
false,
int user_id_override = -1)
146 Widget parent = null;
147 if (user_id_override != -1)
149 parent = m_Layouts.Get(type).FindAnyWidgetById(user_id_override);
153 parent = m_Layouts.Get(type).FindAnyWidgetById(type);
158 Print(
"InitWidgetSet | type: " + type +
" - parent not found!");
163 Widget w = parent.GetChildren();
176 if (parent.GetChildren())
185 if (ImageWidget.Cast(parent.GetChildren()))
197 m_UpdatingEffects.Insert(type);
206 data.
Init(input,type,m_Layouts.Get(type),user_override);
207 m_WidgetDataMap.Set(type, data);
217 ret.Insert(EffectWidgetsTypes.MASK_OCCLUDER);
218 ret.Insert(EffectWidgetsTypes.MASK_BREATH);
219 ret.Insert(EffectWidgetsTypes.HELMET_OCCLUDER);
220 ret.Insert(EffectWidgetsTypes.HELMET_BREATH);
221 ret.Insert(EffectWidgetsTypes.MOTO_OCCLUDER);
222 ret.Insert(EffectWidgetsTypes.MOTO_BREATH);
223 ret.Insert(EffectWidgetsTypes.COVER_FLASHBANG);
224 ret.Insert(EffectWidgetsTypes.NVG_OCCLUDER);
225 ret.Insert(EffectWidgetsTypes.PUMPKIN_OCCLUDER);
226 ret.Insert(EffectWidgetsTypes.EYEPATCH_OCCLUDER);
227 ret.Insert(EffectWidgetsTypes.HELMET2_OCCLUDER);
237 int runningEffectCount = m_RunningEffects.Count();
238 bool runningEffectsPresent = runningEffectCount > 0;
240 for (
int i = 0; i < m_RunningEffectsPrevious.Count(); i++)
242 value = m_RunningEffectsPrevious.Get(i);
243 dta = m_WidgetDataMap.Get(value);
244 if (runningEffectCount < 1 || m_RunningEffects.Find(value) == -1)
252 for (
int j = 0; j < m_WidgetDataMap.Get(value).GetWidgetSet().
Count(); j++)
254 w = m_WidgetDataMap.Get(value).GetWidgetSet().Get(j);
257 w.GetParent().Show(
false);
263 if (runningEffectsPresent)
266 for (i = 0; i < runningEffectCount; i++)
268 value = m_RunningEffects.Get(i);
269 dta = m_WidgetDataMap.Get(value);
272 dta.m_LayoutRoot.Show(
true);
277 for (j = 0; j < m_WidgetDataMap.Get(value).GetWidgetSet().
Count(); j++)
279 w = m_WidgetDataMap.Get(value).GetWidgetSet().Get(j);
296 m_Root.Show(runningEffectsPresent && m_SuspendRequests.Count() < 1);
297 m_RunningEffectsPrevious.Clear();
302 if (effects && effects.Count() > 0)
304 m_RunningEffectsPrevious.Copy(m_RunningEffects);
307 for (
int i = 0; i < effects.Count(); i++)
309 value = effects.Get(i);
310 m_RunningEffects.Insert(value);
313 if (m_RunningEffectsPrevious.Count() != m_RunningEffects.Count())
322 if (effects && effects.Count() > 0)
324 m_RunningEffectsPrevious.Copy(m_RunningEffects);
326 int count = effects.Count();
329 for (
int i = 0; i < count; ++i)
331 value = effects.Get(i);
332 idx = m_RunningEffects.Find(value);
335 m_RunningEffects.Remove(idx);
339 if (m_RunningEffectsPrevious.Count() != m_RunningEffects.Count())
352 int count = m_RunningEffects.Count();
354 for (
int i = 0; i < count; i++)
356 data = m_WidgetDataMap.Get(m_RunningEffects[i]);
361 m_RunningEffectsPrevious.Copy(m_RunningEffects);
362 m_RunningEffects.Clear();
368 return m_RunningEffects && m_RunningEffects.Count() > 0;
373 m_SuspendRequests.Insert(request_id);
379 int idx = m_SuspendRequests.Find(request_id);
382 m_SuspendRequests.Remove(idx);
389 m_SuspendRequests.Clear();
395 return m_SuspendRequests.Count();
404 if (type == EffectWidgetsTypes.ROOT)
410 int type_widgetset = 0;
411 for (
int i = 0; i < m_UpdatingEffects.Count(); i++)
413 if (m_RunningEffects.Find(m_UpdatingEffects.Get(i)) != -1)
415 type_widgetset = m_UpdatingEffects.Get(i);
417 dta = m_WidgetDataMap.Get(type_widgetset);
421 dta.
Update(timeSlice,p,handle);
426 widget_set = dta.GetWidgetSet();
427 foreach (Widget w : widget_set)
429 if (w.IsVisibleHierarchy() && m_UpdatedWidgetsCheck.Find(w) == -1)
431 m_UpdatedWidgetsCheck.Insert(w);
441 if (m_RunningEffects.Find(type) != -1)
443 dta = m_WidgetDataMap.Get(type);
447 dta.
Update(timeSlice,p,handle);
452 widget_set = dta.GetWidgetSet();
453 foreach (Widget w2 : widget_set)
455 if (w2.IsVisibleHierarchy() && m_UpdatedWidgetsCheck.Find(w2) == -1)
457 m_UpdatedWidgetsCheck.Insert(w2);
465 m_UpdatedWidgetsCheck.Clear();
466 m_UpdatedWidgetSetsCheck.Clear();
472 if (m_UpdatedWidgetSetsCheck.Find(m_WidgetDataMap.Get(type).GetWidgetSetID()) != -1)
480 case EffectWidgetsTypes.MOTO_BREATH:
481 case EffectWidgetsTypes.HELMET_BREATH:
482 case EffectWidgetsTypes.MASK_BREATH:
488 case EffectWidgetsTypes.MOTO_OCCLUDER:
489 case EffectWidgetsTypes.EYEPATCH_OCCLUDER:
490 case EffectWidgetsTypes.HELMET_OCCLUDER:
491 case EffectWidgetsTypes.HELMET2_OCCLUDER:
492 case EffectWidgetsTypes.MASK_OCCLUDER:
498 case EffectWidgetsTypes.COVER_FLASHBANG:
509 m_UpdatedWidgetSetsCheck.Insert(m_WidgetDataMap.Get(type).GetWidgetSetID());
516 case EffectWidgetsTypes.MOTO_BREATH:
517 case EffectWidgetsTypes.HELMET_BREATH:
518 case EffectWidgetsTypes.MASK_BREATH:
524 case EffectWidgetsTypes.MOTO_OCCLUDER:
525 case EffectWidgetsTypes.EYEPATCH_OCCLUDER:
526 case EffectWidgetsTypes.HELMET_OCCLUDER:
527 case EffectWidgetsTypes.HELMET2_OCCLUDER:
528 case EffectWidgetsTypes.MASK_OCCLUDER:
534 case EffectWidgetsTypes.COVER_FLASHBANG:
549 const float BREATH_HDR_MIN = 0.005;
550 const float BREATH_HDR_MAX = 1.0;
551 const float BREATH_COLOR_MULT_MIN = 0.5;
552 const float BREATH_COLOR_MULT_MAX = 0.8;
559 float modifier =
Math.Lerp(0.25, 0.5, m_BreathResidue);
560 float speed = timeSlice * modifier;
561 m_BreathResidue -= speed;
562 m_BreathResidue =
Math.Clamp(m_BreathResidue,0,1);
563 float residue_final =
Math.Lerp(0, 0.7, m_BreathResidue);
567 hdr_mult =
Math.Clamp(hdr_mult,BREATH_HDR_MIN,BREATH_HDR_MAX);
568 hdr_mult =
Math.InverseLerp(BREATH_HDR_MIN,BREATH_HDR_MAX,hdr_mult);
569 hdr_mult =
Math.Lerp(BREATH_COLOR_MULT_MAX,BREATH_COLOR_MULT_MIN,hdr_mult);
570 m_BreathColor =
ARGBF(0.0,1.0 * hdr_mult,1.0 * hdr_mult,1.0 * hdr_mult);
572 m_BreathAlphaVal =
Math.Lerp(m_BreathAlphaVal, residue_final, timeSlice);
577 w.SetColor(m_BreathColor);
578 w.SetAlpha(m_BreathAlphaVal);
597 Param1<float> par = Param1<float>.Cast(p);
598 m_FlashbangCoverAlphaVal = par.param1;
609 w.SetAlpha(1 - m_FlashbangCoverAlphaVal);
621 Param1<float> par = Param1<float>.Cast(p);
624 float alpha_mod =
Math.Clamp(par.param1,0.0,1.0);
625 m_Root.SetAlpha(alpha_mod);
636 if (m_SuspendRequests.Count() > 0)
666 m_BreathResidue +=
Math.Lerp(0,0.35,breathing_resistance01);
667 m_BreathResidue =
Math.Clamp(m_BreathResidue,0,1);
Manages all bleeding indicators and their updates.
override bool DataInitialized()
override void Init(array< ref Widget > input, int type, Widget layout_root, int user_override=-1)
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)
override void UpdateVisibility(bool state)
override bool HasDefinedHandle()
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)
int ARGBF(float fa, float fr, float fg, float fb)
Converts <0.0, 1.0> ARGB into color.