diff --git a/Content.Shared/Chemistry/Components/MovespeedModifierMetabolismComponent.cs b/Content.Shared/Chemistry/Components/MovespeedModifierMetabolismComponent.cs index 12710a9790..afdc55f0d5 100644 --- a/Content.Shared/Chemistry/Components/MovespeedModifierMetabolismComponent.cs +++ b/Content.Shared/Chemistry/Components/MovespeedModifierMetabolismComponent.cs @@ -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 { diff --git a/Content.Shared/Chemistry/MetabolismMovespeedModifierSystem.cs b/Content.Shared/Chemistry/MetabolismMovespeedModifierSystem.cs index 00746ef99d..cfa7446caa 100644 --- a/Content.Shared/Chemistry/MetabolismMovespeedModifierSystem.cs +++ b/Content.Shared/Chemistry/MetabolismMovespeedModifierSystem.cs @@ -22,26 +22,27 @@ namespace Content.Shared.Chemistry UpdatesOutsidePrediction = true; SubscribeLocalEvent(OnMovespeedHandleState); + SubscribeLocalEvent(OnGetState); SubscribeLocalEvent(AddComponent); SubscribeLocalEvent(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(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) diff --git a/Content.Shared/Movement/Systems/MovementSpeedModifierSystem.cs b/Content.Shared/Movement/Systems/MovementSpeedModifierSystem.cs index 1d43b635f8..a83fcf78b2 100644 --- a/Content.Shared/Movement/Systems/MovementSpeedModifierSystem.cs +++ b/Content.Shared/Movement/Systems/MovementSpeedModifierSystem.cs @@ -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);