ArtifactTimerTriggerSystem.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Components;
  2. using Robust.Shared.Timing;
  3. namespace Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems;
  4. public sealed class ArtifactTimerTriggerSystem : EntitySystem
  5. {
  6. [Dependency] private readonly IGameTiming _time = default!;
  7. [Dependency] private readonly ArtifactSystem _artifactSystem = default!;
  8. public override void Initialize()
  9. {
  10. base.Initialize();
  11. SubscribeLocalEvent<ArtifactTimerTriggerComponent, ComponentStartup>(OnStartup);
  12. }
  13. private void OnStartup(EntityUid uid, ArtifactTimerTriggerComponent component, ComponentStartup args)
  14. {
  15. component.LastActivation = _time.CurTime;
  16. }
  17. public override void Update(float frameTime)
  18. {
  19. base.Update(frameTime);
  20. List<Entity<ArtifactComponent>> toUpdate = new();
  21. var query = EntityQueryEnumerator<ArtifactTimerTriggerComponent, ArtifactComponent>();
  22. while (query.MoveNext(out var uid, out var trigger, out var artifact))
  23. {
  24. var timeDif = _time.CurTime - trigger.LastActivation;
  25. if (timeDif <= trigger.ActivationRate)
  26. continue;
  27. toUpdate.Add((uid, artifact));
  28. trigger.LastActivation = _time.CurTime;
  29. }
  30. foreach (var a in toUpdate)
  31. {
  32. _artifactSystem.TryActivateArtifact(a, null, a);
  33. }
  34. }
  35. }