Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_DamageSufferingSystem.c
Go to the documentation of this file.
2{
4 protected SCR_ExtendedDamageManagerComponent m_LocallyControlledCharactersDmgMgr;
6
7 private static const ref map<typename, ref SCR_PersistentDamageEffect> MAP_OF_VIRTUAL_INSTANCES = new map<typename, ref SCR_PersistentDamageEffect>();
8
9 //------------------------------------------------------------------------------------------------
10 override bool ShouldBePaused()
11 {
12 return true;
13 }
14
15 //------------------------------------------------------------------------------------------------
16 override static void InitInfo(WorldSystemInfo outInfo)
17 {
18 outInfo.SetAbstract(false);
19 outInfo.SetLocation(WorldSystemLocation.Both);
20 outInfo.AddPoint(WorldSystemPoint.Frame);
21 }
22
23 //------------------------------------------------------------------------------------------------
25 static SCR_DamageSufferingSystem GetInstance()
26 {
27 const World world = GetGame().GetWorld();
28 return SCR_DamageSufferingSystem.Cast(world.FindSystem(SCR_DamageSufferingSystem));
29 }
30
31 //------------------------------------------------------------------------------------------------
35 static SCR_PersistentDamageEffect GetVirtualInstanceOfDamageEffect(typename t)
36 {
37 SCR_PersistentDamageEffect dmgEffect = MAP_OF_VIRTUAL_INSTANCES.Get(t);
38 if (dmgEffect)
39 return dmgEffect;
40
41 dmgEffect = SCR_PersistentDamageEffect.Cast(t.Spawn());
42 if (dmgEffect)
43 MAP_OF_VIRTUAL_INSTANCES.Insert(t, dmgEffect);
44 else
45 Debug.Error("SCR_DamageSufferingSystem.GetVirtualInstanceOfDamageEffect: Failed to create an instance of " + t.ToString() + "! Ensure that it inherits from SCR_PersistentDamageEffect.");
46
47 return dmgEffect;
48 }
49
50 //------------------------------------------------------------------------------------------------
55 SCR_BatchedDamageEffects GetBatchedDataOfType(notnull SCR_ExtendedDamageManagerComponent dmgMgr, typename t)
56 {
58 return null;
59
60 SCR_ManagedDamageEffectsContainer container = m_mManagedDamageEffects.Get(dmgMgr);
61 if (!container)
62 return null;
63
64 return container.GetBatchedDataOfType(t);
65 }
66
67 //------------------------------------------------------------------------------------------------
71 SCR_BatchedDamageEffects GetBatchedDataForLocalCharacter(typename t)
72 {
74 return null;
75
76 return m_LocallyControlledCharacterData.GetBatchedDataOfType(t);
77 }
78
79 //------------------------------------------------------------------------------------------------
83 void RegisterEffect(notnull SCR_ExtendedDamageManagerComponent dmgMgr, notnull SCR_PersistentDamageEffect dmgEffect)
84 {
86 m_mManagedDamageEffects = new map<SCR_ExtendedDamageManagerComponent, ref SCR_ManagedDamageEffectsContainer>();
87
88 SCR_ManagedDamageEffectsContainer container = m_mManagedDamageEffects.Get(dmgMgr);
89 if (!container)
90 {
91 container = new SCR_ManagedDamageEffectsContainer();
92 container.AddEffect(dmgEffect);
93 m_mManagedDamageEffects.Set(dmgMgr, container);
94 if (!IsEnabled())
95 Enable(true);
96
99
100 return;
101 }
102
103 if (container.AddEffect(dmgEffect))
104 Enable(true);
105 }
106
107 //------------------------------------------------------------------------------------------------
111 void UnregisterEffect(notnull SCR_ExtendedDamageManagerComponent dmgMgr, notnull SCR_PersistentDamageEffect dmgEffect)
112 {
114 return;
115
116 SCR_ManagedDamageEffectsContainer container = m_mManagedDamageEffects.Get(dmgMgr);
117 if (!container)
118 return;
119
120 if (container.RemoveEffect(dmgEffect) == 0)
121 m_mManagedDamageEffects.Set(dmgMgr, null); // make it garbage so it can be cleared next time we are going to be processing this
122 }
123
124 //------------------------------------------------------------------------------------------------
125 override protected void OnUpdatePoint(WorldUpdatePointArgs args)
126 {
128 {
129 Enable(false);
130 return;
131 }
132
133 const bool isAuthority = GetNode().GetRole() == RplRole.Authority;
134 const array<SCR_ExtendedDamageManagerComponent> garbageData = {};
135 const float avgTimeSlice = System.GetFrameTimeS();
137
138 foreach (SCR_ExtendedDamageManagerComponent dmgMgr, SCR_ManagedDamageEffectsContainer container : m_mManagedDamageEffects)
139 {
140 if (!dmgMgr || !container || !container.BatchData(newBatchedData, avgTimeSlice, dmgMgr))
141 {
142 garbageData.Insert(dmgMgr);
143 continue;
144 }
145
146 container.UpdateBachedData(newBatchedData);
147 container.ProcessBatchedData(dmgMgr, isAuthority);
148 }
149
150 foreach (SCR_ExtendedDamageManagerComponent garbageKey : garbageData)
151 {
152 m_mManagedDamageEffects.Remove(garbageKey);
153 }
154 }
155
156 //------------------------------------------------------------------------------------------------
161 void StartObservingControlledEntityChanges(notnull SCR_PlayerController controller, bool changing, bool becameOwner)
162 {
163 if (changing)
164 {
165 controller.m_OnControlledEntityChanged.Remove(OnControlledEntityChanged);
166 }
167 else if (becameOwner)
168 {
169 controller.m_OnControlledEntityChanged.Insert(OnControlledEntityChanged);
170 OnControlledEntityChanged(null, controller.GetLocalControlledEntity());
171 }
172 }
173
174 //------------------------------------------------------------------------------------------------
179 {
180 if (!to)
181 {
183 return;
184 }
185
186 ChimeraCharacter character = ChimeraCharacter.Cast(to);
187 if (!character)
188 {
189 m_LocallyControlledCharactersDmgMgr = SCR_ExtendedDamageManagerComponent.Cast(SCR_DamageManagerComponent.GetDamageManager(to));
191 {
193 return;
194 }
195 }
196 else
197 {
198 m_LocallyControlledCharactersDmgMgr = SCR_ExtendedDamageManagerComponent.Cast(character.GetDamageManager());
199 }
200
203 else
205 }
206}
ArmaReforgerScripted GetGame()
Definition game.c:1398
SCR_ExtendedDamageManagerComponent m_LocallyControlledCharactersDmgMgr
ref map< SCR_ExtendedDamageManagerComponent, ref SCR_ManagedDamageEffectsContainer > m_mManagedDamageEffects
void OnControlledEntityChanged(IEntity from, IEntity to)
SCR_ManagedDamageEffectsContainer m_LocallyControlledCharacterData
void StartObservingControlledEntityChanges(notnull SCR_PlayerController controller, bool changing, bool becameOwner)
void OnUpdatePoint(WorldUpdatePointArgs args)
void ProcessBatchedData(notnull SCR_ExtendedDamageManagerComponent dmgMgr, bool isAuthority)
int RemoveEffect(notnull SCR_PersistentDamageEffect dmgEffect)
bool AddEffect(notnull SCR_PersistentDamageEffect dmgEffect)
SCR_BatchedDamageEffects GetBatchedDataOfType(typename t)
void UpdateBachedData(map< typename, ref SCR_BatchedDamageEffects > newBatchedData)
bool BatchData(notnull inout map< typename, ref SCR_BatchedDamageEffects > newBatchedData, const float avgTimeSlice, SCR_ExtendedDamageManagerComponent dmgMgr)
Structure holding world system meta-information required by the engine.
Structure holding extra data of WorldSystem update point.
Definition Types.c:486
BaseRplComponentClass GenericComponentClass GetNode()
int IsEnabled()
Returns true if the light is enabled.
RplRole
Role of replicated node (and all items in it) within the replication system.
Definition RplRole.c:14
void Debug()
Definition Types.c:327
WorldSystemPoint
WorldSystemLocation