Arma Reforger Explorer
1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Toggle main menu visibility
Loading...
Searching...
No Matches
SCR_DamageSufferingSystem.c
Go to the documentation of this file.
1
class
SCR_DamageSufferingSystem
:
GameSystem
2
{
3
protected
ref
map<SCR_ExtendedDamageManagerComponent, ref SCR_ManagedDamageEffectsContainer>
m_mManagedDamageEffects
;
4
protected
SCR_ExtendedDamageManagerComponent
m_LocallyControlledCharactersDmgMgr
;
5
protected
SCR_ManagedDamageEffectsContainer
m_LocallyControlledCharacterData
;
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
{
57
if
(!
m_mManagedDamageEffects
)
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
{
73
if
(!
m_LocallyControlledCharacterData
)
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
{
85
if
(!
m_mManagedDamageEffects
)
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
97
if
(
m_LocallyControlledCharactersDmgMgr
== dmgMgr)
98
m_LocallyControlledCharacterData
= container;
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
{
113
if
(!
m_mManagedDamageEffects
||
m_mManagedDamageEffects
.IsEmpty())
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
{
127
if
(!
m_mManagedDamageEffects
||
m_mManagedDamageEffects
.IsEmpty())
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();
136
map<typename, ref SCR_BatchedDamageEffects>
newBatchedData =
new
map<typename, ref SCR_BatchedDamageEffects>
();
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
//------------------------------------------------------------------------------------------------
178
protected
void
OnControlledEntityChanged
(
IEntity
from,
IEntity
to)
179
{
180
if
(!to)
181
{
182
m_LocallyControlledCharacterData
= null;
183
return
;
184
}
185
186
ChimeraCharacter
character =
ChimeraCharacter
.Cast(to);
187
if
(!character)
188
{
189
m_LocallyControlledCharactersDmgMgr
= SCR_ExtendedDamageManagerComponent.Cast(SCR_DamageManagerComponent.GetDamageManager(to));
190
if
(!
m_LocallyControlledCharactersDmgMgr
)
191
{
192
m_LocallyControlledCharacterData
= null;
193
return
;
194
}
195
}
196
else
197
{
198
m_LocallyControlledCharactersDmgMgr
= SCR_ExtendedDamageManagerComponent.Cast(character.GetDamageManager());
199
}
200
201
if
(
m_mManagedDamageEffects
)
202
m_LocallyControlledCharacterData
=
m_mManagedDamageEffects
.Get(
m_LocallyControlledCharactersDmgMgr
);
203
else
204
m_LocallyControlledCharacterData
= null;
205
}
206
}
GetGame
ArmaReforgerScripted GetGame()
Definition
game.c:1398
ChimeraCharacter
Definition
ChimeraCharacter.c:13
GameSystem
Definition
GameSystem.c:16
IEntity
Definition
IEntity.c:13
SCR_DamageSufferingSystem
Definition
SCR_DamageSufferingSystem.c:2
SCR_DamageSufferingSystem::m_LocallyControlledCharactersDmgMgr
SCR_ExtendedDamageManagerComponent m_LocallyControlledCharactersDmgMgr
Definition
SCR_DamageSufferingSystem.c:4
SCR_DamageSufferingSystem::m_mManagedDamageEffects
ref map< SCR_ExtendedDamageManagerComponent, ref SCR_ManagedDamageEffectsContainer > m_mManagedDamageEffects
Definition
SCR_DamageSufferingSystem.c:3
SCR_DamageSufferingSystem::OnControlledEntityChanged
void OnControlledEntityChanged(IEntity from, IEntity to)
Definition
SCR_DamageSufferingSystem.c:178
SCR_DamageSufferingSystem::m_LocallyControlledCharacterData
SCR_ManagedDamageEffectsContainer m_LocallyControlledCharacterData
Definition
SCR_DamageSufferingSystem.c:5
SCR_DamageSufferingSystem::StartObservingControlledEntityChanges
void StartObservingControlledEntityChanges(notnull SCR_PlayerController controller, bool changing, bool becameOwner)
Definition
SCR_DamageSufferingSystem.c:161
SCR_DamageSufferingSystem::OnUpdatePoint
void OnUpdatePoint(WorldUpdatePointArgs args)
Definition
SCR_DamageSufferingSystem.c:125
SCR_ManagedDamageEffectsContainer
Definition
SCR_ManagedDamageEffectsContainer.c:2
SCR_ManagedDamageEffectsContainer::ProcessBatchedData
void ProcessBatchedData(notnull SCR_ExtendedDamageManagerComponent dmgMgr, bool isAuthority)
Definition
SCR_ManagedDamageEffectsContainer.c:157
SCR_ManagedDamageEffectsContainer::RemoveEffect
int RemoveEffect(notnull SCR_PersistentDamageEffect dmgEffect)
Definition
SCR_ManagedDamageEffectsContainer.c:22
SCR_ManagedDamageEffectsContainer::AddEffect
bool AddEffect(notnull SCR_PersistentDamageEffect dmgEffect)
Definition
SCR_ManagedDamageEffectsContainer.c:10
SCR_ManagedDamageEffectsContainer::GetBatchedDataOfType
SCR_BatchedDamageEffects GetBatchedDataOfType(typename t)
Definition
SCR_ManagedDamageEffectsContainer.c:34
SCR_ManagedDamageEffectsContainer::UpdateBachedData
void UpdateBachedData(map< typename, ref SCR_BatchedDamageEffects > newBatchedData)
Definition
SCR_ManagedDamageEffectsContainer.c:102
SCR_ManagedDamageEffectsContainer::BatchData
bool BatchData(notnull inout map< typename, ref SCR_BatchedDamageEffects > newBatchedData, const float avgTimeSlice, SCR_ExtendedDamageManagerComponent dmgMgr)
Definition
SCR_ManagedDamageEffectsContainer.c:47
SCR_PlayerController
Definition
SCR_PlayerController.c:31
System
Definition
System.c:13
WorldSystemInfo
Structure holding world system meta-information required by the engine.
Definition
WorldSystemInfo.c:14
WorldUpdatePointArgs
Structure holding extra data of WorldSystem update point.
Definition
WorldUpdatePointArgs.c:14
map
Definition
Types.c:486
GetNode
BaseRplComponentClass GenericComponentClass GetNode()
IsEnabled
int IsEnabled()
Returns true if the light is enabled.
Definition
SCR_BaseManualCameraComponent.c:239
RplRole
RplRole
Role of replicated node (and all items in it) within the replication system.
Definition
RplRole.c:14
Debug
void Debug()
Definition
Types.c:327
WorldSystemPoint
WorldSystemPoint
Definition
WorldSystemPoint.c:13
WorldSystemLocation
WorldSystemLocation
Definition
WorldSystemLocation.c:13
scripts
Game
Systems
SCR_DamageSufferingSystem.c
Generated by
1.17.0