Add delay to AutoOrient (#33479)
It functions identically to how V1 of orientation worked and it's incredibly annoying.
This commit is contained in:
@@ -4,6 +4,12 @@ namespace Content.Shared.CCVar;
|
|||||||
|
|
||||||
public sealed partial class CCVars
|
public sealed partial class CCVars
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Delay for auto-orientation. Used for people arriving via arrivals.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly CVarDef<double> AutoOrientDelay =
|
||||||
|
CVarDef.Create("shuttle.auto_orient_delay", 2.0, CVar.SERVER | CVar.REPLICATED);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If true then the camera will match the grid / map and is unchangeable.
|
/// If true then the camera will match the grid / map and is unchangeable.
|
||||||
/// - When traversing grids it will snap to 0 degrees rotation.
|
/// - When traversing grids it will snap to 0 degrees rotation.
|
||||||
|
|||||||
@@ -5,8 +5,9 @@ namespace Content.Shared.Movement.Components;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Automatically rotates eye upon grid traversals.
|
/// Automatically rotates eye upon grid traversals.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[RegisterComponent, NetworkedComponent]
|
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause]
|
||||||
public sealed partial class AutoOrientComponent : Component
|
public sealed partial class AutoOrientComponent : Component
|
||||||
{
|
{
|
||||||
|
[DataField, AutoNetworkedField, AutoPausedField]
|
||||||
|
public TimeSpan? NextChange;
|
||||||
}
|
}
|
||||||
|
|||||||
51
Content.Shared/Movement/Systems/AutoOrientSystem.cs
Normal file
51
Content.Shared/Movement/Systems/AutoOrientSystem.cs
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
using Content.Shared.CCVar;
|
||||||
|
using Content.Shared.Movement.Components;
|
||||||
|
using Robust.Shared.Configuration;
|
||||||
|
using Robust.Shared.Timing;
|
||||||
|
|
||||||
|
namespace Content.Shared.Movement.Systems;
|
||||||
|
|
||||||
|
public sealed class AutoOrientSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IConfigurationManager _cfgManager = default!;
|
||||||
|
[Dependency] private readonly IGameTiming _timing = default!;
|
||||||
|
[Dependency] private readonly SharedMoverController _mover = default!;
|
||||||
|
|
||||||
|
private TimeSpan _delay = TimeSpan.Zero;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<AutoOrientComponent, EntParentChangedMessage>(OnEntParentChanged);
|
||||||
|
|
||||||
|
Subs.CVar(_cfgManager, CCVars.AutoOrientDelay, OnAutoOrient, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnAutoOrient(double obj)
|
||||||
|
{
|
||||||
|
_delay = TimeSpan.FromSeconds(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnEntParentChanged(Entity<AutoOrientComponent> ent, ref EntParentChangedMessage args)
|
||||||
|
{
|
||||||
|
ent.Comp.NextChange = _timing.CurTime + _delay;
|
||||||
|
Dirty(ent);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Update(float frameTime)
|
||||||
|
{
|
||||||
|
base.Update(frameTime);
|
||||||
|
|
||||||
|
var query = EntityQueryEnumerator<AutoOrientComponent>();
|
||||||
|
|
||||||
|
while (query.MoveNext(out var uid, out var comp))
|
||||||
|
{
|
||||||
|
if (comp.NextChange <= _timing.CurTime)
|
||||||
|
{
|
||||||
|
comp.NextChange = null;
|
||||||
|
Dirty(uid, comp);
|
||||||
|
_mover.ResetCamera(uid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -57,8 +57,6 @@ namespace Content.Shared.Movement.Systems
|
|||||||
SubscribeLocalEvent<InputMoverComponent, ComponentHandleState>(OnMoverHandleState);
|
SubscribeLocalEvent<InputMoverComponent, ComponentHandleState>(OnMoverHandleState);
|
||||||
SubscribeLocalEvent<InputMoverComponent, EntParentChangedMessage>(OnInputParentChange);
|
SubscribeLocalEvent<InputMoverComponent, EntParentChangedMessage>(OnInputParentChange);
|
||||||
|
|
||||||
SubscribeLocalEvent<AutoOrientComponent, EntParentChangedMessage>(OnAutoParentChange);
|
|
||||||
|
|
||||||
SubscribeLocalEvent<FollowedComponent, EntParentChangedMessage>(OnFollowedParentChange);
|
SubscribeLocalEvent<FollowedComponent, EntParentChangedMessage>(OnFollowedParentChange);
|
||||||
|
|
||||||
Subs.CVar(_configManager, CCVars.CameraRotationLocked, obj => CameraRotationLocked = obj, true);
|
Subs.CVar(_configManager, CCVars.CameraRotationLocked, obj => CameraRotationLocked = obj, true);
|
||||||
@@ -146,11 +144,6 @@ namespace Content.Shared.Movement.Systems
|
|||||||
|
|
||||||
protected virtual void HandleShuttleInput(EntityUid uid, ShuttleButtons button, ushort subTick, bool state) {}
|
protected virtual void HandleShuttleInput(EntityUid uid, ShuttleButtons button, ushort subTick, bool state) {}
|
||||||
|
|
||||||
private void OnAutoParentChange(Entity<AutoOrientComponent> entity, ref EntParentChangedMessage args)
|
|
||||||
{
|
|
||||||
ResetCamera(entity.Owner);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RotateCamera(EntityUid uid, Angle angle)
|
public void RotateCamera(EntityUid uid, Angle angle)
|
||||||
{
|
{
|
||||||
if (CameraRotationLocked || !MoverQuery.TryGetComponent(uid, out var mover))
|
if (CameraRotationLocked || !MoverQuery.TryGetComponent(uid, out var mover))
|
||||||
|
|||||||
Reference in New Issue
Block a user