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!");
67 Param3<bool,int,float> par;
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;
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)
216 m_RegisteredInstances.Get(i).StopIndicator(
true);
223 if (!m_ProbabilityMap)
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();
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);
protected bool m_Initialized
static const int INDICATOR_SEVERITY_MEDIUM
static const int SEQUENCE_STEPS
static const float SEQUENCE_DROP_AVERAGE_MEDIUM
static const float SEQUENCE_DROP_AVERAGE_LOW
static const int INDICATOR_SEVERITY_HIGH
static const float SEQUENCE_DROP_AVERAGE_HIGH
static const int INDICATOR_SEVERITY_LOW
proto native Mission GetMission()
Super root of all classes in Enforce script.
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.
Manages all bleeding indicators and their updates.
void BuildProbabilityData(int severity, float frequency)
protected int m_LastPositionFrameUsed
override void Init(array< ref Widget > input, int type, Widget layout_root, int user_override=-1)
protected Widget m_BloodDropsFrame
protected bool m_Initialized
override bool HasDefinedHandle()
protected ref array< int > m_CleanupQueue
override bool DataInitialized()
void StopBleedingIndicator(int source_ID, bool instant=false)
void GameplayEffectsDataBleeding(array< ref Widget > input, int type, int user_override=-1)
void UpdateBleedingIndicators(float timeSlice)
void RegisterBleedingIndicatorInstance(int bit, float flow_modifier)
vector GenerateSequenceRandomPosition()
void CleanupBleedingIndicators()
protected ref array< int > m_RunningIndicators
void BuildPositioningData()
ImageWidget GetNextDropImage()
override void RegisterData(Param p)
protected int m_ImageWidgetCount
protected ref map< int, ref BleedingIndicator > m_RegisteredInstances
protected ref map< int, ref array< float > > m_ProbabilityMap
int CalculateSeverity(float flow_modifier)
protected int m_LastDropIdx
protected ref array< Widget > m_PositioningFramesArray
void SpawnBleedingIndicator(int source_ID, vector position)
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)
array< float > GetProbabilities(int severity)
GameplayEffectWidgets_base GetEffectWidgets()
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
static const float BLEEDING_SOURCE_FLOW_MODIFIER_LOW
static const float BLEEDING_SOURCE_FLOW_MODIFIER_HIGH
static const float BLEEDING_SOURCE_FLOW_MODIFIER_MEDIUM
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native CGame GetGame()
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 proto int RandomInt(int min, int max)
Returns a random int number between and min [inclusive] and max [exclusive].
static float RandomFloatInclusive(float min, float max)
Returns a random float number between and min [inclusive] and max [inclusive].
static float Poisson(float mean, int occurences)
occurences values above '12' will cause Factorial to overflow int.