Changed Damage Overlay to check Burn Damage (#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
This commit is contained in:
Coolsurf6
2025-03-03 11:11:58 +00:00
committed by GitHub
parent f42c1bc933
commit 913894a041
3 changed files with 33 additions and 22 deletions

View File

@@ -67,7 +67,7 @@ public sealed class DamageOverlayUiController : UIController
{ {
_overlay.DeadLevel = 0f; _overlay.DeadLevel = 0f;
_overlay.CritLevel = 0f; _overlay.CritLevel = 0f;
_overlay.BruteLevel = 0f; _overlay.PainLevel = 0f;
_overlay.OxygenLevel = 0f; _overlay.OxygenLevel = 0f;
} }
@@ -95,13 +95,22 @@ public sealed class DamageOverlayUiController : UIController
{ {
case MobState.Alive: case MobState.Alive:
{ {
if (EntityManager.HasComponent<PainNumbnessComponent>(entity)) FixedPoint2 painLevel = 0;
_overlay.PainLevel = 0;
if (!EntityManager.HasComponent<PainNumbnessComponent>(entity))
{ {
_overlay.BruteLevel = 0; foreach (var painDamageType in damageable.PainDamageGroups)
} {
else if (damageable.DamagePerGroup.TryGetValue("Brute", out var bruteDamage)) damageable.DamagePerGroup.TryGetValue(painDamageType, out var painDamage);
{ painLevel += painDamage;
_overlay.BruteLevel = FixedPoint2.Min(1f, bruteDamage / critThreshold).Float(); }
_overlay.PainLevel = FixedPoint2.Min(1f, painLevel / critThreshold).Float();
if (_overlay.PainLevel < 0.05f) // Don't show damage overlay if they're near enough to max.
{
_overlay.PainLevel = 0;
}
} }
if (damageable.DamagePerGroup.TryGetValue("Airloss", out var oxyDamage)) if (damageable.DamagePerGroup.TryGetValue("Airloss", out var oxyDamage))
@@ -109,11 +118,6 @@ public sealed class DamageOverlayUiController : UIController
_overlay.OxygenLevel = FixedPoint2.Min(1f, oxyDamage / critThreshold).Float(); _overlay.OxygenLevel = FixedPoint2.Min(1f, oxyDamage / critThreshold).Float();
} }
if (_overlay.BruteLevel < 0.05f) // Don't show damage overlay if they're near enough to max.
{
_overlay.BruteLevel = 0;
}
_overlay.CritLevel = 0; _overlay.CritLevel = 0;
_overlay.DeadLevel = 0; _overlay.DeadLevel = 0;
break; break;
@@ -125,13 +129,13 @@ public sealed class DamageOverlayUiController : UIController
return; return;
_overlay.CritLevel = critLevel.Value.Float(); _overlay.CritLevel = critLevel.Value.Float();
_overlay.BruteLevel = 0; _overlay.PainLevel = 0;
_overlay.DeadLevel = 0; _overlay.DeadLevel = 0;
break; break;
} }
case MobState.Dead: case MobState.Dead:
{ {
_overlay.BruteLevel = 0; _overlay.PainLevel = 0;
_overlay.CritLevel = 0; _overlay.CritLevel = 0;
break; break;
} }

View File

@@ -25,9 +25,9 @@ public sealed class DamageOverlay : Overlay
/// <summary> /// <summary>
/// Handles the red pulsing overlay /// Handles the red pulsing overlay
/// </summary> /// </summary>
public float BruteLevel = 0f; public float PainLevel = 0f;
private float _oldBruteLevel = 0f; private float _oldPainLevel = 0f;
/// <summary> /// <summary>
/// Handles the darkening overlay. /// Handles the darkening overlay.
@@ -92,14 +92,14 @@ public sealed class DamageOverlay : Overlay
DeadLevel = 0f; DeadLevel = 0f;
} }
if (!MathHelper.CloseTo(_oldBruteLevel, BruteLevel, 0.001f)) if (!MathHelper.CloseTo(_oldPainLevel, PainLevel, 0.001f))
{ {
var diff = BruteLevel - _oldBruteLevel; var diff = PainLevel - _oldPainLevel;
_oldBruteLevel += GetDiff(diff, lastFrameTime); _oldPainLevel += GetDiff(diff, lastFrameTime);
} }
else else
{ {
_oldBruteLevel = BruteLevel; _oldPainLevel = PainLevel;
} }
if (!MathHelper.CloseTo(_oldOxygenLevel, OxygenLevel, 0.001f)) if (!MathHelper.CloseTo(_oldOxygenLevel, OxygenLevel, 0.001f))
@@ -135,7 +135,7 @@ public sealed class DamageOverlay : Overlay
// Makes debugging easier don't @ me // Makes debugging easier don't @ me
float level = 0f; float level = 0f;
level = _oldBruteLevel; level = _oldPainLevel;
// TODO: Lerping // TODO: Lerping
if (level > 0f && _oldCritLevel <= 0f) if (level > 0f && _oldCritLevel <= 0f)
@@ -165,7 +165,7 @@ public sealed class DamageOverlay : Overlay
} }
else else
{ {
_oldBruteLevel = BruteLevel; _oldPainLevel = PainLevel;
} }
level = State != MobState.Critical ? _oldOxygenLevel : 1f; level = State != MobState.Critical ? _oldOxygenLevel : 1f;

View File

@@ -65,6 +65,13 @@ namespace Content.Shared.Damage
[DataField("radiationDamageTypes")] [DataField("radiationDamageTypes")]
public List<ProtoId<DamageTypePrototype>> RadiationDamageTypeIDs = new() { "Radiation" }; public List<ProtoId<DamageTypePrototype>> RadiationDamageTypeIDs = new() { "Radiation" };
/// <summary>
/// Group types that affect the pain overlay.
/// </summary>
/// TODO: Add support for adding damage types specifically rather than whole damage groups
[DataField]
public List<ProtoId<DamageGroupPrototype>> PainDamageGroups = new() { "Brute", "Burn" };
[DataField] [DataField]
public Dictionary<MobState, ProtoId<HealthIconPrototype>> HealthIcons = new() public Dictionary<MobState, ProtoId<HealthIconPrototype>> HealthIcons = new()
{ {