From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Thu, 27 Nov 2025 16:01:13 +0000 (+0100) Subject: Fix helmet lights (#41599) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=2330136abfd74e002b7933115e9238d7965496a4;p=space-station-14.git Fix helmet lights (#41599) fix helmet lights --- diff --git a/Content.Server/Light/EntitySystems/HandheldLightSystem.cs b/Content.Server/Light/EntitySystems/HandheldLightSystem.cs index a7f5801f32..52b6614790 100644 --- a/Content.Server/Light/EntitySystems/HandheldLightSystem.cs +++ b/Content.Server/Light/EntitySystems/HandheldLightSystem.cs @@ -108,7 +108,7 @@ namespace Content.Server.Light.EntitySystems // Curently every single flashlight has the same number of levels for status and that's all it uses the charge for // Thus we'll just check if the level changes. - if (!_powerCell.TryGetBatteryFromSlot(ent.Owner, out var battery)) + if (!_powerCell.TryGetBatteryFromSlotOrEntity(ent.Owner, out var battery)) return null; var currentCharge = _battery.GetCharge(battery.Value.AsNullable()); @@ -203,7 +203,7 @@ namespace Content.Server.Light.EntitySystems return false; } - if (!_powerCell.TryGetBatteryFromSlot(uid.Owner, out var battery)) + if (!_powerCell.TryGetBatteryFromSlotOrEntity(uid.Owner, out var battery)) { _audio.PlayPvs(_audio.ResolveSound(component.TurnOnFailSound), uid); _popup.PopupEntity(Loc.GetString("handheld-light-component-cell-missing-message"), uid, user); @@ -230,7 +230,7 @@ namespace Content.Server.Light.EntitySystems public void TryUpdate(Entity uid, float frameTime) { var component = uid.Comp; - if (!_powerCell.TryGetBatteryFromSlot(uid.Owner, out var battery)) + if (!_powerCell.TryGetBatteryFromSlotOrEntity(uid.Owner, out var battery)) { TurnOff(uid, false); return; diff --git a/Content.Shared/Power/EntitySystems/ChargerSystem.cs b/Content.Shared/Power/EntitySystems/ChargerSystem.cs index 54dac61157..d22e45bf29 100644 --- a/Content.Shared/Power/EntitySystems/ChargerSystem.cs +++ b/Content.Shared/Power/EntitySystems/ChargerSystem.cs @@ -68,7 +68,7 @@ public sealed class ChargerSystem : EntitySystem // add how much each item is charged it foreach (var contained in container.ContainedEntities) { - if (!SearchForBattery(contained, out var battery)) + if (!_powerCell.TryGetBatteryFromEntityOrSlot(contained, out var battery)) continue; var chargePercentage = _battery.GetCharge(battery.Value.AsNullable()) / battery.Value.Comp.MaxCharge * 100; @@ -93,7 +93,7 @@ public sealed class ChargerSystem : EntitySystem return; AddComp(args.Entity); - if (SearchForBattery(args.Entity, out var battery)) + if (_powerCell.TryGetBatteryFromEntityOrSlot(args.Entity, out var battery)) _battery.RefreshChargeRate(battery.Value.AsNullable()); UpdateStatus(ent); } @@ -107,7 +107,7 @@ public sealed class ChargerSystem : EntitySystem return; RemComp(args.Entity); - if (SearchForBattery(args.Entity, out var battery)) + if (_powerCell.TryGetBatteryFromEntityOrSlot(args.Entity, out var battery)) _battery.RefreshChargeRate(battery.Value.AsNullable()); UpdateStatus(ent); } @@ -187,22 +187,6 @@ public sealed class ChargerSystem : EntitySystem UpdateStatus((chargerUid, chargerComp)); } - private bool SearchForBattery(EntityUid uid, [NotNullWhen(true)] out Entity? battery) - { - // try get a battery directly on the inserted entity - if (TryComp(uid, out var batteryComp)) - { - battery = (uid, batteryComp); - return true; - } - // or by checking for a power cell slot on the inserted entity - if (_powerCell.TryGetBatteryFromSlot(uid, out battery)) - return true; - - battery = null; - return false; - } - private void RefreshAllBatteries(Entity ent) { // try to get contents of the charger @@ -211,7 +195,7 @@ public sealed class ChargerSystem : EntitySystem foreach (var item in container.ContainedEntities) { - if (SearchForBattery(item, out var battery)) + if (_powerCell.TryGetBatteryFromEntityOrSlot(item, out var battery)) _battery.RefreshChargeRate(battery.Value.AsNullable()); } } @@ -259,7 +243,7 @@ public sealed class ChargerSystem : EntitySystem return CellChargerStatus.Empty; // Use the first stored battery for visuals. If someone ever makes a multi-slot charger then this will need to be changed. - if (!SearchForBattery(container.ContainedEntities[0], out var battery)) + if (!_powerCell.TryGetBatteryFromEntityOrSlot(container.ContainedEntities[0], out var battery)) return CellChargerStatus.Off; if (_battery.IsFull(battery.Value.AsNullable())) diff --git a/Content.Shared/PowerCell/PowerCellSystem.API.cs b/Content.Shared/PowerCell/PowerCellSystem.API.cs index 98b24edcce..30c5228236 100644 --- a/Content.Shared/PowerCell/PowerCellSystem.API.cs +++ b/Content.Shared/PowerCell/PowerCellSystem.API.cs @@ -38,6 +38,45 @@ public sealed partial class PowerCellSystem return true; } + /// + /// First tries to get a battery from the entity's power cell slot. + /// If that fails check if the entity itself is a battery with . + /// + [PublicAPI] + public bool TryGetBatteryFromSlotOrEntity(Entity ent, [NotNullWhen(true)] out Entity? battery) + { + if (TryGetBatteryFromSlot(ent, out battery)) + return true; + + if (TryComp(ent, out var batteryComp)) + { + battery = (ent.Owner, batteryComp); + return true; + } + + battery = null; + return false; + } + + /// + /// First checks if the entity itself is a battery with . + /// If that fails it will try to get a battery from the entity's power cell slot instead. + /// + [PublicAPI] + public bool TryGetBatteryFromEntityOrSlot(Entity ent, [NotNullWhen(true)] out Entity? battery) + { + if (TryComp(ent, out var batteryComp)) + { + battery = (ent.Owner, batteryComp); + return true; + } + if (TryGetBatteryFromSlot(ent, out battery)) + return true; + + battery = null; + return false; + } + /// /// Returns whether the entity has a slotted battery and charge for the requested action. ///