SlimPoweredLightSystem.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Content.Shared.Light.Components;
  2. using Content.Shared.Power;
  3. using Content.Shared.Power.EntitySystems;
  4. namespace Content.Shared.Light.EntitySystems;
  5. public sealed class SlimPoweredLightSystem : EntitySystem
  6. {
  7. [Dependency] private readonly SharedPowerReceiverSystem _receiver = default!;
  8. [Dependency] private readonly SharedPointLightSystem _lights = default!;
  9. private bool _setting;
  10. public override void Initialize()
  11. {
  12. base.Initialize();
  13. SubscribeLocalEvent<SlimPoweredLightComponent, AttemptPointLightToggleEvent>(OnLightAttempt);
  14. SubscribeLocalEvent<SlimPoweredLightComponent, PowerChangedEvent>(OnLightPowerChanged);
  15. }
  16. private void OnLightAttempt(Entity<SlimPoweredLightComponent> ent, ref AttemptPointLightToggleEvent args)
  17. {
  18. // Early-out to avoid having to trycomp stuff if we're the caller setting it
  19. if (_setting)
  20. return;
  21. if (args.Enabled && !_receiver.IsPowered(ent.Owner))
  22. args.Cancelled = true;
  23. }
  24. private void OnLightPowerChanged(Entity<SlimPoweredLightComponent> ent, ref PowerChangedEvent args)
  25. {
  26. // Early out if we don't need to trycomp.
  27. if (args.Powered)
  28. {
  29. if (!ent.Comp.Enabled)
  30. return;
  31. }
  32. else
  33. {
  34. if (!ent.Comp.Enabled)
  35. return;
  36. }
  37. if (!_lights.TryGetLight(ent.Owner, out var light))
  38. return;
  39. var enabled = ent.Comp.Enabled && args.Powered;
  40. _setting = true;
  41. _lights.SetEnabled(ent.Owner, enabled, light);
  42. _setting = false;
  43. }
  44. public void SetEnabled(Entity<SlimPoweredLightComponent?> entity, bool enabled)
  45. {
  46. if (!Resolve(entity.Owner, ref entity.Comp, false))
  47. return;
  48. if (entity.Comp.Enabled == enabled)
  49. return;
  50. entity.Comp.Enabled = enabled;
  51. Dirty(entity);
  52. _lights.SetEnabled(entity.Owner, enabled);
  53. }
  54. }