Skip to content

Commit 913894a

Browse files
authored
Changed Damage Overlay to check Burn Damage (space-wizards#34535)
* updated BruteLevel to be PainLevel with burn damage checks in DamageOverlayUiController.cs * dehardcoded pain level by adding damage groups to paindamagegroups to affect * re-added the name for painDamageGroups * fixed overlay default and added minimum limit to component check first * renamed to PainDamageGroups and removed obsolete tag
1 parent f42c1bc commit 913894a

File tree

3 files changed

+33
-22
lines changed

3 files changed

+33
-22
lines changed

Content.Client/UserInterface/Systems/DamageOverlays/DamageOverlayUiController.cs

+18-14
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ private void ClearOverlay()
6767
{
6868
_overlay.DeadLevel = 0f;
6969
_overlay.CritLevel = 0f;
70-
_overlay.BruteLevel = 0f;
70+
_overlay.PainLevel = 0f;
7171
_overlay.OxygenLevel = 0f;
7272
}
7373

@@ -95,25 +95,29 @@ private void UpdateOverlays(EntityUid entity, MobStateComponent? mobState, Damag
9595
{
9696
case MobState.Alive:
9797
{
98-
if (EntityManager.HasComponent<PainNumbnessComponent>(entity))
99-
{
100-
_overlay.BruteLevel = 0;
101-
}
102-
else if (damageable.DamagePerGroup.TryGetValue("Brute", out var bruteDamage))
98+
FixedPoint2 painLevel = 0;
99+
_overlay.PainLevel = 0;
100+
101+
if (!EntityManager.HasComponent<PainNumbnessComponent>(entity))
103102
{
104-
_overlay.BruteLevel = FixedPoint2.Min(1f, bruteDamage / critThreshold).Float();
103+
foreach (var painDamageType in damageable.PainDamageGroups)
104+
{
105+
damageable.DamagePerGroup.TryGetValue(painDamageType, out var painDamage);
106+
painLevel += painDamage;
107+
}
108+
_overlay.PainLevel = FixedPoint2.Min(1f, painLevel / critThreshold).Float();
109+
110+
if (_overlay.PainLevel < 0.05f) // Don't show damage overlay if they're near enough to max.
111+
{
112+
_overlay.PainLevel = 0;
113+
}
105114
}
106115

107116
if (damageable.DamagePerGroup.TryGetValue("Airloss", out var oxyDamage))
108117
{
109118
_overlay.OxygenLevel = FixedPoint2.Min(1f, oxyDamage / critThreshold).Float();
110119
}
111120

112-
if (_overlay.BruteLevel < 0.05f) // Don't show damage overlay if they're near enough to max.
113-
{
114-
_overlay.BruteLevel = 0;
115-
}
116-
117121
_overlay.CritLevel = 0;
118122
_overlay.DeadLevel = 0;
119123
break;
@@ -125,13 +129,13 @@ private void UpdateOverlays(EntityUid entity, MobStateComponent? mobState, Damag
125129
return;
126130
_overlay.CritLevel = critLevel.Value.Float();
127131

128-
_overlay.BruteLevel = 0;
132+
_overlay.PainLevel = 0;
129133
_overlay.DeadLevel = 0;
130134
break;
131135
}
132136
case MobState.Dead:
133137
{
134-
_overlay.BruteLevel = 0;
138+
_overlay.PainLevel = 0;
135139
_overlay.CritLevel = 0;
136140
break;
137141
}

Content.Client/UserInterface/Systems/DamageOverlays/Overlays/DamageOverlay.cs

+8-8
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ public sealed class DamageOverlay : Overlay
2525
/// <summary>
2626
/// Handles the red pulsing overlay
2727
/// </summary>
28-
public float BruteLevel = 0f;
28+
public float PainLevel = 0f;
2929

30-
private float _oldBruteLevel = 0f;
30+
private float _oldPainLevel = 0f;
3131

3232
/// <summary>
3333
/// Handles the darkening overlay.
@@ -92,14 +92,14 @@ protected override void Draw(in OverlayDrawArgs args)
9292
DeadLevel = 0f;
9393
}
9494

95-
if (!MathHelper.CloseTo(_oldBruteLevel, BruteLevel, 0.001f))
95+
if (!MathHelper.CloseTo(_oldPainLevel, PainLevel, 0.001f))
9696
{
97-
var diff = BruteLevel - _oldBruteLevel;
98-
_oldBruteLevel += GetDiff(diff, lastFrameTime);
97+
var diff = PainLevel - _oldPainLevel;
98+
_oldPainLevel += GetDiff(diff, lastFrameTime);
9999
}
100100
else
101101
{
102-
_oldBruteLevel = BruteLevel;
102+
_oldPainLevel = PainLevel;
103103
}
104104

105105
if (!MathHelper.CloseTo(_oldOxygenLevel, OxygenLevel, 0.001f))
@@ -135,7 +135,7 @@ protected override void Draw(in OverlayDrawArgs args)
135135

136136
// Makes debugging easier don't @ me
137137
float level = 0f;
138-
level = _oldBruteLevel;
138+
level = _oldPainLevel;
139139

140140
// TODO: Lerping
141141
if (level > 0f && _oldCritLevel <= 0f)
@@ -165,7 +165,7 @@ protected override void Draw(in OverlayDrawArgs args)
165165
}
166166
else
167167
{
168-
_oldBruteLevel = BruteLevel;
168+
_oldPainLevel = PainLevel;
169169
}
170170

171171
level = State != MobState.Critical ? _oldOxygenLevel : 1f;

Content.Shared/Damage/Components/DamageableComponent.cs

+7
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,13 @@ public sealed partial class DamageableComponent : Component
6565
[DataField("radiationDamageTypes")]
6666
public List<ProtoId<DamageTypePrototype>> RadiationDamageTypeIDs = new() { "Radiation" };
6767

68+
/// <summary>
69+
/// Group types that affect the pain overlay.
70+
/// </summary>
71+
/// TODO: Add support for adding damage types specifically rather than whole damage groups
72+
[DataField]
73+
public List<ProtoId<DamageGroupPrototype>> PainDamageGroups = new() { "Brute", "Burn" };
74+
6875
[DataField]
6976
public Dictionary<MobState, ProtoId<HealthIconPrototype>> HealthIcons = new()
7077
{

0 commit comments

Comments
 (0)