using Content.Server.Power.Components; using Content.Shared.Weapons.Ranged.Components; namespace Content.Server.Weapon.Ranged.Systems; public sealed partial class GunSystem { protected override void InitializeBattery() { base.InitializeBattery(); // Hitscan SubscribeLocalEvent(OnBatteryStartup); SubscribeLocalEvent(OnBatteryChargeChange); // Projectile SubscribeLocalEvent(OnBatteryStartup); SubscribeLocalEvent(OnBatteryChargeChange); } private void OnBatteryStartup(EntityUid uid, BatteryAmmoProviderComponent component, ComponentStartup args) { UpdateShots(uid, component); } private void OnBatteryChargeChange(EntityUid uid, BatteryAmmoProviderComponent component, ChargeChangedEvent args) { UpdateShots(uid, component); } private void UpdateShots(EntityUid uid, BatteryAmmoProviderComponent component) { if (!TryComp(uid, out var battery)) return; UpdateShots(component, battery); } private void UpdateShots(BatteryAmmoProviderComponent component, BatteryComponent battery) { var shots = (int) (battery.CurrentCharge / component.FireCost); var maxShots = (int) (battery.MaxCharge / component.FireCost); if (component.Shots != shots || component.Capacity != maxShots) { Dirty(component); } component.Shots = shots; component.Capacity = maxShots; UpdateBatteryAppearance(component.Owner, component); } protected override void TakeCharge(EntityUid uid, BatteryAmmoProviderComponent component) { if (!TryComp(uid, out var battery)) return; battery.CurrentCharge -= component.FireCost; UpdateShots(component, battery); } }