]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix battery charging stopping just short of being full (#34028)
authorErrant <35878406+Errant-4@users.noreply.github.com>
Fri, 10 Jan 2025 06:54:55 +0000 (07:54 +0100)
committerGitHub <noreply@github.com>
Fri, 10 Jan 2025 06:54:55 +0000 (17:54 +1100)
Content.Server/Light/EntitySystems/EmergencyLightSystem.cs
Content.Server/Ninja/Systems/BatteryDrainerSystem.cs
Content.Server/Power/Components/BatteryComponent.cs
Content.Server/Power/EntitySystems/BatterySystem.cs
Content.Server/Power/EntitySystems/ChargerSystem.cs

index 6bd5750460a5cc36970267481f5e432cbfdc86a6..1b7b6146659a7e0ab078dd917f0f03195f3d8bb3 100644 (file)
@@ -153,7 +153,7 @@ public sealed class EmergencyLightSystem : SharedEmergencyLightSystem
         else
         {
             _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))
                 {
index 4baf0913cecd12a01e5ec27d49755e2b67ce798a..8e707cf3fcb72b8f54523ceab185f0bc0f1e3171 100644 (file)
@@ -106,6 +106,6 @@ public sealed class BatteryDrainerSystem : SharedBatteryDrainerSystem
         _popup.PopupEntity(Loc.GetString("battery-drainer-success", ("battery", target)), uid, uid);
 
         // repeat the doafter until battery is full
-        return !battery.IsFullyCharged;
+        return !_battery.IsFull(ent, battery);
     }
 }
index 113106ed185730d5b6c999297f37fe110c9a640d..4ef8891333923ec5c073448114e0e5a82424b9bf 100644 (file)
@@ -24,12 +24,6 @@ namespace Content.Server.Power.Components
         [DataField("startingCharge")]
         public float CurrentCharge;
 
-        /// <summary>
-        /// True if the battery is fully charged.
-        /// </summary>
-        [ViewVariables]
-        public bool IsFullyCharged => MathHelper.CloseToPercent(CurrentCharge, MaxCharge);
-
         /// <summary>
         /// The price per one joule. Default is 1 credit for 10kJ.
         /// </summary>
index eac31ecef789d1864c2cd563f503f0e21537de3a..6e636622e68ec5d40c9beb025cabe5b1341c839d 100644 (file)
@@ -87,8 +87,8 @@ namespace Content.Server.Power.EntitySystems
             var query = EntityQueryEnumerator<BatterySelfRechargerComponent, BatteryComponent>();
             while (query.MoveNext(out var uid, out var comp, out var batt))
             {
-                if (!comp.AutoRecharge) continue;
-                if (batt.IsFullyCharged) continue;
+                if (!comp.AutoRecharge || IsFull(uid, batt))
+                    continue;
 
                 if (comp.AutoRechargePause)
                 {
@@ -212,14 +212,14 @@ namespace Content.Server.Power.EntitySystems
         }
 
         /// <summary>
-        /// Returns whether the battery is at least 99% charged, basically full.
+        /// Returns whether the battery is full.
         /// </summary>
         public bool IsFull(EntityUid uid, BatteryComponent? battery = null)
         {
             if (!Resolve(uid, ref battery))
                 return false;
 
-            return battery.CurrentCharge / battery.MaxCharge >= 0.99f;
+            return battery.CurrentCharge >= battery.MaxCharge;
         }
     }
 }
index 40b998a95d00fbe4b3d307a9b6a060e6fbc30a0c..c128c846fbaba52f478f0b1ee5b2fbc188fbfb99 100644 (file)
@@ -223,10 +223,10 @@ internal sealed class ChargerSystem : EntitySystem
         if (container.ContainedEntities.Count == 0)
             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;
 
-        if (Math.Abs(heldBattery.MaxCharge - heldBattery.CurrentCharge) < 0.01)
+        if (_battery.IsFull(heldEnt.Value, heldBattery))
             return CellChargerStatus.Charged;
 
         return CellChargerStatus.Charging;
@@ -247,12 +247,6 @@ internal sealed class ChargerSystem : EntitySystem
             return;
 
         _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);
     }