ArtifactHeatTriggerSystem.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Content.Server.Atmos.EntitySystems;
  2. using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components;
  3. using Content.Shared.Interaction;
  4. using Content.Shared.Temperature;
  5. using Content.Shared.Weapons.Melee.Events;
  6. namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems;
  7. public sealed class ArtifactHeatTriggerSystem : EntitySystem
  8. {
  9. [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
  10. [Dependency] private readonly ArtifactSystem _artifactSystem = default!;
  11. public override void Initialize()
  12. {
  13. base.Initialize();
  14. SubscribeLocalEvent<ArtifactHeatTriggerComponent, AttackedEvent>(OnAttacked);
  15. SubscribeLocalEvent<ArtifactHeatTriggerComponent, InteractUsingEvent>(OnUsing);
  16. }
  17. public override void Update(float frameTime)
  18. {
  19. base.Update(frameTime);
  20. List<Entity<ArtifactComponent>> toUpdate = new();
  21. var query = EntityQueryEnumerator<ArtifactHeatTriggerComponent, TransformComponent, ArtifactComponent>();
  22. while (query.MoveNext(out var uid, out var trigger, out var transform, out var artifact))
  23. {
  24. var environment = _atmosphereSystem.GetTileMixture((uid, transform));
  25. if (environment == null)
  26. continue;
  27. if (environment.Temperature < trigger.ActivationTemperature)
  28. continue;
  29. toUpdate.Add((uid, artifact));
  30. }
  31. foreach (var a in toUpdate)
  32. {
  33. _artifactSystem.TryActivateArtifact(a, null, a);
  34. }
  35. }
  36. private void OnAttacked(EntityUid uid, ArtifactHeatTriggerComponent component, AttackedEvent args)
  37. {
  38. if (!component.ActivateHotItems || !CheckHot(args.Used))
  39. return;
  40. _artifactSystem.TryActivateArtifact(uid, args.User);
  41. }
  42. private void OnUsing(EntityUid uid, ArtifactHeatTriggerComponent component, InteractUsingEvent args)
  43. {
  44. if (args.Handled)
  45. return;
  46. if (!component.ActivateHotItems || !CheckHot(args.Used))
  47. return;
  48. args.Handled = _artifactSystem.TryActivateArtifact(uid, args.User);
  49. }
  50. private bool CheckHot(EntityUid usedUid)
  51. {
  52. var hotEvent = new IsHotEvent();
  53. RaiseLocalEvent(usedUid, hotEvent);
  54. return hotEvent.IsHot;
  55. }
  56. }