Files
wwdpublic/Content.Shared/Movement/Systems/AutoOrientSystem.cs
metalgearsloth c66688f8c5 Add delay to AutoOrient (#33479)
It functions identically to how V1 of orientation worked and it's incredibly annoying.

(cherry picked from commit 11dbf50ed62040c832941f3c46fc159497eca525)
Signed-off-by: Spatison <137375981+Spatison@users.noreply.github.com>
2025-07-20 15:10:18 +10:00

52 lines
1.4 KiB
C#

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);
}
}
}
}