SolutionPurgeSystem.cs 1.1 KB

1234567891011121314151617181920212223242526272829
  1. using Content.Server.Chemistry.Components;
  2. using Content.Shared.Chemistry.EntitySystems;
  3. using Content.Shared.Chemistry.Components.SolutionManager;
  4. using Robust.Shared.Timing;
  5. namespace Content.Server.Chemistry.EntitySystems;
  6. public sealed class SolutionPurgeSystem : EntitySystem
  7. {
  8. [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!;
  9. [Dependency] private readonly IGameTiming _timing = default!;
  10. public override void Update(float frameTime)
  11. {
  12. base.Update(frameTime);
  13. var query = EntityQueryEnumerator<SolutionPurgeComponent, SolutionContainerManagerComponent>();
  14. while (query.MoveNext(out var uid, out var purge, out var manager))
  15. {
  16. if (_timing.CurTime < purge.NextPurgeTime)
  17. continue;
  18. // timer ignores if it's empty, it's just a fixed cycle
  19. purge.NextPurgeTime += purge.Duration;
  20. if (_solutionContainer.TryGetSolution((uid, manager), purge.Solution, out var solution))
  21. _solutionContainer.SplitSolutionWithout(solution.Value, purge.Quantity, purge.Preserve.ToArray());
  22. }
  23. }
  24. }