Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_HitZone.c
Go to the documentation of this file.
2{
3 [Attribute(desc: "Rules for passing damage to parent, root and own default hitzone")]
4 protected ref array<ref SCR_BaseDamagePassRule> m_aDamagePassRules;
5
7 protected ref ScriptInvoker m_OnDamageStateChanged; // TODO: make it a ScriptInvoker w/ ScriptedHitZone
8
9 //------------------------------------------------------------------------------------------------
13 {
14 return EHitZoneGroup.VIRTUAL;
15 }
16
17 //------------------------------------------------------------------------------------------------
22 {
23 if (!m_OnHealthChanged && createNew)
25
26 return m_OnHealthChanged;
27 }
28
29 //------------------------------------------------------------------------------------------------
33 {
34 if (!m_OnDamageStateChanged && createNew)
36
38 }
39
40 //------------------------------------------------------------------------------------------------
43 {
44 HitZoneContainerComponent container = GetHitZoneContainer();
45 if (container)
46 return container.GetOwner();
47
48 return null;
49 }
50
51 //------------------------------------------------------------------------------------------------
52 override protected void OnHealthSet()
53 {
55 m_OnHealthChanged.Invoke();
56 }
57
58 //------------------------------------------------------------------------------------------------
60 override protected void OnDamageStateChanged(EDamageState newState, EDamageState previousDamageState, bool isJIP)
61 {
63 m_OnDamageStateChanged.Invoke(this);
64 }
65
66 //------------------------------------------------------------------------------------------------
67 override float ComputeEffectiveDamage(notnull BaseDamageContext damageContext, bool isDOT)
68 {
69 if (damageContext.damageValue == 0)
70 return 0;
71
72 if (damageContext.damageType == EDamageType.TRUE || damageContext.damageType == EDamageType.PROCESSED_FRAGMENTATION)
73 return damageContext.damageValue;
74
75 //apply base multiplier
76 float effectiveDamage = damageContext.damageValue * GetBaseDamageMultiplier();
77
78 //apply damage multiplier for this specific damage type
79 effectiveDamage *= GetDamageMultiplier(damageContext.damageType);
80
81 //DOT doesn't get affected by damage reduction/thresholds, and neither does healing.
82 if (isDOT || effectiveDamage < 0)
83 return effectiveDamage;
84
85 //apply flat damage reduction
86 effectiveDamage -= GetDamageReduction();
87
88 //if its less than the damage threshold we discard the damage.
89 //if the damage to take becomes negative (healing) because of the flat damage reduction, this should reset it back to 0 dmg to take.
90 if (effectiveDamage < GetDamageThreshold())
91 effectiveDamage = 0;
92
93 return effectiveDamage;
94 }
95
96#ifdef WORKBENCH
97 //------------------------------------------------------------------------------------------------
98 void DrawDebug();
99#endif
100
101 //------------------------------------------------------------------------------------------------
106 */
107 void ApplyDamagePassRules(notnull BaseDamageContext damageContext)
108 {
109 if (m_aDamagePassRules.IsEmpty())
110 return;
111
112 const SCR_DamageManagerComponent damageManager = SCR_DamageManagerComponent.Cast(GetHitZoneContainer());
114 {
115 rule.HandlePassedDamage(damageContext, this, damageManager);
116 }
117 }
118}
EHitZoneGroup
float GetDamageThreshold()
float GetDamageReduction()
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
ScriptInvokerBase< ScriptInvokerVoidMethod > ScriptInvokerVoid
override float ComputeEffectiveDamage(notnull BaseDamageContext damageContext, bool isDOT)
Definition SCR_HitZone.c:67
ScriptInvokerVoid GetOnHealthChanged(bool createNew=true)
Definition SCR_HitZone.c:21
ref array< ref SCR_BaseDamagePassRule > m_aDamagePassRules
Definition SCR_HitZone.c:4
ScriptInvoker GetOnDamageStateChanged(bool createNew=true)
Definition SCR_HitZone.c:32
ref ScriptInvokerVoid m_OnHealthChanged
Definition SCR_HitZone.c:6
ref ScriptInvoker m_OnDamageStateChanged
Definition SCR_HitZone.c:7
void ApplyDamagePassRules(notnull BaseDamageContext damageContext)
EHitZoneGroup GetHitZoneGroup()
Definition SCR_HitZone.c:12
void OnDamageStateChanged(EDamageState newState, EDamageState previousDamageState, bool isJIP)
Called when the damage state changes.
Definition SCR_HitZone.c:60
IEntity GetOwner()
Definition SCR_HitZone.c:42
void OnHealthSet()
Definition SCR_HitZone.c:52
SCR_FieldOfViewSettings Attribute
EDamageType
Definition EDamageType.c:13
EDamageState
ScriptInvokerBase< func > ScriptInvoker
Definition tools.c:134