Optimise mob moverment a little bit (#12136)

This commit is contained in:
metalgearsloth
2022-10-23 08:50:25 +11:00
committed by GitHub
parent 016900b18a
commit 15029b8410
2 changed files with 18 additions and 4 deletions

View File

@@ -2,7 +2,6 @@ using Content.Shared.CCVar;
using Content.Shared.Input; using Content.Shared.Input;
using Content.Shared.Movement.Components; using Content.Shared.Movement.Components;
using Content.Shared.Movement.Events; using Content.Shared.Movement.Events;
using Robust.Shared.Configuration;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Shared.Input; using Robust.Shared.Input;
using Robust.Shared.Input.Binding; using Robust.Shared.Input.Binding;
@@ -52,6 +51,7 @@ namespace Content.Shared.Movement.Systems
SubscribeLocalEvent<InputMoverComponent, EntParentChangedMessage>(OnInputParentChange); SubscribeLocalEvent<InputMoverComponent, EntParentChangedMessage>(OnInputParentChange);
_configManager.OnValueChanged(CCVars.CameraRotationLocked, SetCameraRotationLocked, true); _configManager.OnValueChanged(CCVars.CameraRotationLocked, SetCameraRotationLocked, true);
_configManager.OnValueChanged(CCVars.GameDiagonalMovement, SetDiagonalMovement, true);
} }
private void SetCameraRotationLocked(bool obj) private void SetCameraRotationLocked(bool obj)
@@ -97,9 +97,12 @@ namespace Content.Shared.Movement.Systems
{ {
CommandBinds.Unregister<SharedMoverController>(); CommandBinds.Unregister<SharedMoverController>();
_configManager.UnsubValueChanged(CCVars.CameraRotationLocked, SetCameraRotationLocked); _configManager.UnsubValueChanged(CCVars.CameraRotationLocked, SetCameraRotationLocked);
_configManager.UnsubValueChanged(CCVars.GameDiagonalMovement, SetDiagonalMovement);
} }
public bool DiagonalMovementEnabled => _configManager.GetCVar(CCVars.GameDiagonalMovement); public bool DiagonalMovementEnabled { get; private set; }
private void SetDiagonalMovement(bool value) => DiagonalMovementEnabled = value;
protected virtual void HandleShuttleInput(EntityUid uid, ShuttleButtons button, ushort subTick, bool state) {} protected virtual void HandleShuttleInput(EntityUid uid, ShuttleButtons button, ushort subTick, bool state) {}
@@ -121,6 +124,16 @@ namespace Content.Shared.Movement.Systems
Dirty(mover); Dirty(mover);
} }
public Angle GetParentGridAngle(InputMoverComponent mover, EntityQuery<TransformComponent> xformQuery)
{
var rotation = mover.RelativeRotation;
if (xformQuery.TryGetComponent(mover.RelativeEntity, out var relativeXform))
return (_transform.GetWorldRotation(relativeXform, xformQuery) + rotation);
return rotation;
}
public Angle GetParentGridAngle(InputMoverComponent mover) public Angle GetParentGridAngle(InputMoverComponent mover)
{ {
var rotation = mover.RelativeRotation; var rotation = mover.RelativeRotation;

View File

@@ -36,8 +36,9 @@ namespace Content.Shared.Movement.Systems
[Dependency] private readonly SharedContainerSystem _container = default!; [Dependency] private readonly SharedContainerSystem _container = default!;
[Dependency] private readonly SharedGravitySystem _gravity = default!; [Dependency] private readonly SharedGravitySystem _gravity = default!;
[Dependency] private readonly SharedMobStateSystem _mobState = default!; [Dependency] private readonly SharedMobStateSystem _mobState = default!;
[Dependency] private readonly TagSystem _tags = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly TagSystem _tags = default!;
private const float StepSoundMoveDistanceRunning = 2; private const float StepSoundMoveDistanceRunning = 2;
private const float StepSoundMoveDistanceWalking = 1.5f; private const float StepSoundMoveDistanceWalking = 1.5f;
@@ -231,7 +232,7 @@ namespace Content.Shared.Movement.Systems
var total = walkDir * walkSpeed + sprintDir * sprintSpeed; var total = walkDir * walkSpeed + sprintDir * sprintSpeed;
var parentRotation = GetParentGridAngle(mover); var parentRotation = GetParentGridAngle(mover, xformQuery);
var worldTotal = _relativeMovement ? parentRotation.RotateVec(total) : total; var worldTotal = _relativeMovement ? parentRotation.RotateVec(total) : total;
DebugTools.Assert(MathHelper.CloseToPercent(total.Length, worldTotal.Length)); DebugTools.Assert(MathHelper.CloseToPercent(total.Length, worldTotal.Length));