From e0f7ca774065aadf371af1c9a9be5b232d4e2f51 Mon Sep 17 00:00:00 2001 From: 20kdc Date: Thu, 13 May 2021 00:10:57 +0100 Subject: [PATCH] Little component to make batteries examinable. (#3982) --- Content.Client/IgnoredComponents.cs | 1 + .../Power/ExaminableBatteryComponent.cs | 45 +++++++++++++++++++ .../examinable-battery-component.ftl | 6 +++ .../Entities/Constructible/Power/parts.yml | 3 ++ 4 files changed, 55 insertions(+) create mode 100644 Content.Server/GameObjects/Components/Power/ExaminableBatteryComponent.cs create mode 100644 Resources/Locale/en-US/components/examinable-battery-component.ftl diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index b08361b7de..5a42a8e583 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -88,6 +88,7 @@ namespace Content.Client "TilePrying", "RandomSpriteColor", "ConditionalSpawner", + "ExaminableBattery", "PottedPlantHide", "SecureEntityStorage", "PresetIdCard", diff --git a/Content.Server/GameObjects/Components/Power/ExaminableBatteryComponent.cs b/Content.Server/GameObjects/Components/Power/ExaminableBatteryComponent.cs new file mode 100644 index 0000000000..29e1aaee09 --- /dev/null +++ b/Content.Server/GameObjects/Components/Power/ExaminableBatteryComponent.cs @@ -0,0 +1,45 @@ +#nullable enable +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Maths; +using Robust.Shared.Prototypes; +using Robust.Shared.ViewVariables; +using Robust.Shared.Localization; +using Robust.Shared.Utility; +using Content.Server.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; + +namespace Content.Server.GameObjects.Components.Power +{ + [RegisterComponent] + public class ExaminableBatteryComponent : Component, IExamine + { + public override string Name => "ExaminableBattery"; + + [ViewVariables] + [ComponentDependency] private BatteryComponent? _battery = default!; + + void IExamine.Examine(FormattedMessage message, bool inDetailsRange) + { + if (_battery == null) + return; + if (inDetailsRange) + { + var effectiveMax = _battery.MaxCharge; + if (effectiveMax == 0) + effectiveMax = 1; + var chargeFraction = _battery.CurrentCharge / effectiveMax; + var chargePercentRounded = (int) (chargeFraction * 100); + message.AddMarkup( + Loc.GetString( + "examinable-battery-component-examine-detail", + ("percent", chargePercentRounded), + ("markupPercentColor", "green") + ) + ); + } + } + } +} diff --git a/Resources/Locale/en-US/components/examinable-battery-component.ftl b/Resources/Locale/en-US/components/examinable-battery-component.ftl new file mode 100644 index 0000000000..ca078b2cb2 --- /dev/null +++ b/Resources/Locale/en-US/components/examinable-battery-component.ftl @@ -0,0 +1,6 @@ + +### UI + +# Shown when the battery is examined in details range +examinable-battery-component-examine-detail = The battery is [color={$markupPercentColor}]{$percent}%[/color] full. + diff --git a/Resources/Prototypes/Entities/Constructible/Power/parts.yml b/Resources/Prototypes/Entities/Constructible/Power/parts.yml index 98f6969595..b4da648207 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/parts.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/parts.yml @@ -39,6 +39,7 @@ - type: Battery maxCharge: 1000 startingCharge: 1000 + - type: ExaminableBattery - type: NodeContainer examinable: true nodes: @@ -95,6 +96,7 @@ - type: Battery maxCharge: 1000 startingCharge: 1000 + - type: ExaminableBattery - type: NodeContainer examinable: true nodes: @@ -148,6 +150,7 @@ - type: Battery maxCharge: 10000 startingCharge: 10000 + - type: ExaminableBattery - type: NodeContainer examinable: true nodes: