From 19586ea46c3bdbc6ecaf9c35daebac5a21849678 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Sat, 22 Oct 2022 12:50:14 +1300 Subject: [PATCH] Reset movement on player (de)attach (#12073) --- .../Physics/Controllers/MoverController.cs | 32 +++++++++++++ .../Physics/Controllers/MoverController.cs | 32 +++++++++++++ .../Components/InputMoverComponent.cs | 1 + .../Systems/SharedMoverController.Input.cs | 47 ++++++++++--------- .../Shuttles/Components/PilotComponent.cs | 1 + 5 files changed, 90 insertions(+), 23 deletions(-) diff --git a/Content.Client/Physics/Controllers/MoverController.cs b/Content.Client/Physics/Controllers/MoverController.cs index 85068682bfe..88e6a335c10 100644 --- a/Content.Client/Physics/Controllers/MoverController.cs +++ b/Content.Client/Physics/Controllers/MoverController.cs @@ -1,6 +1,7 @@ using Content.Shared.Movement.Components; using Content.Shared.Movement.Systems; using Content.Shared.Pulling.Components; +using Robust.Client.GameObjects; using Robust.Client.Player; using Robust.Shared.Physics; using Robust.Shared.Physics.Components; @@ -13,6 +14,37 @@ namespace Content.Client.Physics.Controllers [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnRelayPlayerAttached); + SubscribeLocalEvent(OnRelayPlayerDetached); + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnPlayerDetached); + } + + private void OnRelayPlayerAttached(EntityUid uid, RelayInputMoverComponent component, PlayerAttachedEvent args) + { + if (TryComp(component.RelayEntity, out var inputMover)) + SetMoveInput(inputMover, MoveButtons.None); + } + + private void OnRelayPlayerDetached(EntityUid uid, RelayInputMoverComponent component, PlayerDetachedEvent args) + { + if (TryComp(component.RelayEntity, out var inputMover)) + SetMoveInput(inputMover, MoveButtons.None); + } + + private void OnPlayerAttached(EntityUid uid, InputMoverComponent component, PlayerAttachedEvent args) + { + SetMoveInput(component, MoveButtons.None); + } + + private void OnPlayerDetached(EntityUid uid, InputMoverComponent component, PlayerDetachedEvent args) + { + SetMoveInput(component, MoveButtons.None); + } + public override void UpdateBeforeSolve(bool prediction, float frameTime) { base.UpdateBeforeSolve(prediction, frameTime); diff --git a/Content.Server/Physics/Controllers/MoverController.cs b/Content.Server/Physics/Controllers/MoverController.cs index 7a95f14f051..93eda974a2d 100644 --- a/Content.Server/Physics/Controllers/MoverController.cs +++ b/Content.Server/Physics/Controllers/MoverController.cs @@ -5,6 +5,7 @@ using Content.Shared.Movement.Components; using Content.Shared.Movement.Systems; using Content.Shared.Shuttles.Components; using Content.Shared.Shuttles.Systems; +using Robust.Server.GameObjects; using Robust.Shared.Map; using Robust.Shared.Physics.Components; using Robust.Shared.Player; @@ -18,6 +19,37 @@ namespace Content.Server.Physics.Controllers private Dictionary> _shuttlePilots = new(); + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnRelayPlayerAttached); + SubscribeLocalEvent(OnRelayPlayerDetached); + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnPlayerDetached); + } + + private void OnRelayPlayerAttached(EntityUid uid, RelayInputMoverComponent component, PlayerAttachedEvent args) + { + if (TryComp(component.RelayEntity, out var inputMover)) + SetMoveInput(inputMover, MoveButtons.None); + } + + private void OnRelayPlayerDetached(EntityUid uid, RelayInputMoverComponent component, PlayerDetachedEvent args) + { + if (TryComp(component.RelayEntity, out var inputMover)) + SetMoveInput(inputMover, MoveButtons.None); + } + + private void OnPlayerAttached(EntityUid uid, InputMoverComponent component, PlayerAttachedEvent args) + { + SetMoveInput(component, MoveButtons.None); + } + + private void OnPlayerDetached(EntityUid uid, InputMoverComponent component, PlayerDetachedEvent args) + { + SetMoveInput(component, MoveButtons.None); + } + protected override bool CanSound() { return true; diff --git a/Content.Shared/Movement/Components/InputMoverComponent.cs b/Content.Shared/Movement/Components/InputMoverComponent.cs index b111f29c2c0..49a82df1d38 100644 --- a/Content.Shared/Movement/Components/InputMoverComponent.cs +++ b/Content.Shared/Movement/Components/InputMoverComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Movement.Systems; using Robust.Shared.GameStates; using Robust.Shared.Timing; diff --git a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs index 66186a0e683..952c38cdb44 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs @@ -59,7 +59,7 @@ namespace Content.Shared.Movement.Systems CameraRotationLocked = obj; } - private void SetMoveInput(InputMoverComponent component, MoveButtons buttons) + protected void SetMoveInput(InputMoverComponent component, MoveButtons buttons) { if (component.HeldMoveButtons == buttons) return; component.HeldMoveButtons = buttons; @@ -517,28 +517,29 @@ namespace Content.Shared.Movement.Systems } } } -} -[Flags] -public enum MoveButtons : byte -{ - None = 0, - Up = 1, - Down = 2, - Left = 4, - Right = 8, - Walk = 16, -} + [Flags] + public enum MoveButtons : byte + { + None = 0, + Up = 1, + Down = 2, + Left = 4, + Right = 8, + Walk = 16, + } + + [Flags] + public enum ShuttleButtons : byte + { + None = 0, + StrafeUp = 1 << 0, + StrafeDown = 1 << 1, + StrafeLeft = 1 << 2, + StrafeRight = 1 << 3, + RotateLeft = 1 << 4, + RotateRight = 1 << 5, + Brake = 1 << 6, + } -[Flags] -public enum ShuttleButtons : byte -{ - None = 0, - StrafeUp = 1 << 0, - StrafeDown = 1 << 1, - StrafeLeft = 1 << 2, - StrafeRight = 1 << 3, - RotateLeft = 1 << 4, - RotateRight = 1 << 5, - Brake = 1 << 6, } diff --git a/Content.Shared/Shuttles/Components/PilotComponent.cs b/Content.Shared/Shuttles/Components/PilotComponent.cs index f98723f4e90..c3918a3cd3a 100644 --- a/Content.Shared/Shuttles/Components/PilotComponent.cs +++ b/Content.Shared/Shuttles/Components/PilotComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Movement.Systems; using Robust.Shared.GameStates; using Robust.Shared.Map; using Robust.Shared.Timing;