]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix MovespeedModifierMetabolism state handling (#15084)
authorLeon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Mon, 3 Apr 2023 03:31:00 +0000 (15:31 +1200)
committerGitHub <noreply@github.com>
Mon, 3 Apr 2023 03:31:00 +0000 (13:31 +1000)
Content.Shared/Chemistry/Components/MovespeedModifierMetabolismComponent.cs
Content.Shared/Chemistry/MetabolismMovespeedModifierSystem.cs
Content.Shared/Movement/Systems/MovementSpeedModifierSystem.cs

index 12710a979048e800bcc2437bdda0b0da995603a5..afdc55f0d57c21120366e08159805d020e163931 100644 (file)
@@ -20,11 +20,6 @@ namespace Content.Shared.Chemistry.Components
         [ViewVariables]
         public TimeSpan ModifierTimer { get; set; } = TimeSpan.Zero;
 
-        public override ComponentState GetComponentState()
-        {
-            return new MovespeedModifierMetabolismComponentState(WalkSpeedModifier, SprintSpeedModifier, ModifierTimer);
-        }
-
         [Serializable, NetSerializable]
         public sealed class MovespeedModifierMetabolismComponentState : ComponentState
         {
index 00746ef99d1b9c747c5ef252b4d759844be442ec..cfa7446caa5bad93722bc017d345be0ecb672324 100644 (file)
@@ -22,26 +22,27 @@ namespace Content.Shared.Chemistry
             UpdatesOutsidePrediction = true;
 
             SubscribeLocalEvent<MovespeedModifierMetabolismComponent, ComponentHandleState>(OnMovespeedHandleState);
+            SubscribeLocalEvent<MovespeedModifierMetabolismComponent, ComponentGetState>(OnGetState);
             SubscribeLocalEvent<MovespeedModifierMetabolismComponent, ComponentStartup>(AddComponent);
             SubscribeLocalEvent<MovespeedModifierMetabolismComponent, RefreshMovementSpeedModifiersEvent>(OnRefreshMovespeed);
         }
 
+        private void OnGetState(EntityUid uid, MovespeedModifierMetabolismComponent component, ref ComponentGetState args)
+        {
+            args.State = new MovespeedModifierMetabolismComponentState(
+                component.WalkSpeedModifier,
+                component.SprintSpeedModifier,
+                component.ModifierTimer);
+        }
+
         private void OnMovespeedHandleState(EntityUid uid, MovespeedModifierMetabolismComponent component, ref ComponentHandleState args)
         {
             if (args.Current is not MovespeedModifierMetabolismComponentState cast)
                 return;
 
-            if (EntityManager.TryGetComponent<MovementSpeedModifierComponent>(uid, out var modifier) &&
-                (!component.WalkSpeedModifier.Equals(cast.WalkSpeedModifier) ||
-                 !component.SprintSpeedModifier.Equals(cast.SprintSpeedModifier)))
-            {
-                _movespeed.RefreshMovementSpeedModifiers(uid);
-            }
-
             component.WalkSpeedModifier = cast.WalkSpeedModifier;
             component.SprintSpeedModifier = cast.SprintSpeedModifier;
             component.ModifierTimer = cast.ModifierTimer;
-
         }
 
         private void OnRefreshMovespeed(EntityUid uid, MovespeedModifierMetabolismComponent component, RefreshMovementSpeedModifiersEvent args)
index 1d43b635f8b14770e70e5766cb7c8500223f8638..a83fcf78b2c5410506c6dc642856324a6eca80b1 100644 (file)
@@ -2,11 +2,15 @@ using Content.Shared.Inventory;
 using Content.Shared.Movement.Components;
 using Robust.Shared.GameStates;
 using Robust.Shared.Serialization;
+using Robust.Shared.Timing;
+using Robust.Shared.Utility;
 
 namespace Content.Shared.Movement.Systems
 {
     public sealed class MovementSpeedModifierSystem : EntitySystem
     {
+        [Dependency] private readonly IGameTiming _timing = default!;
+
         public override void Initialize()
         {
             base.Initialize();
@@ -39,6 +43,9 @@ namespace Content.Shared.Movement.Systems
             if (!Resolve(uid, ref move, false))
                 return;
 
+            if (_timing.ApplyingState)
+                return;
+
             var ev = new RefreshMovementSpeedModifiersEvent();
             RaiseLocalEvent(uid, ev);