Reset movement on player (de)attach (#12073)

This commit is contained in:
Leon Friedrich
2022-10-22 12:50:14 +13:00
committed by GitHub
parent 31c4ce66f4
commit 19586ea46c
5 changed files with 90 additions and 23 deletions

View File

@@ -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<RelayInputMoverComponent, PlayerAttachedEvent>(OnRelayPlayerAttached);
SubscribeLocalEvent<RelayInputMoverComponent, PlayerDetachedEvent>(OnRelayPlayerDetached);
SubscribeLocalEvent<InputMoverComponent, PlayerAttachedEvent>(OnPlayerAttached);
SubscribeLocalEvent<InputMoverComponent, PlayerDetachedEvent>(OnPlayerDetached);
}
private void OnRelayPlayerAttached(EntityUid uid, RelayInputMoverComponent component, PlayerAttachedEvent args)
{
if (TryComp<InputMoverComponent>(component.RelayEntity, out var inputMover))
SetMoveInput(inputMover, MoveButtons.None);
}
private void OnRelayPlayerDetached(EntityUid uid, RelayInputMoverComponent component, PlayerDetachedEvent args)
{
if (TryComp<InputMoverComponent>(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);

View File

@@ -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<ShuttleComponent, List<(PilotComponent, InputMoverComponent, TransformComponent)>> _shuttlePilots = new();
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<RelayInputMoverComponent, PlayerAttachedEvent>(OnRelayPlayerAttached);
SubscribeLocalEvent<RelayInputMoverComponent, PlayerDetachedEvent>(OnRelayPlayerDetached);
SubscribeLocalEvent<InputMoverComponent, PlayerAttachedEvent>(OnPlayerAttached);
SubscribeLocalEvent<InputMoverComponent, PlayerDetachedEvent>(OnPlayerDetached);
}
private void OnRelayPlayerAttached(EntityUid uid, RelayInputMoverComponent component, PlayerAttachedEvent args)
{
if (TryComp<InputMoverComponent>(component.RelayEntity, out var inputMover))
SetMoveInput(inputMover, MoveButtons.None);
}
private void OnRelayPlayerDetached(EntityUid uid, RelayInputMoverComponent component, PlayerDetachedEvent args)
{
if (TryComp<InputMoverComponent>(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;

View File

@@ -1,3 +1,4 @@
using Content.Shared.Movement.Systems;
using Robust.Shared.GameStates;
using Robust.Shared.Timing;

View File

@@ -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,
}

View File

@@ -1,3 +1,4 @@
using Content.Shared.Movement.Systems;
using Robust.Shared.GameStates;
using Robust.Shared.Map;
using Robust.Shared.Timing;