6
2026-01-24 12:49:55 +03:00

41 lines
1.5 KiB
C#

using Content.Server.Construction;
using Content.Server.Power.Components;
using JetBrains.Annotations;
using Content.Server._NF.Power.Components;
using Content.Server.Power.EntitySystems;
namespace Content.Server._NF.Power.EntitySystems;
[UsedImplicitly]
public sealed class UpgradeBatterySystem : EntitySystem
{
[Dependency] private readonly BatterySystem _batterySystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<UpgradeBatteryComponent, RefreshPartsEvent>(OnRefreshParts);
SubscribeLocalEvent<UpgradeBatteryComponent, UpgradeExamineEvent>(OnUpgradeExamine);
}
public void OnRefreshParts(EntityUid uid, UpgradeBatteryComponent component, RefreshPartsEvent args)
{
var powerCellRating = args.PartRatings[component.MachinePartPowerCapacity];
if (TryComp<BatteryComponent>(uid, out var batteryComp))
{
_batterySystem.SetMaxCharge(uid, MathF.Pow(component.MaxChargeMultiplier, powerCellRating - 1) * component.BaseMaxCharge, batteryComp);
}
}
private void OnUpgradeExamine(EntityUid uid, UpgradeBatteryComponent component, UpgradeExamineEvent args)
{
// UpgradeBatteryComponent.MaxChargeMultiplier is not the actual multiplier, so we have to do this.
if (TryComp<BatteryComponent>(uid, out var batteryComp))
{
args.AddPercentageUpgrade("upgrade-max-charge", batteryComp.MaxCharge / component.BaseMaxCharge);
}
}
}