]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix thirst (#20472)
authorSlava0135 <40753025+Slava0135@users.noreply.github.com>
Sun, 24 Sep 2023 19:50:41 +0000 (22:50 +0300)
committerGitHub <noreply@github.com>
Sun, 24 Sep 2023 19:50:41 +0000 (12:50 -0700)
Co-authored-by: DrSmugleaf <drsmugleaf@gmail.com>
Content.Server/Chemistry/ReagentEffects/SatiateThirst.cs
Content.Server/Medical/VomitSystem.cs
Content.Shared/Nutrition/Components/ThirstComponent.cs
Content.Shared/Nutrition/EntitySystems/ThirstSystem.cs

index 529aa8adf179099ec83ea14763f3cf46145699c8..1208e74367b0e47c14e7f04fa306dd270abc831f 100644 (file)
@@ -1,6 +1,6 @@
-using Content.Server.Nutrition.EntitySystems;
 using Content.Shared.Chemistry.Reagent;
 using Content.Shared.Nutrition.Components;
+using Content.Shared.Nutrition.EntitySystems;
 using Robust.Shared.Prototypes;
 
 namespace Content.Server.Chemistry.ReagentEffects
@@ -21,8 +21,9 @@ namespace Content.Server.Chemistry.ReagentEffects
         /// Satiate thirst if a ThirstComponent can be found
         public override void Effect(ReagentEffectArgs args)
         {
-            if (args.EntityManager.TryGetComponent(args.SolutionEntity, out ThirstComponent? thirst))
-                EntitySystem.Get<ThirstSystem>().UpdateThirst(thirst, HydrationFactor);
+            var uid = args.SolutionEntity;
+            if (args.EntityManager.TryGetComponent(uid, out ThirstComponent? thirst))
+                EntitySystem.Get<ThirstSystem>().ModifyThirst(uid, thirst, HydrationFactor);
         }
 
         protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
index a764cd2b19cfed5e19cbd55b2d000fa79622bca7..37ad658825b57f0790e153cbecde04a8781f166c 100644 (file)
@@ -44,7 +44,7 @@ namespace Content.Server.Medical
                 _hunger.ModifyHunger(uid, hungerAdded, hunger);
 
             if (TryComp<ThirstComponent>(uid, out var thirst))
-                _thirst.UpdateThirst(thirst, thirstAdded);
+                _thirst.ModifyThirst(uid, thirst, thirstAdded);
 
             // It fully empties the stomach, this amount from the chem stream is relatively small
             var solutionSize = (MathF.Abs(thirstAdded) + MathF.Abs(hungerAdded)) / 6;
index da75a8e5dea928209b59e59b52601b83e514f1a6..e5604de57b3481ac841f06d95f3c4a42f188ff95 100644 (file)
@@ -1,5 +1,5 @@
-using Content.Server.Nutrition.EntitySystems;
 using Content.Shared.Alert;
+using Content.Shared.Nutrition.EntitySystems;
 using Robust.Shared.GameStates;
 using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
 
index 4fa7c417aa45b915f7d7c2918b2d5ff18185c4ea..b75a6d1a0a518760491123c331c4d97c1b34ea52 100644 (file)
@@ -7,7 +7,7 @@ using JetBrains.Annotations;
 using Robust.Shared.Random;
 using Robust.Shared.Timing;
 
-namespace Content.Server.Nutrition.EntitySystems;
+namespace Content.Shared.Nutrition.EntitySystems;
 
 [UsedImplicitly]
 public sealed class ThirstSystem : EntitySystem
@@ -27,12 +27,12 @@ public sealed class ThirstSystem : EntitySystem
         _sawmill = Logger.GetSawmill("thirst");
 
         SubscribeLocalEvent<ThirstComponent, RefreshMovementSpeedModifiersEvent>(OnRefreshMovespeed);
-        SubscribeLocalEvent<ThirstComponent, ComponentStartup>(OnComponentStartup);
+        SubscribeLocalEvent<ThirstComponent, MapInitEvent>(OnMapInit);
         SubscribeLocalEvent<ThirstComponent, RejuvenateEvent>(OnRejuvenate);
         SubscribeLocalEvent<ThirstComponent, EntityUnpausedEvent>(OnUnpaused);
     }
 
-    private void OnComponentStartup(EntityUid uid, ThirstComponent component, ComponentStartup args)
+    private void OnMapInit(EntityUid uid, ThirstComponent component, MapInitEvent args)
     {
         // Do not change behavior unless starting value is explicitly defined
         if (component.CurrentThirst < 0)
@@ -41,6 +41,7 @@ public sealed class ThirstSystem : EntitySystem
                 (int) component.ThirstThresholds[ThirstThreshold.Thirsty] + 10,
                 (int) component.ThirstThresholds[ThirstThreshold.Okay] - 1);
         }
+        component.NextUpdateTime = _timing.CurTime;
         component.CurrentThirstThreshold = GetThirstThreshold(component, component.CurrentThirst);
         component.LastThirstThreshold = ThirstThreshold.Okay; // TODO: Potentially change this -> Used Okay because no effects.
         // TODO: Check all thresholds make sense and throw if they don't.
@@ -59,7 +60,7 @@ public sealed class ThirstSystem : EntitySystem
 
     private void OnRejuvenate(EntityUid uid, ThirstComponent component, RejuvenateEvent args)
     {
-        ResetThirst(component);
+        SetThirst(uid, component, component.ThirstThresholds[ThirstThreshold.Okay]);
     }
 
     private ThirstThreshold GetThirstThreshold(ThirstComponent component, float amount)
@@ -78,14 +79,18 @@ public sealed class ThirstSystem : EntitySystem
         return result;
     }
 
-    public void UpdateThirst(ThirstComponent component, float amount)
+    public void ModifyThirst(EntityUid uid, ThirstComponent component, float amount)
     {
-        component.CurrentThirst = Math.Clamp(component.CurrentThirst + amount, component.ThirstThresholds[ThirstThreshold.Dead], component.ThirstThresholds[ThirstThreshold.OverHydrated]);
+        SetThirst(uid, component, component.CurrentThirst + amount);
     }
 
-    public void ResetThirst(ThirstComponent component)
+    public void SetThirst(EntityUid uid, ThirstComponent component, float amount)
     {
-        component.CurrentThirst = component.ThirstThresholds[ThirstThreshold.Okay];
+        component.CurrentThirst = Math.Clamp(amount,
+            component.ThirstThresholds[ThirstThreshold.Dead],
+            component.ThirstThresholds[ThirstThreshold.OverHydrated]
+        );
+        Dirty(uid, component);
     }
 
     private bool IsMovementThreshold(ThirstThreshold threshold)
@@ -166,7 +171,7 @@ public sealed class ThirstSystem : EntitySystem
 
             thirst.NextUpdateTime += thirst.UpdateRate;
 
-            UpdateThirst(thirst, -thirst.ActualDecayRate);
+            ModifyThirst(uid, thirst, -thirst.ActualDecayRate);
             var calculatedThirstThreshold = GetThirstThreshold(thirst, thirst.CurrentThirst);
 
             if (calculatedThirstThreshold == thirst.CurrentThirstThreshold)