using Content.Shared.PowerCell; using Content.Shared.PowerCell.Components; using JetBrains.Annotations; using Robust.Client.GameObjects; namespace Content.Client.PowerCell; [UsedImplicitly] public sealed class PowerCellSystem : SharedPowerCellSystem { [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SpriteSystem _sprite = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnPowerCellVisualsChange); } /// public override bool HasActivatableCharge(EntityUid uid, PowerCellDrawComponent? battery = null, PowerCellSlotComponent? cell = null, EntityUid? user = null) { if (!Resolve(uid, ref battery, ref cell, false)) return true; return battery.CanUse; } /// public override bool HasDrawCharge( EntityUid uid, PowerCellDrawComponent? battery = null, PowerCellSlotComponent? cell = null, EntityUid? user = null) { if (!Resolve(uid, ref battery, ref cell, false)) return true; return battery.CanDraw; } private void OnPowerCellVisualsChange(EntityUid uid, PowerCellVisualsComponent component, ref AppearanceChangeEvent args) { if (args.Sprite == null) return; if (!_sprite.LayerExists((uid, args.Sprite), PowerCellVisualLayers.Unshaded)) return; if (!_appearance.TryGetData(uid, PowerCellVisuals.ChargeLevel, out var level, args.Component)) level = 0; var positiveCharge = level > 0; _sprite.LayerSetVisible((uid, args.Sprite), PowerCellVisualLayers.Unshaded, positiveCharge); if (positiveCharge) _sprite.LayerSetRsiState((uid, args.Sprite), PowerCellVisualLayers.Unshaded, $"o{level}"); } private enum PowerCellVisualLayers : byte { Base, Unshaded, } }