ArtifactPressureTriggerSystem.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using Content.Server.Atmos.EntitySystems;
  2. using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components;
  3. namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems;
  4. /// <summary>
  5. /// This handles activation upon certain pressure thresholds.
  6. /// </summary>
  7. public sealed class ArtifactPressureTriggerSystem : EntitySystem
  8. {
  9. [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
  10. [Dependency] private readonly ArtifactSystem _artifactSystem = default!;
  11. public override void Update(float frameTime)
  12. {
  13. base.Update(frameTime);
  14. List<Entity<ArtifactComponent>> toUpdate = new();
  15. var query = EntityQueryEnumerator<ArtifactPressureTriggerComponent, ArtifactComponent, TransformComponent>();
  16. while (query.MoveNext(out var uid, out var trigger, out var artifact, out var transform))
  17. {
  18. var environment = _atmosphereSystem.GetTileMixture((uid, transform));
  19. if (environment == null)
  20. continue;
  21. var pressure = environment.Pressure;
  22. if (pressure >= trigger.MaxPressureThreshold || pressure <= trigger.MinPressureThreshold)
  23. toUpdate.Add((uid, artifact));
  24. }
  25. foreach (var a in toUpdate)
  26. {
  27. _artifactSystem.TryActivateArtifact(a, null, a);
  28. }
  29. }
  30. }