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_BleedingScreenEffect.c
Go to the documentation of this file.
1
class
SCR_BleedingScreenEffect
:
SCR_BaseScreenEffect
2
{
3
// Play Animation of CreateEffectOverTime()
4
protected
const
int
BLEEDING_REPEAT_DELAY
= 2500;
5
6
protected
const
float
BLEEDINGEFFECT_OPACITY_FADEOUT_1_DURATION
= 0.2;
7
protected
const
float
BLEEDINGEFFECT_PROGRESSION_FADEOUT_1_DURATION
= 0.2;
8
9
protected
const
float
BLEEDINGEFFECT_OPACITY_FADEOUT_2_DURATION
= 0.3;
10
protected
const
float
BLEEDINGEFFECT_PROGRESSION_FADEOUT_2_DURATION
= 3;
11
12
protected
const
float
BLEEDINGEFFECT_OPACITY_FADEIN_1_DURATION
= 1;
13
protected
const
float
BLEEDINGEFFECT_PROGRESSION_FADEIN_1_DURATION
= 4.5;
14
15
// Play Animation of BlackoutEffect()
16
protected
const
float
BLACKOUT_OPACITY_MULTIPLIER
= 0.20;
17
18
//Saturation
19
private
static
float
s_fSaturation;
20
21
// Widgets
22
protected
ImageWidget
m_wBloodEffect1
;
23
protected
ImageWidget
m_wBloodEffect2
;
24
protected
ImageWidget
m_wBlackOut
;
25
private
bool
m_bEffectState;
26
27
// Character
28
protected
SCR_CharacterDamageManagerComponent
m_DamageManager
;
29
protected
SCR_CharacterBloodHitZone
m_BloodHZ
;
30
protected
ChimeraCharacter
m_CharacterEntity
;
31
32
protected
bool
m_bBleedingEffect
;
33
protected
bool
m_bIsBleeding
;
34
protected
bool
m_bPlayHeartBeat
;
35
36
37
//------------------------------------------------------------------------------------------------
38
override
void
DisplayStartDraw
(
IEntity
owner)
39
{
40
m_wBloodEffect1
=
ImageWidget
.Cast(
m_wRoot
.FindAnyWidget(
"BloodVignette1"
));
41
m_wBloodEffect2
=
ImageWidget
.Cast(
m_wRoot
.FindAnyWidget(
"BloodVignette2"
));
42
m_wBlackOut
=
ImageWidget
.Cast(
m_wRoot
.FindAnyWidget(
"BleedingBlackOut"
));
43
}
44
45
//------------------------------------------------------------------------------------------------
46
override
void
DisplayControlledEntityChanged
(
IEntity
from,
IEntity
to)
47
{
48
ClearEffects
();
49
50
m_CharacterEntity
=
ChimeraCharacter
.Cast(to);
51
if
(!
m_CharacterEntity
)
52
return
;
53
54
m_DamageManager
=
SCR_CharacterDamageManagerComponent
.Cast(
m_CharacterEntity
.GetDamageManager());
55
if
(!
m_DamageManager
)
56
return
;
57
58
// define hitzones for later getting
59
m_BloodHZ
=
m_DamageManager
.GetBloodHitZone();
60
61
// Invoker for momentary damage events and DOT damage events
62
m_DamageManager
.GetOnDamageEffectAdded().Insert(
OnDamageEffectAdded
);
63
m_DamageManager
.GetOnDamageEffectRemoved().Insert(
OnDamageEffectRemoved
);
64
65
// In case player started bleeding before invokers were established, check if already bleeding
66
array<ref SCR_PersistentDamageEffect> effects =
m_DamageManager
.GetAllPersistentEffectsOfType(
SCR_BleedingDamageEffect
);
67
if
(effects.IsEmpty())
68
return
;
69
70
// Pass the first bleeding to the function that is normally invoked when bleeding is added
71
OnDamageEffectAdded
(effects[0]);
72
}
73
74
//------------------------------------------------------------------------------------------------
75
protected
void
OnDamageEffectAdded
(notnull
SCR_DamageEffect
dmgEffect)
76
{
77
m_bIsBleeding
=
m_DamageManager
.IsBleeding();
78
if
(!
m_bBleedingEffect
&&
m_bIsBleeding
&&
m_DamageManager
.GetState() !=
EDamageState
.DESTROYED)
79
CreateEffectOverTime
(
true
);
80
81
m_bBleedingEffect
=
m_bIsBleeding
;
82
}
83
84
//------------------------------------------------------------------------------------------------
85
protected
void
OnDamageEffectRemoved
(notnull
SCR_DamageEffect
dmgEffect)
86
{
87
m_bIsBleeding
=
m_DamageManager
.IsBleeding();
88
if
(
m_bIsBleeding
)
89
return
;
90
91
ClearEffectOverTime
(
false
);
92
GetGame
().GetCallqueue().Remove(
CreateEffectOverTime
);
93
GetGame
().GetCallqueue().Remove(
ClearEffectOverTime
);
94
95
m_bBleedingEffect
=
false
;
96
SCR_LogitechLEDManager
.ActivateState(ELogitechLEDState.DEFAULT);
97
}
98
99
//------------------------------------------------------------------------------------------------
100
protected
override
void
DisplayOnSuspended
()
101
{
102
m_bPlayHeartBeat
=
false
;
103
}
104
105
//------------------------------------------------------------------------------------------------
106
protected
override
void
DisplayOnResumed
()
107
{
108
m_bPlayHeartBeat
=
true
;
109
}
110
111
//------------------------------------------------------------------------------------------------
112
protected
void
CreateEffectOverTime
(
bool
repeat)
113
{
114
if
(!
m_wBloodEffect1
|| !
m_wBloodEffect2
|| !
m_BloodHZ
)
115
return
;
116
117
float
effectStrength = 1;
118
const
float
REDUCEDSTRENGTH = 0.7;
119
bool
playHeartBeat =
m_bPlayHeartBeat
;
120
121
if
(
m_BloodHZ
.GetTotalBleedingAmount() < 5)
122
{
123
effectStrength *= REDUCEDSTRENGTH;
124
playHeartBeat =
false
;
125
}
126
127
m_wBloodEffect1
.SetSaturation(1);
128
m_wBloodEffect2
.SetSaturation(1);
129
130
UpdateEffectVisibility
(
m_wBloodEffect1
);
131
UpdateEffectVisibility
(
m_wBloodEffect2
);
132
133
if
(m_bEffectState)
134
{
135
AnimateEffectVisibility
(
m_wBloodEffect1
, effectStrength, effectStrength * 0.5,
BLEEDINGEFFECT_OPACITY_FADEIN_1_DURATION
,
BLEEDINGEFFECT_PROGRESSION_FADEIN_1_DURATION
);
136
AnimateEffectVisibility
(
m_wBloodEffect2
, 0, 0,
BLEEDINGEFFECT_OPACITY_FADEOUT_2_DURATION
,
BLEEDINGEFFECT_PROGRESSION_FADEOUT_2_DURATION
);
137
}
138
else
139
{
140
AnimateEffectVisibility
(
m_wBloodEffect1
, 0, 0,
BLEEDINGEFFECT_OPACITY_FADEOUT_2_DURATION
,
BLEEDINGEFFECT_PROGRESSION_FADEOUT_2_DURATION
);
141
AnimateEffectVisibility
(
m_wBloodEffect2
, effectStrength, effectStrength * 0.5,
BLEEDINGEFFECT_OPACITY_FADEIN_1_DURATION
,
BLEEDINGEFFECT_PROGRESSION_FADEIN_1_DURATION
);
142
}
143
144
BlackoutEffect
(effectStrength);
145
146
// Play heartbeat sound
147
if
(playHeartBeat &&
m_DamageManager
.GetDefaultHitZone().GetDamageState() !=
EDamageState
.DESTROYED)
148
{
149
SCR_UISoundEntity
.SetSignalValueStr(
"BloodLoss"
, 1 -
m_BloodHZ
.GetHealthScaled());
150
SCR_UISoundEntity
.SoundEvent(
SCR_SoundEvent
.SOUND_INJURED_PLAYERCHARACTER);
151
}
152
153
GetGame
().GetCallqueue().CallLater(
ClearEffectOverTime
, 1000,
false
, repeat, m_bEffectState);
154
SCR_LogitechLEDManager
.ActivateState(ELogitechLEDState.BLEEDING);
155
}
156
157
//------------------------------------------------------------------------------------------------
158
protected
void
ClearEffectOverTime
(
bool
repeat)
159
{
160
m_bEffectState = !m_bEffectState;
161
162
AnimateEffectVisibility
(
m_wBloodEffect1
, 0, 0,
BLEEDINGEFFECT_PROGRESSION_FADEOUT_1_DURATION
,
BLEEDINGEFFECT_OPACITY_FADEOUT_1_DURATION
);
163
AnimateEffectVisibility
(
m_wBloodEffect2
, 0, 0,
BLEEDINGEFFECT_PROGRESSION_FADEOUT_1_DURATION
,
BLEEDINGEFFECT_OPACITY_FADEOUT_1_DURATION
);
164
165
BlackoutEffect
(0);
166
167
if
(repeat &&
m_bBleedingEffect
)
168
GetGame
().GetCallqueue().CallLater(
CreateEffectOverTime
,
BLEEDING_REPEAT_DELAY
,
false
, repeat);
169
}
170
171
//------------------------------------------------------------------------------------------------
172
protected
void
BlackoutEffect
(
float
effectStrength)
173
{
174
if
(!
m_wBlackOut
)
175
return
;
176
177
if
(effectStrength > 0)
178
{
179
m_wBlackOut
.SetOpacity(1);
180
effectStrength *=
BLACKOUT_OPACITY_MULTIPLIER
;
181
AnimateWidget
.
AlphaMask
(
m_wBlackOut
, effectStrength,
BLEEDINGEFFECT_PROGRESSION_FADEIN_1_DURATION
);
182
}
183
else
184
{
185
AnimateWidget
.
AlphaMask
(
m_wBlackOut
, 0,
BLEEDINGEFFECT_OPACITY_FADEOUT_1_DURATION
);
186
}
187
188
UpdateEffectVisibility
(
m_wBlackOut
);
189
}
190
191
//------------------------------------------------------------------------------------------------
192
protected
override
void
ClearEffects
()
193
{
194
m_bBleedingEffect
=
false
;
195
196
if
(
m_wBloodEffect1
)
197
HideSingleEffect
(
m_wBloodEffect1
);
198
199
if
(
m_wBloodEffect2
)
200
HideSingleEffect
(
m_wBloodEffect2
);
201
202
if
(
m_wBlackOut
)
203
HideSingleEffect
(
m_wBlackOut
);
204
205
GetGame
().GetCallqueue().Remove(
CreateEffectOverTime
);
206
GetGame
().GetCallqueue().Remove(
ClearEffectOverTime
);
207
208
if
(!
m_DamageManager
)
209
return
;
210
211
m_DamageManager
.GetOnDamageEffectAdded().Remove(
OnDamageEffectAdded
);
212
m_DamageManager
.GetOnDamageEffectRemoved().Remove(
OnDamageEffectRemoved
);
213
}
214
}
GetGame
ArmaReforgerScripted GetGame()
Definition
game.c:1398
m_wRoot
Widget m_wRoot
Definition
SCR_GameModeCleanSweep.c:25
AnimateWidget
Definition
AnimateWidget.c:3
AnimateWidget::AlphaMask
static WidgetAnimationAlphaMask AlphaMask(Widget widget, float targetValue, float speed)
Definition
AnimateWidget.c:189
ChimeraCharacter
Definition
ChimeraCharacter.c:13
IEntity
Definition
IEntity.c:13
ImageWidget
Definition
ImageWidget.c:13
SCR_BaseScreenEffect
Definition
SCR_BaseScreenEffect.c:2
SCR_BaseScreenEffect::AnimateEffectVisibility
void AnimateEffectVisibility(notnull ImageWidget effectWidget, float opacity, float alpha, float opacitySpeed=1.0, float alphaSpeed=1.0, bool updateVisibility=true)
Definition
SCR_BaseScreenEffect.c:54
SCR_BaseScreenEffect::HideSingleEffect
void HideSingleEffect(notnull ImageWidget effectWidget)
Definition
SCR_BaseScreenEffect.c:69
SCR_BaseScreenEffect::UpdateEffectVisibility
void UpdateEffectVisibility(notnull ImageWidget effectWidget)
The widget will be made visible or hidden based on its opacity.
Definition
SCR_BaseScreenEffect.c:41
SCR_BleedingDamageEffect
Definition
SCR_BleedingDamageEffect.c:2
SCR_BleedingScreenEffect
Definition
SCR_BleedingScreenEffect.c:2
SCR_BleedingScreenEffect::BLEEDINGEFFECT_PROGRESSION_FADEOUT_2_DURATION
const float BLEEDINGEFFECT_PROGRESSION_FADEOUT_2_DURATION
Definition
SCR_BleedingScreenEffect.c:10
SCR_BleedingScreenEffect::OnDamageEffectAdded
void OnDamageEffectAdded(notnull SCR_DamageEffect dmgEffect)
Definition
SCR_BleedingScreenEffect.c:75
SCR_BleedingScreenEffect::DisplayOnResumed
override void DisplayOnResumed()
Definition
SCR_BleedingScreenEffect.c:106
SCR_BleedingScreenEffect::m_bPlayHeartBeat
bool m_bPlayHeartBeat
Definition
SCR_BleedingScreenEffect.c:34
SCR_BleedingScreenEffect::m_bIsBleeding
bool m_bIsBleeding
Definition
SCR_BleedingScreenEffect.c:33
SCR_BleedingScreenEffect::BLEEDINGEFFECT_PROGRESSION_FADEOUT_1_DURATION
const float BLEEDINGEFFECT_PROGRESSION_FADEOUT_1_DURATION
Definition
SCR_BleedingScreenEffect.c:7
SCR_BleedingScreenEffect::BLEEDINGEFFECT_PROGRESSION_FADEIN_1_DURATION
const float BLEEDINGEFFECT_PROGRESSION_FADEIN_1_DURATION
Definition
SCR_BleedingScreenEffect.c:13
SCR_BleedingScreenEffect::DisplayStartDraw
override void DisplayStartDraw(IEntity owner)
Definition
SCR_BleedingScreenEffect.c:38
SCR_BleedingScreenEffect::BlackoutEffect
void BlackoutEffect(float effectStrength)
Definition
SCR_BleedingScreenEffect.c:172
SCR_BleedingScreenEffect::BLEEDINGEFFECT_OPACITY_FADEOUT_1_DURATION
const float BLEEDINGEFFECT_OPACITY_FADEOUT_1_DURATION
Definition
SCR_BleedingScreenEffect.c:6
SCR_BleedingScreenEffect::BLACKOUT_OPACITY_MULTIPLIER
const float BLACKOUT_OPACITY_MULTIPLIER
Definition
SCR_BleedingScreenEffect.c:16
SCR_BleedingScreenEffect::BLEEDINGEFFECT_OPACITY_FADEIN_1_DURATION
const float BLEEDINGEFFECT_OPACITY_FADEIN_1_DURATION
Definition
SCR_BleedingScreenEffect.c:12
SCR_BleedingScreenEffect::m_DamageManager
SCR_CharacterDamageManagerComponent m_DamageManager
Definition
SCR_BleedingScreenEffect.c:28
SCR_BleedingScreenEffect::m_wBlackOut
ImageWidget m_wBlackOut
Definition
SCR_BleedingScreenEffect.c:24
SCR_BleedingScreenEffect::BLEEDING_REPEAT_DELAY
const int BLEEDING_REPEAT_DELAY
Definition
SCR_BleedingScreenEffect.c:4
SCR_BleedingScreenEffect::m_BloodHZ
SCR_CharacterBloodHitZone m_BloodHZ
Definition
SCR_BleedingScreenEffect.c:29
SCR_BleedingScreenEffect::BLEEDINGEFFECT_OPACITY_FADEOUT_2_DURATION
const float BLEEDINGEFFECT_OPACITY_FADEOUT_2_DURATION
Definition
SCR_BleedingScreenEffect.c:9
SCR_BleedingScreenEffect::ClearEffectOverTime
void ClearEffectOverTime(bool repeat)
Definition
SCR_BleedingScreenEffect.c:158
SCR_BleedingScreenEffect::m_wBloodEffect2
ImageWidget m_wBloodEffect2
Definition
SCR_BleedingScreenEffect.c:23
SCR_BleedingScreenEffect::DisplayControlledEntityChanged
override void DisplayControlledEntityChanged(IEntity from, IEntity to)
Definition
SCR_BleedingScreenEffect.c:46
SCR_BleedingScreenEffect::m_bBleedingEffect
bool m_bBleedingEffect
Definition
SCR_BleedingScreenEffect.c:32
SCR_BleedingScreenEffect::DisplayOnSuspended
override void DisplayOnSuspended()
Definition
SCR_BleedingScreenEffect.c:100
SCR_BleedingScreenEffect::CreateEffectOverTime
void CreateEffectOverTime(bool repeat)
Definition
SCR_BleedingScreenEffect.c:112
SCR_BleedingScreenEffect::OnDamageEffectRemoved
void OnDamageEffectRemoved(notnull SCR_DamageEffect dmgEffect)
Definition
SCR_BleedingScreenEffect.c:85
SCR_BleedingScreenEffect::m_wBloodEffect1
ImageWidget m_wBloodEffect1
Definition
SCR_BleedingScreenEffect.c:22
SCR_BleedingScreenEffect::ClearEffects
override void ClearEffects()
Definition
SCR_BleedingScreenEffect.c:192
SCR_BleedingScreenEffect::m_CharacterEntity
ChimeraCharacter m_CharacterEntity
Definition
SCR_BleedingScreenEffect.c:30
SCR_CharacterBloodHitZone
Blood - does not receive damage directly, only via scripted events.
Definition
SCR_CharacterHitZone.c:430
SCR_CharacterDamageManagerComponent
Definition
SCR_CharacterDamageManagerComponent.c:19
SCR_DamageEffect
Definition
SCR_DamageEffect.c:7
SCR_LogitechLEDManager
Definition
SCR_LogitechLedManager.c:2
SCR_SoundEvent
Definition
SCR_SoundEvent.c:2
SCR_UISoundEntity
Definition
SCR_UISoundEntity.c:8
EDamageState
EDamageState
Definition
EDamageState.c:13
scripts
Game
UI
ScreenEffects
SCR_BleedingScreenEffect.c
Generated by
1.17.0