ToggleCellDrawSystem.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Content.Shared.Item.ItemToggle;
  2. using Content.Shared.Item.ItemToggle.Components;
  3. using Content.Shared.PowerCell.Components;
  4. namespace Content.Shared.PowerCell;
  5. /// <summary>
  6. /// Handles events to integrate PowerCellDraw with ItemToggle
  7. /// </summary>
  8. public sealed class ToggleCellDrawSystem : EntitySystem
  9. {
  10. [Dependency] private readonly ItemToggleSystem _toggle = default!;
  11. [Dependency] private readonly SharedPowerCellSystem _cell = default!;
  12. public override void Initialize()
  13. {
  14. base.Initialize();
  15. SubscribeLocalEvent<ToggleCellDrawComponent, MapInitEvent>(OnMapInit);
  16. SubscribeLocalEvent<ToggleCellDrawComponent, ItemToggleActivateAttemptEvent>(OnActivateAttempt);
  17. SubscribeLocalEvent<ToggleCellDrawComponent, ItemToggledEvent>(OnToggled);
  18. SubscribeLocalEvent<ToggleCellDrawComponent, PowerCellSlotEmptyEvent>(OnEmpty);
  19. }
  20. private void OnMapInit(Entity<ToggleCellDrawComponent> ent, ref MapInitEvent args)
  21. {
  22. _cell.SetDrawEnabled(ent.Owner, _toggle.IsActivated(ent.Owner));
  23. }
  24. private void OnActivateAttempt(Entity<ToggleCellDrawComponent> ent, ref ItemToggleActivateAttemptEvent args)
  25. {
  26. if (!_cell.HasDrawCharge(ent, user: args.User)
  27. || !_cell.HasActivatableCharge(ent, user: args.User))
  28. args.Cancelled = true;
  29. }
  30. private void OnToggled(Entity<ToggleCellDrawComponent> ent, ref ItemToggledEvent args)
  31. {
  32. var uid = ent.Owner;
  33. var draw = Comp<PowerCellDrawComponent>(uid);
  34. _cell.QueueUpdate((uid, draw));
  35. _cell.SetDrawEnabled((uid, draw), args.Activated);
  36. }
  37. private void OnEmpty(Entity<ToggleCellDrawComponent> ent, ref PowerCellSlotEmptyEvent args)
  38. {
  39. _toggle.TryDeactivate(ent.Owner);
  40. }
  41. }