From: Pok <113675512+Pok27@users.noreply.github.com> Date: Thu, 27 Nov 2025 17:52:02 +0000 (+0200) Subject: Helper method for get charge level (#41601) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=8db29b4e87fdee8ee595117b7fc89be1a7743adf;p=space-station-14.git Helper method for get charge level (#41601) * get-charge-percent * review --- diff --git a/Content.Server/Light/EntitySystems/HandheldLightSystem.cs b/Content.Server/Light/EntitySystems/HandheldLightSystem.cs index 52b6614790..4102e2dca0 100644 --- a/Content.Server/Light/EntitySystems/HandheldLightSystem.cs +++ b/Content.Server/Light/EntitySystems/HandheldLightSystem.cs @@ -238,12 +238,12 @@ namespace Content.Server.Light.EntitySystems var appearanceComponent = EntityManager.GetComponentOrNull(uid); - var fraction = _battery.GetCharge(battery.Value.AsNullable()) / battery.Value.Comp.MaxCharge; - if (fraction >= 0.30) + var chargeFraction = _battery.GetChargeLevel(battery.Value.AsNullable()); + if (chargeFraction >= 0.30) { _appearance.SetData(uid, HandheldLightVisuals.Power, HandheldLightPowerStates.FullPower, appearanceComponent); } - else if (fraction >= 0.10) + else if (chargeFraction >= 0.10) { _appearance.SetData(uid, HandheldLightVisuals.Power, HandheldLightPowerStates.LowPower, appearanceComponent); } diff --git a/Content.Server/Radio/EntitySystems/JammerSystem.cs b/Content.Server/Radio/EntitySystems/JammerSystem.cs index 750010c9cc..eaa42d744c 100644 --- a/Content.Server/Radio/EntitySystems/JammerSystem.cs +++ b/Content.Server/Radio/EntitySystems/JammerSystem.cs @@ -43,8 +43,8 @@ public sealed class JammerSystem : SharedJammerSystem } else { - var percentCharged = _battery.GetCharge(battery.Value.AsNullable()) / battery.Value.Comp.MaxCharge; - var chargeLevel = percentCharged switch + var chargeFraction = _battery.GetChargeLevel(battery.Value.AsNullable()); + var chargeLevel = chargeFraction switch { > 0.50f => RadioJammerChargeLevel.High, < 0.15f => RadioJammerChargeLevel.Low, diff --git a/Content.Server/Silicons/Borgs/BorgSystem.Transponder.cs b/Content.Server/Silicons/Borgs/BorgSystem.Transponder.cs index 1237919b20..cc665c9e62 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.Transponder.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.Transponder.cs @@ -39,9 +39,9 @@ public sealed partial class BorgSystem if (now < comp.NextBroadcast) continue; - var charge = 0f; + var chargeFraction = 0f; if (_powerCell.TryGetBatteryFromSlot(uid, out var battery)) - charge = _battery.GetCharge(battery.Value.AsNullable()) / battery.Value.Comp.MaxCharge; + chargeFraction = _battery.GetChargeLevel(battery.Value.AsNullable()); var hpPercent = CalcHP(uid); @@ -52,7 +52,7 @@ public sealed partial class BorgSystem comp.Sprite, comp.Name, meta.EntityName, - charge, + chargeFraction, hpPercent, chassis.ModuleCount, hasBrain, diff --git a/Content.Server/Silicons/Borgs/BorgSystem.Ui.cs b/Content.Server/Silicons/Borgs/BorgSystem.Ui.cs index d718916abf..1306e5414c 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.Ui.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.Ui.cs @@ -114,7 +114,7 @@ public sealed partial class BorgSystem return; } - var chargePercent = (short)MathF.Round(_battery.GetCharge(battery.Value.AsNullable()) / battery.Value.Comp.MaxCharge * 10f); + var chargePercent = (short)MathF.Round(_battery.GetChargeLevel(battery.Value.AsNullable()) * 10f); // we make sure 0 only shows if they have absolutely no battery. // also account for floating point imprecision diff --git a/Content.Server/Speech/EntitySystems/DamagedSiliconAccentSystem.cs b/Content.Server/Speech/EntitySystems/DamagedSiliconAccentSystem.cs index 99cd0ca9e2..e5db13ca84 100644 --- a/Content.Server/Speech/EntitySystems/DamagedSiliconAccentSystem.cs +++ b/Content.Server/Speech/EntitySystems/DamagedSiliconAccentSystem.cs @@ -36,7 +36,7 @@ public sealed class DamagedSiliconAccentSystem : EntitySystem } else if (_powerCell.TryGetBatteryFromSlot(uid, out var battery)) { - currentChargeLevel = _battery.GetCharge(battery.Value.AsNullable()) / battery.Value.Comp.MaxCharge; + currentChargeLevel = _battery.GetChargeLevel(battery.Value.AsNullable()); } currentChargeLevel = Math.Clamp(currentChargeLevel, 0.0f, 1.0f); // Corrupt due to low power (drops characters on longer messages) diff --git a/Content.Shared/Power/EntitySystems/ChargerSystem.cs b/Content.Shared/Power/EntitySystems/ChargerSystem.cs index d22e45bf29..b561eedcbb 100644 --- a/Content.Shared/Power/EntitySystems/ChargerSystem.cs +++ b/Content.Shared/Power/EntitySystems/ChargerSystem.cs @@ -71,8 +71,8 @@ public sealed class ChargerSystem : EntitySystem if (!_powerCell.TryGetBatteryFromEntityOrSlot(contained, out var battery)) continue; - var chargePercentage = _battery.GetCharge(battery.Value.AsNullable()) / battery.Value.Comp.MaxCharge * 100; - args.PushMarkup(Loc.GetString("charger-content", ("chargePercentage", (int)chargePercentage))); + var chargePercent = _battery.GetChargeLevel(battery.Value.AsNullable()) * 100; + args.PushMarkup(Loc.GetString("charger-content", ("chargePercent", (int)chargePercent))); } } } diff --git a/Content.Shared/Power/EntitySystems/PredictedBatterySystem.API.cs b/Content.Shared/Power/EntitySystems/PredictedBatterySystem.API.cs index c06b458dc2..e5b509ca31 100644 --- a/Content.Shared/Power/EntitySystems/PredictedBatterySystem.API.cs +++ b/Content.Shared/Power/EntitySystems/PredictedBatterySystem.API.cs @@ -174,6 +174,21 @@ public sealed partial class PredictedBatterySystem return charge; } + /// + /// Gets the fraction of charge remaining (0–1). + /// + [PublicAPI] + public float GetChargeLevel(Entity ent) + { + if (!Resolve(ent, ref ent.Comp, false)) + return 0f; + + if (ent.Comp.MaxCharge <= 0f) + return 0f; + + return GetCharge(ent) / ent.Comp.MaxCharge; + } + /// /// Gets number of remaining uses for the given charge cost. /// diff --git a/Content.Shared/PowerCell/PowerCellSystem.cs b/Content.Shared/PowerCell/PowerCellSystem.cs index dfc2dfdbe2..41d6c094ca 100644 --- a/Content.Shared/PowerCell/PowerCellSystem.cs +++ b/Content.Shared/PowerCell/PowerCellSystem.cs @@ -129,8 +129,8 @@ public sealed partial class PowerCellSystem : EntitySystem private void OnBatteryExamined(Entity ent, ref ExaminedEvent args) { - var charge = _battery.GetCharge(ent.AsNullable()) / ent.Comp.MaxCharge * 100; - args.PushMarkup(Loc.GetString("power-cell-component-examine-details", ("currentCharge", $"{charge:F0}"))); + var chargePercent = _battery.GetChargeLevel(ent.AsNullable()) * 100; + args.PushMarkup(Loc.GetString("power-cell-component-examine-details", ("currentCharge", $"{chargePercent:F0}"))); } private void OnDrawRefreshChargeRate(Entity ent, ref RefreshChargeRateEvent args) diff --git a/Resources/Locale/en-US/power/components/charger.ftl b/Resources/Locale/en-US/power/components/charger.ftl index 9ac16a2d46..01fa658c8c 100644 --- a/Resources/Locale/en-US/power/components/charger.ftl +++ b/Resources/Locale/en-US/power/components/charger.ftl @@ -1,4 +1,4 @@ charger-examine = Charges at [color={$color}]{$chargeRate}W[/color]. charger-component-charge-rate = Charge rate -charger-content = Current charge is at [color=#5E7C16]{$chargePercentage}[/color]%. +charger-content = Current charge is at [color=#5E7C16]{$chargePercent}[/color]%. charger-empty = There is nothing in the charger.