From 012be96877987608ce38c7f39d30b04dc9e35835 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Mon, 1 Nov 2021 23:24:00 +1100 Subject: [PATCH] Network MovementSpeedModifierComponent (#5100) --- .../MovementSpeedModifierComponent.cs | 31 +++++++++++--- .../MovementSpeedModifierSystem.cs | 41 +++++++++++++++++++ 2 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 Content.Shared/Movement/EntitySystems/MovementSpeedModifierSystem.cs diff --git a/Content.Shared/Movement/Components/MovementSpeedModifierComponent.cs b/Content.Shared/Movement/Components/MovementSpeedModifierComponent.cs index a8b8dde087..ee8137abd7 100644 --- a/Content.Shared/Movement/Components/MovementSpeedModifierComponent.cs +++ b/Content.Shared/Movement/Components/MovementSpeedModifierComponent.cs @@ -1,17 +1,18 @@ using Robust.Shared.Containers; using Robust.Shared.GameObjects; +using Robust.Shared.GameStates; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; namespace Content.Shared.Movement.Components { [RegisterComponent] - public class MovementSpeedModifierComponent : Component + [NetworkedComponent] + public sealed class MovementSpeedModifierComponent : Component { public const float DefaultBaseWalkSpeed = 4.0f; public const float DefaultBaseSprintSpeed = 7.0f; - public override string Name => "MovementSpeedModifier"; private float _cachedWalkSpeedModifier = 1.0f; @@ -36,12 +37,32 @@ namespace Content.Shared.Movement.Components } [ViewVariables(VVAccess.ReadWrite)] - [DataField("baseWalkSpeed")] - public float BaseWalkSpeed { get; set; } = 4; + public float BaseWalkSpeedVV + { + get => BaseWalkSpeed; + set + { + BaseWalkSpeed = value; + Dirty(); + } + } [ViewVariables(VVAccess.ReadWrite)] + public float BaseSprintSpeedVV + { + get => BaseSprintSpeed; + set + { + BaseSprintSpeed = value; + Dirty(); + } + } + + [DataField("baseWalkSpeed")] + public float BaseWalkSpeed { get; set; } = DefaultBaseWalkSpeed; + [DataField("baseSprintSpeed")] - public float BaseSprintSpeed { get; set; } = 7; + public float BaseSprintSpeed { get; set; } = DefaultBaseSprintSpeed; [ViewVariables] public float CurrentWalkSpeed => WalkSpeedModifier * BaseWalkSpeed; diff --git a/Content.Shared/Movement/EntitySystems/MovementSpeedModifierSystem.cs b/Content.Shared/Movement/EntitySystems/MovementSpeedModifierSystem.cs new file mode 100644 index 0000000000..90cdea07d3 --- /dev/null +++ b/Content.Shared/Movement/EntitySystems/MovementSpeedModifierSystem.cs @@ -0,0 +1,41 @@ +using System; +using Content.Shared.Movement.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Movement.EntitySystems +{ + public sealed class MovementSpeedModifierSystem : EntitySystem + { + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnGetState); + SubscribeLocalEvent(OnHandleState); + } + + private void OnGetState(EntityUid uid, MovementSpeedModifierComponent component, ref ComponentGetState args) + { + args.State = new MovementSpeedModifierComponentState + { + BaseWalkSpeed = component.BaseWalkSpeed, + BaseSprintSpeed = component.BaseSprintSpeed, + }; + } + + private void OnHandleState(EntityUid uid, MovementSpeedModifierComponent component, ref ComponentHandleState args) + { + if (args.Current is not MovementSpeedModifierComponentState state) return; + component.BaseWalkSpeed = state.BaseWalkSpeed; + component.BaseSprintSpeed = state.BaseSprintSpeed; + } + + [Serializable, NetSerializable] + private sealed class MovementSpeedModifierComponentState : ComponentState + { + public float BaseWalkSpeed; + public float BaseSprintSpeed; + } + } +}