]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Changed Damage Overlay to check Burn Damage (#34535)
authorCoolsurf6 <coolsurf24@yahoo.com.au>
Mon, 3 Mar 2025 11:11:58 +0000 (11:11 +0000)
committerGitHub <noreply@github.com>
Mon, 3 Mar 2025 11:11:58 +0000 (12:11 +0100)
* 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

Content.Client/UserInterface/Systems/DamageOverlays/DamageOverlayUiController.cs
Content.Client/UserInterface/Systems/DamageOverlays/Overlays/DamageOverlay.cs
Content.Shared/Damage/Components/DamageableComponent.cs

index 9d9dd30911648aa00eed31187e54eb16c558dbb2..55d00fec18546f7470aff8f07bb199243ac54891 100644 (file)
@@ -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<PainNumbnessComponent>(entity))
-                {
-                    _overlay.BruteLevel = 0;
-                }
-                else if (damageable.DamagePerGroup.TryGetValue("Brute", out var bruteDamage))
+                FixedPoint2 painLevel = 0;
+                _overlay.PainLevel = 0;
+
+                if (!EntityManager.HasComponent<PainNumbnessComponent>(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;
             }
index fd748153166b5cba457f0afae9394d913c5810f4..de70fe16f82a6df1d39c871d087164d78bce680a 100644 (file)
@@ -25,9 +25,9 @@ public sealed class DamageOverlay : Overlay
     /// <summary>
     /// Handles the red pulsing overlay
     /// </summary>
-    public float BruteLevel = 0f;
+    public float PainLevel = 0f;
 
-    private float _oldBruteLevel = 0f;
+    private float _oldPainLevel = 0f;
 
     /// <summary>
     /// 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;
index 8ea3567b055c8ccd7da9677542de20c955074144..9e4e26e4226abece73c0411ad78ba8177e4ee2b6 100644 (file)
@@ -65,6 +65,13 @@ namespace Content.Shared.Damage
         [DataField("radiationDamageTypes")]
         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]
         public Dictionary<MobState, ProtoId<HealthIconPrototype>> HealthIcons = new()
         {