diff --git a/Content.Client/Physics/Controllers/MoverController.cs b/Content.Client/Physics/Controllers/MoverController.cs index 85068682bf..88e6a335c1 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 7a95f14f05..93eda974a2 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 b111f29c2c..49a82df1d3 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 66186a0e68..952c38cdb4 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 f98723f4e9..c3918a3cd3 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;