From: Coolsurf6 Date: Mon, 3 Mar 2025 11:11:58 +0000 (+0000) Subject: Changed Damage Overlay to check Burn Damage (#34535) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=913894a0416f49303b72867b725653749b6b5419;p=space-station-14.git 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 --- diff --git a/Content.Client/UserInterface/Systems/DamageOverlays/DamageOverlayUiController.cs b/Content.Client/UserInterface/Systems/DamageOverlays/DamageOverlayUiController.cs index 9d9dd30911..55d00fec18 100644 --- a/Content.Client/UserInterface/Systems/DamageOverlays/DamageOverlayUiController.cs +++ b/Content.Client/UserInterface/Systems/DamageOverlays/DamageOverlayUiController.cs @@ -67,7 +67,7 @@ public sealed class DamageOverlayUiController : UIController { _overlay.DeadLevel = 0f; _overlay.CritLevel = 0f; - _overlay.BruteLevel = 0f; + _overlay.PainLevel = 0f; _overlay.OxygenLevel = 0f; } @@ -95,13 +95,22 @@ public sealed class DamageOverlayUiController : UIController { case MobState.Alive: { - if (EntityManager.HasComponent(entity)) - { - _overlay.BruteLevel = 0; - } - else if (damageable.DamagePerGroup.TryGetValue("Brute", out var bruteDamage)) + FixedPoint2 painLevel = 0; + _overlay.PainLevel = 0; + + if (!EntityManager.HasComponent(entity)) { - _overlay.BruteLevel = FixedPoint2.Min(1f, bruteDamage / critThreshold).Float(); + foreach (var painDamageType in damageable.PainDamageGroups) + { + damageable.DamagePerGroup.TryGetValue(painDamageType, out var painDamage); + painLevel += painDamage; + } + _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)) @@ -109,11 +118,6 @@ public sealed class DamageOverlayUiController : UIController _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.DeadLevel = 0; break; @@ -125,13 +129,13 @@ public sealed class DamageOverlayUiController : UIController return; _overlay.CritLevel = critLevel.Value.Float(); - _overlay.BruteLevel = 0; + _overlay.PainLevel = 0; _overlay.DeadLevel = 0; break; } case MobState.Dead: { - _overlay.BruteLevel = 0; + _overlay.PainLevel = 0; _overlay.CritLevel = 0; break; } diff --git a/Content.Client/UserInterface/Systems/DamageOverlays/Overlays/DamageOverlay.cs b/Content.Client/UserInterface/Systems/DamageOverlays/Overlays/DamageOverlay.cs index fd74815316..de70fe16f8 100644 --- a/Content.Client/UserInterface/Systems/DamageOverlays/Overlays/DamageOverlay.cs +++ b/Content.Client/UserInterface/Systems/DamageOverlays/Overlays/DamageOverlay.cs @@ -25,9 +25,9 @@ public sealed class DamageOverlay : Overlay /// /// Handles the red pulsing overlay /// - public float BruteLevel = 0f; + public float PainLevel = 0f; - private float _oldBruteLevel = 0f; + private float _oldPainLevel = 0f; /// /// Handles the darkening overlay. @@ -92,14 +92,14 @@ public sealed class DamageOverlay : Overlay DeadLevel = 0f; } - if (!MathHelper.CloseTo(_oldBruteLevel, BruteLevel, 0.001f)) + if (!MathHelper.CloseTo(_oldPainLevel, PainLevel, 0.001f)) { - var diff = BruteLevel - _oldBruteLevel; - _oldBruteLevel += GetDiff(diff, lastFrameTime); + var diff = PainLevel - _oldPainLevel; + _oldPainLevel += GetDiff(diff, lastFrameTime); } else { - _oldBruteLevel = BruteLevel; + _oldPainLevel = PainLevel; } if (!MathHelper.CloseTo(_oldOxygenLevel, OxygenLevel, 0.001f)) @@ -135,7 +135,7 @@ public sealed class DamageOverlay : Overlay // Makes debugging easier don't @ me float level = 0f; - level = _oldBruteLevel; + level = _oldPainLevel; // TODO: Lerping if (level > 0f && _oldCritLevel <= 0f) @@ -165,7 +165,7 @@ public sealed class DamageOverlay : Overlay } else { - _oldBruteLevel = BruteLevel; + _oldPainLevel = PainLevel; } level = State != MobState.Critical ? _oldOxygenLevel : 1f; diff --git a/Content.Shared/Damage/Components/DamageableComponent.cs b/Content.Shared/Damage/Components/DamageableComponent.cs index 8ea3567b05..9e4e26e422 100644 --- a/Content.Shared/Damage/Components/DamageableComponent.cs +++ b/Content.Shared/Damage/Components/DamageableComponent.cs @@ -65,6 +65,13 @@ namespace Content.Shared.Damage [DataField("radiationDamageTypes")] public List> RadiationDamageTypeIDs = new() { "Radiation" }; + /// + /// Group types that affect the pain overlay. + /// + /// TODO: Add support for adding damage types specifically rather than whole damage groups + [DataField] + public List> PainDamageGroups = new() { "Brute", "Burn" }; + [DataField] public Dictionary> HealthIcons = new() {