BufferingSystem.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System.Numerics;
  2. using Content.Server.Administration.Components;
  3. using Content.Shared.Administration;
  4. using Robust.Shared.Map;
  5. using Robust.Shared.Random;
  6. namespace Content.Server.Administration.Systems;
  7. public sealed class BufferingSystem : EntitySystem
  8. {
  9. [Dependency] private readonly IRobustRandom _random = default!;
  10. public override void Update(float frameTime)
  11. {
  12. var query = EntityQueryEnumerator<BufferingComponent>();
  13. while (query.MoveNext(out var uid, out var buffering))
  14. {
  15. if (buffering.BufferingIcon is not null)
  16. {
  17. buffering.BufferingTimer -= frameTime;
  18. if (!(buffering.BufferingTimer <= 0.0f))
  19. continue;
  20. Del(buffering.BufferingIcon.Value);
  21. RemComp<AdminFrozenComponent>(uid);
  22. buffering.TimeTilNextBuffer = _random.NextFloat(buffering.MinimumTimeTilNextBuffer, buffering.MaximumTimeTilNextBuffer);
  23. buffering.BufferingIcon = null;
  24. }
  25. else
  26. {
  27. buffering.TimeTilNextBuffer -= frameTime;
  28. if (!(buffering.TimeTilNextBuffer <= 0.0f))
  29. continue;
  30. buffering.BufferingTimer = _random.NextFloat(buffering.MinimumBufferTime, buffering.MaximumBufferTime);
  31. buffering.BufferingIcon = Spawn("BufferingIcon", new EntityCoordinates(uid, Vector2.Zero));
  32. EnsureComp<AdminFrozenComponent>(uid);
  33. }
  34. }
  35. }
  36. }