ArtifactElectricityTriggerSystem.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using Content.Server.Power.Components;
  2. using Content.Server.Power.Events;
  3. using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components;
  4. using Content.Shared.Interaction;
  5. using Content.Shared.Tools.Components;
  6. using Content.Shared.Tools.Systems;
  7. namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems;
  8. public sealed class ArtifactElectricityTriggerSystem : EntitySystem
  9. {
  10. [Dependency] private readonly ArtifactSystem _artifactSystem = default!;
  11. [Dependency] private readonly SharedToolSystem _toolSystem = default!;
  12. public override void Initialize()
  13. {
  14. base.Initialize();
  15. SubscribeLocalEvent<ArtifactElectricityTriggerComponent, InteractUsingEvent>(OnInteractUsing);
  16. SubscribeLocalEvent<ArtifactElectricityTriggerComponent, PowerPulseEvent>(OnPowerPulse);
  17. }
  18. public override void Update(float frameTime)
  19. {
  20. base.Update(frameTime);
  21. List<Entity<ArtifactComponent>> toUpdate = new();
  22. var query = EntityQueryEnumerator<ArtifactElectricityTriggerComponent, PowerConsumerComponent, ArtifactComponent>();
  23. while (query.MoveNext(out var uid, out var trigger, out var power, out var artifact))
  24. {
  25. if (power.ReceivedPower <= trigger.MinPower)
  26. continue;
  27. toUpdate.Add((uid, artifact));
  28. }
  29. foreach (var a in toUpdate)
  30. {
  31. _artifactSystem.TryActivateArtifact(a, null, a);
  32. }
  33. }
  34. private void OnInteractUsing(EntityUid uid, ArtifactElectricityTriggerComponent component, InteractUsingEvent args)
  35. {
  36. if (args.Handled)
  37. return;
  38. if (!_toolSystem.HasQuality(args.Used, SharedToolSystem.PulseQuality))
  39. return;
  40. args.Handled = _artifactSystem.TryActivateArtifact(uid, args.User);
  41. }
  42. private void OnPowerPulse(EntityUid uid, ArtifactElectricityTriggerComponent component, PowerPulseEvent args)
  43. {
  44. _artifactSystem.TryActivateArtifact(uid, args.User);
  45. }
  46. }