Fix battery charging stopping just short of being full (#34028)

This commit is contained in:
Errant
2025-01-10 07:54:55 +01:00
committed by GitHub
parent b42a01580c
commit 0b1ed3ec7e
5 changed files with 8 additions and 20 deletions

View File

@@ -153,7 +153,7 @@ public sealed class EmergencyLightSystem : SharedEmergencyLightSystem
else else
{ {
_battery.SetCharge(entity.Owner, battery.CurrentCharge + entity.Comp.ChargingWattage * frameTime * entity.Comp.ChargingEfficiency, battery); _battery.SetCharge(entity.Owner, battery.CurrentCharge + entity.Comp.ChargingWattage * frameTime * entity.Comp.ChargingEfficiency, battery);
if (battery.IsFullyCharged) if (_battery.IsFull(entity, battery))
{ {
if (TryComp<ApcPowerReceiverComponent>(entity.Owner, out var receiver)) if (TryComp<ApcPowerReceiverComponent>(entity.Owner, out var receiver))
{ {

View File

@@ -106,6 +106,6 @@ public sealed class BatteryDrainerSystem : SharedBatteryDrainerSystem
_popup.PopupEntity(Loc.GetString("battery-drainer-success", ("battery", target)), uid, uid); _popup.PopupEntity(Loc.GetString("battery-drainer-success", ("battery", target)), uid, uid);
// repeat the doafter until battery is full // repeat the doafter until battery is full
return !battery.IsFullyCharged; return !_battery.IsFull(ent, battery);
} }
} }

View File

@@ -24,12 +24,6 @@ namespace Content.Server.Power.Components
[DataField("startingCharge")] [DataField("startingCharge")]
public float CurrentCharge; public float CurrentCharge;
/// <summary>
/// True if the battery is fully charged.
/// </summary>
[ViewVariables]
public bool IsFullyCharged => MathHelper.CloseToPercent(CurrentCharge, MaxCharge);
/// <summary> /// <summary>
/// The price per one joule. Default is 1 credit for 10kJ. /// The price per one joule. Default is 1 credit for 10kJ.
/// </summary> /// </summary>

View File

@@ -87,8 +87,8 @@ namespace Content.Server.Power.EntitySystems
var query = EntityQueryEnumerator<BatterySelfRechargerComponent, BatteryComponent>(); var query = EntityQueryEnumerator<BatterySelfRechargerComponent, BatteryComponent>();
while (query.MoveNext(out var uid, out var comp, out var batt)) while (query.MoveNext(out var uid, out var comp, out var batt))
{ {
if (!comp.AutoRecharge) continue; if (!comp.AutoRecharge || IsFull(uid, batt))
if (batt.IsFullyCharged) continue; continue;
if (comp.AutoRechargePause) if (comp.AutoRechargePause)
{ {
@@ -212,14 +212,14 @@ namespace Content.Server.Power.EntitySystems
} }
/// <summary> /// <summary>
/// Returns whether the battery is at least 99% charged, basically full. /// Returns whether the battery is full.
/// </summary> /// </summary>
public bool IsFull(EntityUid uid, BatteryComponent? battery = null) public bool IsFull(EntityUid uid, BatteryComponent? battery = null)
{ {
if (!Resolve(uid, ref battery)) if (!Resolve(uid, ref battery))
return false; return false;
return battery.CurrentCharge / battery.MaxCharge >= 0.99f; return battery.CurrentCharge >= battery.MaxCharge;
} }
} }
} }

View File

@@ -223,10 +223,10 @@ internal sealed class ChargerSystem : EntitySystem
if (container.ContainedEntities.Count == 0) if (container.ContainedEntities.Count == 0)
return CellChargerStatus.Empty; return CellChargerStatus.Empty;
if (!SearchForBattery(container.ContainedEntities[0], out _, out var heldBattery)) if (!SearchForBattery(container.ContainedEntities[0], out var heldEnt, out var heldBattery))
return CellChargerStatus.Off; return CellChargerStatus.Off;
if (Math.Abs(heldBattery.MaxCharge - heldBattery.CurrentCharge) < 0.01) if (_battery.IsFull(heldEnt.Value, heldBattery))
return CellChargerStatus.Charged; return CellChargerStatus.Charged;
return CellChargerStatus.Charging; return CellChargerStatus.Charging;
@@ -247,12 +247,6 @@ internal sealed class ChargerSystem : EntitySystem
return; return;
_battery.SetCharge(batteryUid.Value, heldBattery.CurrentCharge + component.ChargeRate * frameTime, heldBattery); _battery.SetCharge(batteryUid.Value, heldBattery.CurrentCharge + component.ChargeRate * frameTime, heldBattery);
// Just so the sprite won't be set to 99.99999% visibility
if (heldBattery.MaxCharge - heldBattery.CurrentCharge < 0.01)
{
_battery.SetCharge(batteryUid.Value, heldBattery.MaxCharge, heldBattery);
}
UpdateStatus(uid, component); UpdateStatus(uid, component);
} }