AutoOrientSystem.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using Content.Shared.CCVar;
  2. using Content.Shared.Movement.Components;
  3. using Robust.Shared.Configuration;
  4. using Robust.Shared.Timing;
  5. namespace Content.Shared.Movement.Systems;
  6. public sealed class AutoOrientSystem : EntitySystem
  7. {
  8. [Dependency] private readonly IConfigurationManager _cfgManager = default!;
  9. [Dependency] private readonly IGameTiming _timing = default!;
  10. [Dependency] private readonly SharedMoverController _mover = default!;
  11. private TimeSpan _delay = TimeSpan.Zero;
  12. public override void Initialize()
  13. {
  14. base.Initialize();
  15. SubscribeLocalEvent<AutoOrientComponent, EntParentChangedMessage>(OnEntParentChanged);
  16. Subs.CVar(_cfgManager, CCVars.AutoOrientDelay, OnAutoOrient, true);
  17. }
  18. private void OnAutoOrient(double obj)
  19. {
  20. _delay = TimeSpan.FromSeconds(obj);
  21. }
  22. private void OnEntParentChanged(Entity<AutoOrientComponent> ent, ref EntParentChangedMessage args)
  23. {
  24. ent.Comp.NextChange = _timing.CurTime + _delay;
  25. Dirty(ent);
  26. }
  27. public override void Update(float frameTime)
  28. {
  29. base.Update(frameTime);
  30. var query = EntityQueryEnumerator<AutoOrientComponent>();
  31. while (query.MoveNext(out var uid, out var comp))
  32. {
  33. if (comp.NextChange <= _timing.CurTime)
  34. {
  35. comp.NextChange = null;
  36. Dirty(uid, comp);
  37. _mover.ResetCamera(uid);
  38. }
  39. }
  40. }
  41. }