using Content.Shared.Item.ItemToggle; using Content.Shared.Item.ItemToggle.Components; using Content.Shared.PowerCell.Components; namespace Content.Shared.PowerCell; /// /// Handles events to integrate PowerCellDraw with ItemToggle /// public sealed class ToggleCellDrawSystem : EntitySystem { [Dependency] private readonly ItemToggleSystem _toggle = default!; [Dependency] private readonly SharedPowerCellSystem _cell = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnActivateAttempt); SubscribeLocalEvent(OnToggled); SubscribeLocalEvent(OnEmpty); } private void OnMapInit(Entity ent, ref MapInitEvent args) { _cell.SetDrawEnabled(ent.Owner, _toggle.IsActivated(ent.Owner)); } private void OnActivateAttempt(Entity ent, ref ItemToggleActivateAttemptEvent args) { if (!_cell.HasDrawCharge(ent, user: args.User) || !_cell.HasActivatableCharge(ent, user: args.User)) args.Cancelled = true; } private void OnToggled(Entity ent, ref ItemToggledEvent args) { var uid = ent.Owner; var draw = Comp(uid); _cell.QueueUpdate((uid, draw)); _cell.SetDrawEnabled((uid, draw), args.Activated); } private void OnEmpty(Entity ent, ref PowerCellSlotEmptyEvent args) { _toggle.TryDeactivate(ent.Owner); } }