ClockSystem.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Content.Server.GameTicking.Events;
  2. using Content.Shared.Clock;
  3. using Content.Shared.Destructible;
  4. using Robust.Server.GameStates;
  5. using Robust.Shared.Random;
  6. namespace Content.Server.Clock;
  7. public sealed class ClockSystem : SharedClockSystem
  8. {
  9. [Dependency] private readonly PvsOverrideSystem _pvsOverride = default!;
  10. [Dependency] private readonly IRobustRandom _robustRandom = default!;
  11. /// <inheritdoc/>
  12. public override void Initialize()
  13. {
  14. base.Initialize();
  15. SubscribeLocalEvent<RoundStartingEvent>(OnRoundStart);
  16. SubscribeLocalEvent<GlobalTimeManagerComponent, MapInitEvent>(OnMapInit);
  17. SubscribeLocalEvent<ClockComponent, BreakageEventArgs>(OnBreak);
  18. }
  19. private void OnRoundStart(RoundStartingEvent ev)
  20. {
  21. var manager = Spawn();
  22. AddComp<GlobalTimeManagerComponent>(manager);
  23. }
  24. private void OnMapInit(Entity<GlobalTimeManagerComponent> ent, ref MapInitEvent args)
  25. {
  26. ent.Comp.TimeOffset = TimeSpan.FromHours(_robustRandom.NextFloat(0, 24));
  27. _pvsOverride.AddGlobalOverride(ent);
  28. Dirty(ent);
  29. }
  30. private void OnBreak(Entity<ClockComponent> ent, ref BreakageEventArgs args)
  31. {
  32. ent.Comp.StuckTime = GetClockTime(ent);
  33. Dirty(ent, ent.Comp);
  34. }
  35. }