[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
{
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)
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();
if (!Resolve(uid, ref move, false))
return;
+ if (_timing.ApplyingState)
+ return;
+
var ev = new RefreshMovementSpeedModifiersEvent();
RaiseLocalEvent(uid, ev);