Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_HitZoneStateSignal.c
Go to the documentation of this file.
2{
3 ref array<ref SCR_HitZone> m_aScriptedHitZones = {};
4 int m_iSignalIdx;
5
6 //------------------------------------------------------------------------------------------------
7 bool RegisterSignal(SCR_DamageManagerComponent hitZoneContainerComponent, SCR_HitZoneStateSignalData hitZoneStateSignalData, SignalsManagerComponent signalsManagerComponent)
8 {
9 array<string> hitZoneNames = hitZoneStateSignalData.m_aHitZoneNames;
10 if (!hitZoneNames || hitZoneNames.Count() == 0)
11 {
12 Print("AUDIO: SCR_HitZoneStateSignal: Missing HitZoneNames", LogLevel.WARNING);
13 return false;
14 }
15
16 foreach (string hitZoneName : hitZoneNames)
17 {
18 HitZone hitZone = hitZoneContainerComponent.GetHitZoneByName(hitZoneName);
19 SCR_HitZone hitzone = SCR_HitZone.Cast(hitZone);
20 if (!hitzone)
21 continue;
22
24 m_aScriptedHitZones.Insert(hitzone);
25 }
26
27 // No hitzones are spawned in the edit mode so only check the playmode
28 if (!SCR_Global.IsEditMode() && m_aScriptedHitZones.Count() == 0)
29 {
30 Print("AUDIO: SCR_HitZoneStateSignal: No HitZone found", LogLevel.WARNING);
31 return false;
32 }
33
34 string signalName = hitZoneStateSignalData.m_sSignalName;
35 if (signalName.IsEmpty())
36 {
37 Print("AUDIO: SCR_HitZoneStateSignal: Missing signal name", LogLevel.WARNING);
38 return false;
39 }
40
41 m_iSignalIdx = signalsManagerComponent.AddOrFindSignal(signalName);
42
43 return true;
44 }
45
46 //------------------------------------------------------------------------------------------------
47 void UnregisterSignal()
48 {
49 foreach(SCR_HitZone hitzone : m_aScriptedHitZones)
50 {
51 hitzone.GetOnDamageStateChanged().Remove(OnStateChanged);
52 }
53 }
54
55 //------------------------------------------------------------------------------------------------
56 protected void OnStateChanged()
57 {
58 int max;
59
60 foreach(SCR_HitZone hitzone : m_aScriptedHitZones)
61 {
62 int state = DamageStateToSignalValue(hitzone.GetDamageState());
63 if (state > max)
64 max = state;
65 }
66
67 IEntity owner = m_aScriptedHitZones[0].GetOwner();
68 if (!owner)
69 return;
70
72 if (!signalsManager)
73 return;
74
75 signalsManager.SetSignalValue(m_iSignalIdx, max);
76 }
77
78 //------------------------------------------------------------------------------------------------
79 static int DamageStateToSignalValue(EDamageState damageState)
80 {
81 switch(damageState)
82 {
83 case EDamageState.UNDAMAGED: {return 0;};
84 case EDamageState.INTERMEDIARY: {return 1;};
85 case EDamageState.STATE1: {return 2;};
86 case EDamageState.STATE2: {return 3;};
87 case EDamageState.STATE3: {return 4;};
88 case EDamageState.DESTROYED: {return 5;};
89 }
90
91 return 0;
92 }
93}
proto external Managed FindComponent(typename typeName)
proto external IEntity GetRootParent()
static bool IsEditMode()
Definition Functions.c:1566
ScriptInvoker GetOnDamageStateChanged(bool createNew=true)
Definition SCR_HitZone.c:32
static int DamageStateToSignalValue(EDamageState damageState)
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
Definition LogLevel.c:14
EDamageState