using Content.Shared.Containers.ItemSlots; using Content.Shared.PowerCell.Components; using Content.Shared.Rejuvenate; using Robust.Shared.Containers; namespace Content.Shared.PowerCell; public abstract class SharedPowerCellSystem : EntitySystem { [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnRejuventate); SubscribeLocalEvent(OnCellInserted); SubscribeLocalEvent(OnCellRemoved); SubscribeLocalEvent(OnCellInsertAttempt); } private void OnRejuventate(EntityUid uid, PowerCellSlotComponent component, RejuvenateEvent args) { if (!_itemSlots.TryGetSlot(uid, component.CellSlotId, out var itemSlot) || !itemSlot.Item.HasValue) return; // charge entity batteries and remove booby traps. RaiseLocalEvent(itemSlot.Item.Value, args); } private void OnCellInsertAttempt(EntityUid uid, PowerCellSlotComponent component, ContainerIsInsertingAttemptEvent args) { if (!component.Initialized) return; if (args.Container.ID != component.CellSlotId) return; if (!HasComp(args.EntityUid)) { args.Cancel(); } } private void OnCellInserted(EntityUid uid, PowerCellSlotComponent component, EntInsertedIntoContainerMessage args) { if (!component.Initialized) return; if (args.Container.ID != component.CellSlotId) return; _appearance.SetData(uid, PowerCellSlotVisuals.Enabled, true); RaiseLocalEvent(uid, new PowerCellChangedEvent(false), false); } protected virtual void OnCellRemoved(EntityUid uid, PowerCellSlotComponent component, EntRemovedFromContainerMessage args) { if (args.Container.ID != component.CellSlotId) return; _appearance.SetData(uid, PowerCellSlotVisuals.Enabled, false); RaiseLocalEvent(uid, new PowerCellChangedEvent(true), false); } }