ArtifactDeathTriggerSystem.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components;
  2. using Content.Shared.Mobs;
  3. namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems;
  4. public sealed class ArtifactDeathTriggerSystem : EntitySystem
  5. {
  6. [Dependency] private readonly ArtifactSystem _artifact = default!;
  7. /// <inheritdoc/>
  8. public override void Initialize()
  9. {
  10. SubscribeLocalEvent<MobStateChangedEvent>(OnMobStateChanged);
  11. }
  12. private void OnMobStateChanged(MobStateChangedEvent ev)
  13. {
  14. if (ev.NewMobState != MobState.Dead)
  15. return;
  16. var deathXform = Transform(ev.Target);
  17. var toActivate = new List<Entity<ArtifactDeathTriggerComponent>>();
  18. var query = EntityQueryEnumerator<ArtifactDeathTriggerComponent, TransformComponent>();
  19. while (query.MoveNext(out var uid, out var trigger, out var xform))
  20. {
  21. if (!deathXform.Coordinates.TryDistance(EntityManager, xform.Coordinates, out var distance))
  22. continue;
  23. if (distance > trigger.Range)
  24. continue;
  25. toActivate.Add((uid, trigger));
  26. }
  27. foreach (var a in toActivate)
  28. {
  29. _artifact.TryActivateArtifact(a);
  30. }
  31. }
  32. }