AlertLevelDisplaySystem.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using Content.Server.Power.Components;
  2. using Content.Server.Station.Systems;
  3. using Content.Shared.AlertLevel;
  4. using Content.Shared.Power;
  5. namespace Content.Server.AlertLevel;
  6. public sealed class AlertLevelDisplaySystem : EntitySystem
  7. {
  8. [Dependency] private readonly StationSystem _stationSystem = default!;
  9. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  10. public override void Initialize()
  11. {
  12. SubscribeLocalEvent<AlertLevelChangedEvent>(OnAlertChanged);
  13. SubscribeLocalEvent<AlertLevelDisplayComponent, ComponentInit>(OnDisplayInit);
  14. SubscribeLocalEvent<AlertLevelDisplayComponent, PowerChangedEvent>(OnPowerChanged);
  15. }
  16. private void OnAlertChanged(AlertLevelChangedEvent args)
  17. {
  18. var query = EntityQueryEnumerator<AlertLevelDisplayComponent, AppearanceComponent>();
  19. while (query.MoveNext(out var uid, out _, out var appearance))
  20. {
  21. _appearance.SetData(uid, AlertLevelDisplay.CurrentLevel, args.AlertLevel, appearance);
  22. }
  23. }
  24. private void OnDisplayInit(EntityUid uid, AlertLevelDisplayComponent alertLevelDisplay, ComponentInit args)
  25. {
  26. if (TryComp(uid, out AppearanceComponent? appearance))
  27. {
  28. var stationUid = _stationSystem.GetOwningStation(uid);
  29. if (stationUid != null && TryComp(stationUid, out AlertLevelComponent? alert))
  30. {
  31. _appearance.SetData(uid, AlertLevelDisplay.CurrentLevel, alert.CurrentLevel, appearance);
  32. }
  33. }
  34. }
  35. private void OnPowerChanged(EntityUid uid, AlertLevelDisplayComponent alertLevelDisplay, ref PowerChangedEvent args)
  36. {
  37. if (!TryComp(uid, out AppearanceComponent? appearance))
  38. return;
  39. _appearance.SetData(uid, AlertLevelDisplay.Powered, args.Powered, appearance);
  40. }
  41. }