28 super.Init(input, type, layout_root, user_override);
30 m_WidgetArray.ShuffleArray();
31 m_ImageWidgetCount = m_WidgetArray.Count();
32 m_BloodDropsFrame = m_LayoutRoot.FindAnyWidgetById(EffectWidgetsTypes.BLEEDING_LAYER);
36 m_LastPositionFrameUsed = -1;
59 ErrorEx(
"" +
this +
" is already initialized, further registration not possible!");
61 Debug.Log(
"ERROR: " +
this +
" is already initialized, further registration not possible!");
68 if (
Class.CastTo(par,p))
70 if (par.param1 ==
true)
83 BleedingIndicator indicator =
new BleedingIndicator(bit,severity,
this);
84 m_RegisteredInstances.Set(bit,indicator);
89 if (m_RunningIndicators.Find(source_ID) != -1)
93 BleedingIndicator indicator = m_RegisteredInstances.Get(source_ID);
96 m_RunningIndicators.Insert(source_ID);
101 switch (flow_modifier)
118 if (m_LastDropIdx > (m_ImageWidgetCount - 1))
123 return ImageWidget.Cast(m_WidgetArray[m_LastDropIdx]);
128 m_RegisteredInstances.Get(source_ID).StopIndicator(instant);
133 BleedingIndicator bib;
134 for (
int i = 0; i < m_RunningIndicators.Count(); i++)
136 bib = m_RegisteredInstances.Get(m_RunningIndicators[i]);
137 bib.Update(timeSlice);
138 if ( bib.GetEndNow() )
140 m_CleanupQueue.Insert(m_RunningIndicators[i]);
147 for (
int i = 0; i < m_CleanupQueue.Count(); i++)
149 m_RunningIndicators.RemoveItem(m_CleanupQueue[i]);
151 m_CleanupQueue.Clear();
154 override void Update(
float timeSlice = 0,
Param p = null,
int handle = -1)
161 Param4<bool,int,vector,bool> par;
165 Param1<bool> parShow;
167 if (
Class.CastTo(par,p))
169 bool state = par.param1;
190 if (m_RunningIndicators.Count() <= 0)
193 m_WidgetArray.ShuffleArray();
202 while (w && w != m_LayoutRoot &&
m_Visible == state && w.IsVisibleHierarchy() != state)
214 foreach (
int i: m_RunningIndicators)
216 m_RegisteredInstances.Get(i).StopIndicator(
true);
223 if (!m_ProbabilityMap)
232 probabilities.Insert(
Math.Poisson(frequency,i));
235 m_ProbabilityMap.Insert(severity,probabilities);
243 ErrorEx(
"No defined data for the selected severity!");
250 Widget frameParent = m_LayoutRoot.FindAnyWidget(
"PoisitioningFrames");
253 if (!m_PositioningFramesArray)
258 Widget frame = frameParent.GetChildren();
261 m_PositioningFramesArray.Insert(frame);
262 frame = frame.GetSibling();
269 if (m_PositioningFramesArray)
271 int arrayCount = m_PositioningFramesArray.Count();
272 int index =
Math.RandomInt(0,arrayCount);
273 if (index == m_LastPositionFrameUsed)
276 if (index >= arrayCount)
282 Widget frame = m_PositioningFramesArray[index];
283 m_LastPositionFrameUsed = index;
288 float x,
y,x_size,y_size;
289 frame.GetScreenPos(
x,
y);
290 frame.GetScreenSize(x_size,y_size);
292 x =
Math.RandomFloatInclusive(
x,
x+x_size);
293 y =
Math.RandomFloatInclusive(
y,
y+y_size);
Super root of all classes in Enforce script.
Manages all bleeding indicators and their updates.
override bool DataInitialized()
ref map< int, ref BleedingIndicator > m_RegisteredInstances
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...
ref array< int > m_CleanupQueue
ImageWidget GetNextDropImage()
override void RegisterData(Param p)
ref array< Widget > m_PositioningFramesArray
void CleanupBleedingIndicators()
void SpawnBleedingIndicator(int source_ID, vector position)
array< float > GetProbabilities(int severity)
override void Update(float timeSlice=0, Param p=null, int handle=-1)
vector GenerateSequenceRandomPosition()
ref map< int, ref array< float > > m_ProbabilityMap
void BuildProbabilityData(int severity, float frequency)
int CalculateSeverity(float flow_modifier)
override void UpdateVisibility(bool state)
ref array< int > m_RunningIndicators
void GameplayEffectsDataBleeding(array< ref Widget > input, int type, int user_override=-1)
void BuildPositioningData()
override bool HasDefinedHandle()
int m_LastPositionFrameUsed
void StopBleedingIndicator(int source_ID, bool instant=false)
void UpdateBleedingIndicators(float timeSlice)
void RegisterBleedingIndicatorInstance(int bit, float flow_modifier)
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 native vector Vector(float x, float y, float z)
Vector constructor from components.