Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_ExtendedDamageManagerComponent.c
Go to the documentation of this file.
6
10
11class SCR_ExtendedDamageManagerComponent : ExtendedDamageManagerComponent
12{
13 /*
14 IMPORTANT: ===========================================================================================
15 The following API will not be useful for damageManagers inheriting from ExtendedDamageManagerComponent
16 //void OnDamageOverTimeAdded(EDamageType dType, float dps, HitZone hz);
17 //void OnDamageOverTimeRemoved(EDamageType dType, HitZone hz);
18 //bool IsDamagedOverTime(EDamageType dType)
19 //float GetDamageOverTime(EDamageType dType);
20 //void RemoveDamageOverTime(EDamageType dType);
21
22 DamageEffects logic replaces the conventional damageOverTime, and has it's own API.
23 - Instead of OnDamageOverTimeAdded() use OnDamageEffectAdded()
24 - Instead of OnDamageOverTimeRemoved() use OnDamageEffectRemoved()
25 - Instead of IsDamagedOverTime() use
26 - SCR_CharacterDamageManagerComponent.IsBleeding()
27 - GetPersistentEffects()
28 - GetAllPersistentEffectsOnHitZone()
29 - GetAllPersistentEffectsOfType()
30 - Instead of GetDamageOverTime() use
31 - SCR_RegeneratingHitZone.GetHitZoneDamageOverTime()
32 - SCR_CharacterBloodHitZone.GetTotalBleedingAmount()
33 */
34
35 //------------------------------------------------------------------------------------------------
37 {
39 }
40
41 //------------------------------------------------------------------------------------------------
46
47 //-----------------------------------------------------------------------------------------------------------
48 override void OnDamageEffectAdded(notnull SCR_DamageEffect dmgEffect)
49 {
50 super.OnDamageEffectAdded(dmgEffect);
51
52 if (s_aDamageManagerData.IsIndexValid(m_iDamageManagerDataIndex))
53 {
54 ScriptInvoker invoker = s_aDamageManagerData.Get(m_iDamageManagerDataIndex).GetOnDamageEffectAdded(false);
55 if (invoker)
56 invoker.Invoke(dmgEffect);
57 }
58 }
59
60 //-----------------------------------------------------------------------------------------------------------
61 override void OnDamageEffectRemoved(notnull SCR_DamageEffect dmgEffect)
62 {
63 super.OnDamageEffectAdded(dmgEffect);
64
65 if (s_aDamageManagerData.IsIndexValid(m_iDamageManagerDataIndex))
66 {
67 ScriptInvoker invoker = s_aDamageManagerData.Get(m_iDamageManagerDataIndex).GetOnDamageEffectRemoved(false);
68 if (invoker)
69 invoker.Invoke(dmgEffect);
70 }
71 }
72
73 //------------------------------------------------------------------------------------------------
74 array<ref PersistentDamageEffect> FilterEffectsByHitZone(array<ref PersistentDamageEffect> damageEffects, notnull HitZone hitZone)
75 {
76 array<ref PersistentDamageEffect> filteredDamageEffects = {};
77
78 if (damageEffects.IsEmpty())
79 return filteredDamageEffects;
80
81 foreach (ref PersistentDamageEffect effect : damageEffects)
82 {
83 if (effect.GetAffectedHitZone() == hitZone)
84 filteredDamageEffects.Insert(effect);
85 }
86
87 return filteredDamageEffects;
88 }
89
90 //------------------------------------------------------------------------------------------------
91 array<ref SCR_PersistentDamageEffect> GetAllPersistentEffectsOfType(typename effectTypeName, bool includeInheritedTypes = false)
92 {
93 array<ref SCR_PersistentDamageEffect> damageEffects = {};
94
95 if (!includeInheritedTypes)
96 {
97 FindAllDamageEffectsOfType(effectTypeName, damageEffects);
98 return damageEffects;
99 }
100
101 GetPersistentEffects(damageEffects);
102
103 if (damageEffects.IsEmpty())
104 return damageEffects;
105
106 array<ref SCR_PersistentDamageEffect> allEffectsOfType = {};
107
108 foreach (ref SCR_PersistentDamageEffect effect : damageEffects)
109 {
110 if (effect.Type() == effectTypeName)
111 allEffectsOfType.Insert(effect);
112 else if (includeInheritedTypes && effect.IsInherited(effectTypeName))
113 allEffectsOfType.Insert(effect);
114 }
115
116 return allEffectsOfType;
117 }
118
119 //------------------------------------------------------------------------------------------------
120 array<ref SCR_PersistentDamageEffect> FilterEffectsByType(array<ref SCR_PersistentDamageEffect> damageEffects, typename effectTypename)
121 {
122 array<ref SCR_PersistentDamageEffect> filteredDamageEffects = {};
123
124 if (damageEffects.IsEmpty())
125 return filteredDamageEffects;
126
127 foreach (ref SCR_PersistentDamageEffect effect : damageEffects)
128 {
129 if (effect.ClassName() == effectTypename.ToString())
130 filteredDamageEffects.Insert(effect);
131 }
132
133 return filteredDamageEffects;
134 }
135}
notnull SCR_DamageManagerData GetScriptedDamageManagerData()
int m_iDamageManagerDataIndex
ScriptInvoker GetOnDamageEffectRemoved(bool createNew=true)
ScriptInvoker GetOnDamageEffectAdded(bool createNew=true)
override void OnDamageEffectRemoved(notnull SCR_DamageEffect dmgEffect)
array< ref SCR_PersistentDamageEffect > GetAllPersistentEffectsOfType(typename effectTypeName, bool includeInheritedTypes=false)
ScriptInvoker GetOnDamageEffectRemoved()
array< ref PersistentDamageEffect > FilterEffectsByHitZone(array< ref PersistentDamageEffect > damageEffects, notnull HitZone hitZone)
override void OnDamageEffectAdded(notnull SCR_DamageEffect dmgEffect)
SCR_ExtendedDamageManagerComponentClass ExtendedDamageManagerComponentClass GetOnDamageEffectAdded()
array< ref SCR_PersistentDamageEffect > FilterEffectsByType(array< ref SCR_PersistentDamageEffect > damageEffects, typename effectTypename)
ScriptInvokerBase< func > ScriptInvoker
Definition tools.c:134