]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Thermomachines code cleaning + some QoL (#14772)
authorMenshin <Menshin@users.noreply.github.com>
Sun, 23 Apr 2023 03:05:32 +0000 (05:05 +0200)
committerGitHub <noreply@github.com>
Sun, 23 Apr 2023 03:05:32 +0000 (13:05 +1000)
16 files changed:
Content.Client/Atmos/UI/GasThermomachineWindow.xaml.cs
Content.Server/Atmos/Piping/Unary/Components/GasThermoMachineComponent.cs
Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs
Content.Shared/Atmos/Piping/EnabledAtmosDeviceVisuals.cs
Resources/Locale/en-US/atmos/gas-thermomachine-system.ftl [new file with mode: 0644]
Resources/Prototypes/Catalog/Research/technologies.yml
Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml
Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezerOff.png [moved from Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezer_off.png with 100% similarity]
Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezerOn.png [moved from Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezer_on.png with 100% similarity]
Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezerPanelOpen.png [new file with mode: 0644]
Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezer_open.png [deleted file]
Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heaterOff.png [moved from Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heater_off.png with 100% similarity]
Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heaterOn.png [moved from Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heater_on.png with 100% similarity]
Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heaterPanelOpen.png [new file with mode: 0644]
Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heater_open.png [deleted file]
Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/meta.json

index 691d5ea9106fd8e1e65dd660f64ae5a6114c893b..12e0617a5542cf5335cc5b23a3b20cc7a8959fc7 100644 (file)
@@ -1,4 +1,4 @@
-using Robust.Client.AutoGenerated;
+using Robust.Client.AutoGenerated;
 using Robust.Client.UserInterface.Controls;
 using Robust.Client.UserInterface.CustomControls;
 using Robust.Client.UserInterface.XAML;
@@ -27,10 +27,12 @@ public sealed partial class GasThermomachineWindow : DefaultWindow
         if (active)
         {
             ToggleStatusButton.Text = Loc.GetString("comp-gas-thermomachine-ui-status-enabled");
+            ToggleStatusButton.Pressed = true;
         }
         else
         {
             ToggleStatusButton.Text = Loc.GetString("comp-gas-thermomachine-ui-status-disabled");
+            ToggleStatusButton.Pressed = false;
         }
     }
 
index b165c8785eb02fd1da4807650350bffe63a68abb..fcfffd2fecd18428ed8a6f0366145eeac8cf1f01 100644 (file)
@@ -13,7 +13,7 @@ namespace Content.Server.Atmos.Piping.Unary.Components
 
         [ViewVariables(VVAccess.ReadWrite)]
         [DataField("enabled")]
-        public bool Enabled = true;
+        public bool Enabled = false;
 
         /// <summary>
         ///     Current maximum temperature, calculated from <see cref="BaseHeatCapacity"/> and the quality of matter
@@ -92,5 +92,6 @@ namespace Content.Server.Atmos.Piping.Unary.Components
         /// </summary>
         [DataField("machinePartTemperature", customTypeSerializer: typeof(PrototypeIdSerializer<MachinePartPrototype>))]
         public string MachinePartTemperature = "Laser";
+
     }
 }
index 7592b3abc67729132d6ef6fe6420dcc08e94c947..9f841bef26274bb0e9892528ec62fe2fc1f608c0 100644 (file)
@@ -5,28 +5,30 @@ using Content.Server.Construction;
 using Content.Server.NodeContainer;
 using Content.Server.NodeContainer.Nodes;
 using Content.Shared.Atmos;
-using Content.Shared.Atmos.Piping;
 using Content.Shared.Atmos.Piping.Unary.Components;
 using JetBrains.Annotations;
 using Robust.Server.GameObjects;
+using Content.Server.Power.EntitySystems;
+using Content.Shared.Examine;
 
 namespace Content.Server.Atmos.Piping.Unary.EntitySystems
 {
     [UsedImplicitly]
     public sealed class GasThermoMachineSystem : EntitySystem
     {
-        [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
         [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
         [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!;
+        [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
+        [Dependency] private readonly PowerReceiverSystem _power = default!;
 
         public override void Initialize()
         {
             base.Initialize();
 
             SubscribeLocalEvent<GasThermoMachineComponent, AtmosDeviceUpdateEvent>(OnThermoMachineUpdated);
-            SubscribeLocalEvent<GasThermoMachineComponent, AtmosDeviceDisabledEvent>(OnThermoMachineLeaveAtmosphere);
             SubscribeLocalEvent<GasThermoMachineComponent, RefreshPartsEvent>(OnGasThermoRefreshParts);
             SubscribeLocalEvent<GasThermoMachineComponent, UpgradeExamineEvent>(OnGasThermoUpgradeExamine);
+            SubscribeLocalEvent<GasThermoMachineComponent, ExaminedEvent>(OnExamined);
 
             // UI events
             SubscribeLocalEvent<GasThermoMachineComponent, GasThermomachineToggleMessage>(OnToggleMessage);
@@ -35,12 +37,11 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
 
         private void OnThermoMachineUpdated(EntityUid uid, GasThermoMachineComponent thermoMachine, AtmosDeviceUpdateEvent args)
         {
-            if (!thermoMachine.Enabled
-                || !EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)
+
+            if (!(thermoMachine.Enabled && _power.IsPowered(uid))
+                || !TryComp(uid, out NodeContainerComponent? nodeContainer)
                 || !nodeContainer.TryGetNode(thermoMachine.InletName, out PipeNode? inlet))
             {
-                DirtyUI(uid, thermoMachine);
-                _appearance.SetData(uid, ThermoMachineVisuals.Enabled, false);
                 return;
             }
 
@@ -49,82 +50,90 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
 
             if (!MathHelper.CloseTo(combinedHeatCapacity, 0, 0.001f))
             {
-                _appearance.SetData(uid, ThermoMachineVisuals.Enabled, true);
                 var combinedEnergy = thermoMachine.HeatCapacity * thermoMachine.TargetTemperature + airHeatCapacity * inlet.Air.Temperature;
                 inlet.Air.Temperature = combinedEnergy / combinedHeatCapacity;
             }
-
-            // TODO ATMOS: Active power usage.
         }
 
-        private void OnThermoMachineLeaveAtmosphere(EntityUid uid, GasThermoMachineComponent component, AtmosDeviceDisabledEvent args)
+        private void OnGasThermoRefreshParts(EntityUid uid, GasThermoMachineComponent thermoMachine, RefreshPartsEvent args)
         {
-            _appearance.SetData(uid, ThermoMachineVisuals.Enabled, false);
+            var matterBinRating = args.PartRatings[thermoMachine.MachinePartHeatCapacity];
+            var laserRating = args.PartRatings[thermoMachine.MachinePartTemperature];
 
-            DirtyUI(uid, component);
-        }
+            thermoMachine.HeatCapacity = thermoMachine.BaseHeatCapacity * MathF.Pow(matterBinRating, 2);
 
-        private void OnGasThermoRefreshParts(EntityUid uid, GasThermoMachineComponent component, RefreshPartsEvent args)
-        {
-            var matterBinRating = args.PartRatings[component.MachinePartHeatCapacity];
-            var laserRating = args.PartRatings[component.MachinePartTemperature];
-
-            component.HeatCapacity = component.BaseHeatCapacity * MathF.Pow(matterBinRating, 2);
-
-            switch (component.Mode)
+            switch (thermoMachine.Mode)
             {
                 // 593.15K with stock parts.
                 case ThermoMachineMode.Heater:
-                    component.MaxTemperature = component.BaseMaxTemperature + component.MaxTemperatureDelta * laserRating;
-                    component.MinTemperature = Atmospherics.T20C;
+                    thermoMachine.MaxTemperature = thermoMachine.BaseMaxTemperature + thermoMachine.MaxTemperatureDelta * laserRating;
+                    thermoMachine.MinTemperature = Atmospherics.T20C;
                     break;
                 // 73.15K with stock parts.
                 case ThermoMachineMode.Freezer:
-                    component.MinTemperature = MathF.Max(
-                        component.BaseMinTemperature - component.MinTemperatureDelta * laserRating, Atmospherics.TCMB);
-                    component.MaxTemperature = Atmospherics.T20C;
+                    thermoMachine.MinTemperature = MathF.Max(
+                        thermoMachine.BaseMinTemperature - thermoMachine.MinTemperatureDelta * laserRating, Atmospherics.TCMB);
+                    thermoMachine.MaxTemperature = Atmospherics.T20C;
                     break;
             }
 
-            DirtyUI(uid, component);
+            DirtyUI(uid, thermoMachine);
         }
 
-        private void OnGasThermoUpgradeExamine(EntityUid uid, GasThermoMachineComponent component, UpgradeExamineEvent args)
+        private void OnGasThermoUpgradeExamine(EntityUid uid, GasThermoMachineComponent thermoMachine, UpgradeExamineEvent args)
         {
-            switch (component.Mode)
+            switch (thermoMachine.Mode)
             {
                 case ThermoMachineMode.Heater:
-                    args.AddPercentageUpgrade("gas-thermo-component-upgrade-heating", component.MaxTemperature / (component.BaseMaxTemperature + component.MaxTemperatureDelta));
+                    args.AddPercentageUpgrade("gas-thermo-component-upgrade-heating", thermoMachine.MaxTemperature / (thermoMachine.BaseMaxTemperature + thermoMachine.MaxTemperatureDelta));
                     break;
                 case ThermoMachineMode.Freezer:
-                    args.AddPercentageUpgrade("gas-thermo-component-upgrade-cooling", component.MinTemperature / (component.BaseMinTemperature - component.MinTemperatureDelta));
+                    args.AddPercentageUpgrade("gas-thermo-component-upgrade-cooling", thermoMachine.MinTemperature / (thermoMachine.BaseMinTemperature - thermoMachine.MinTemperatureDelta));
                     break;
             }
-            args.AddPercentageUpgrade("gas-thermo-component-upgrade-heat-capacity", component.HeatCapacity / component.BaseHeatCapacity);
+            args.AddPercentageUpgrade("gas-thermo-component-upgrade-heat-capacity", thermoMachine.HeatCapacity / thermoMachine.BaseHeatCapacity);
         }
 
-        private void OnToggleMessage(EntityUid uid, GasThermoMachineComponent component, GasThermomachineToggleMessage args)
+        private void OnToggleMessage(EntityUid uid, GasThermoMachineComponent thermoMachine, GasThermomachineToggleMessage args)
         {
-            component.Enabled = !component.Enabled;
-
-            DirtyUI(uid, component);
+            SetEnabled(uid, thermoMachine, _power.TogglePower(uid));
+            DirtyUI(uid, thermoMachine);
         }
 
-        private void OnChangeTemperature(EntityUid uid, GasThermoMachineComponent component, GasThermomachineChangeTemperatureMessage args)
+        private void OnChangeTemperature(EntityUid uid, GasThermoMachineComponent thermoMachine, GasThermomachineChangeTemperatureMessage args)
         {
-            component.TargetTemperature =
-                Math.Clamp(args.Temperature, component.MinTemperature, component.MaxTemperature);
+            thermoMachine.TargetTemperature =
+                Math.Clamp(args.Temperature, thermoMachine.MinTemperature, thermoMachine.MaxTemperature);
 
-            DirtyUI(uid, component);
+            DirtyUI(uid, thermoMachine);
         }
 
-        private void DirtyUI(EntityUid uid, GasThermoMachineComponent? thermo, ServerUserInterfaceComponent? ui=null)
+        private void DirtyUI(EntityUid uid, GasThermoMachineComponent? thermoMachine, ServerUserInterfaceComponent? ui=null)
         {
-            if (!Resolve(uid, ref thermo, ref ui, false))
+            if (!Resolve(uid, ref thermoMachine, ref ui, false))
                 return;
 
             _userInterfaceSystem.TrySetUiState(uid, ThermomachineUiKey.Key,
-                new GasThermomachineBoundUserInterfaceState(thermo.MinTemperature, thermo.MaxTemperature, thermo.TargetTemperature, thermo.Enabled, thermo.Mode), null, ui);
+                new GasThermomachineBoundUserInterfaceState(thermoMachine.MinTemperature, thermoMachine.MaxTemperature, thermoMachine.TargetTemperature, thermoMachine.Enabled, thermoMachine.Mode), null, ui);
+        }
+
+        private void SetEnabled(EntityUid uid, GasThermoMachineComponent thermoMachine, bool enabled)
+        {
+            thermoMachine.Enabled = enabled;
+        }
+
+        private void OnExamined(EntityUid uid, GasThermoMachineComponent thermoMachine, ExaminedEvent args)
+        {
+            if (!args.IsInDetailsRange)
+                return;
+
+            if (Loc.TryGetString("gas-thermomachine-system-examined", out var str,
+                        ("machineName", thermoMachine.Mode == ThermoMachineMode.Freezer ? "freezer" : "heater"),
+                        ("tempColor", thermoMachine.Mode == ThermoMachineMode.Freezer ? "deepskyblue" : "red"),
+                        ("temp", Math.Round(thermoMachine.TargetTemperature,2))
+               ))
+
+                args.PushMarkup(str);
         }
     }
 }
index 1ffbc31f35df34397f4fddccc39ee8aa57045970..dfc7b7a386cbaaa1408ecf400f53547babf9e889 100644 (file)
@@ -20,12 +20,6 @@ namespace Content.Shared.Atmos.Piping
         Enabled,
     }
 
-    [Serializable, NetSerializable]
-    public enum ThermoMachineVisuals : byte
-    {
-        Enabled,
-    }
-
     [Serializable, NetSerializable]
     public enum PumpVisuals : byte
     {
diff --git a/Resources/Locale/en-US/atmos/gas-thermomachine-system.ftl b/Resources/Locale/en-US/atmos/gas-thermomachine-system.ftl
new file mode 100644 (file)
index 0000000..b5a44a2
--- /dev/null
@@ -0,0 +1,2 @@
+# Examine Text
+gas-thermomachine-system-examined = The {$machineName} thermostat is set to [color={$tempColor}]{$temp} °C[/color].
index 8641bc892e19d226d61d3ce4fe755ebdec7cce46..1ad09c82ba995e9a6cfd593cec3bf9bcf2f6e0da 100644 (file)
   description: technologies-advanced-atmospherics-technology-description
   icon:
     sprite: Structures/Piping/Atmospherics/thermomachine.rsi
-    state: freezer_off
+    state: freezerOff
   requiredPoints: 7500
   requiredTechnologies:
   - ElectricalEngineering
index 648221c1bd864475037b423b1d2a980b132e956a..11d2b9a1f89a8094b57a669ffc0119dae741ea56 100644 (file)
     - type: Wires
       BoardName: "Thermomachine"
       LayoutId: Thermomachine
+    - type: WiresVisuals
     - type: NodeContainer
       nodes:
         pipe:
   components:
     - type: Sprite
       layers:
-        - state: freezer_off
-          map: [ "enabled" ]
+        - state: freezerOff
+          map: [ "enum.PowerDeviceVisualLayers.Powered" ]
+        - state: freezerPanelOpen
+          map: [ "enum.WiresVisualLayers.MaintenancePanel" ]
         - state: pipe
           map: [ "enum.PipeVisualLayers.Pipe" ]
     - type: GenericVisualizer
       visuals:
-        enum.ThermoMachineVisuals.Enabled:
-          enabled:
-            True: { state: freezer_on }
-            False: { state: freezer_off }
+        enum.PowerDeviceVisuals.Powered:
+          enum.PowerDeviceVisualLayers.Powered:
+            True: { state: freezerOn }
+            False: { state: freezerOff }
     - type: GasThermoMachine
       mode: Freezer
+    - type: ApcPowerReceiver
+      powerDisabled: true #starts off
     - type: Machine
       board: ThermomachineFreezerMachineCircuitBoard
 
+- type: entity
+  parent: GasThermoMachineFreezer
+  id: GasThermoMachineFreezerEnabled
+  suffix: Enabled
+  components:
+  - type: GasThermoMachine
+    enabled: true
+  - type: ApcPowerReceiver
+    powerDisabled: false
+
 - type: entity
   parent: BaseGasThermoMachine
   id: GasThermoMachineHeater
   components:
     - type: Sprite
       layers:
-        - state: heater_off
-          map: [ "enabled" ]
+        - state: heaterOff
+          map: [ "enum.PowerDeviceVisualLayers.Powered" ]
+        - state: heaterPanelOpen
+          map: ["enum.WiresVisualLayers.MaintenancePanel"]
         - state: pipe
           map: [ "enum.PipeVisualLayers.Pipe" ]
     - type: GenericVisualizer
       visuals:
-        enum.ThermoMachineVisuals.Enabled:
-          enabled:
-            True: { state: heater_on }
-            False: { state: heater_off }
+        enum.PowerDeviceVisuals.Powered:
+          enum.PowerDeviceVisualLayers.Powered:
+            True: { state: heaterOn }
+            False: { state: heaterOff }
     - type: GasThermoMachine
       mode: Heater
+    - type: ApcPowerReceiver
+      powerDisabled: true #starts off
     - type: Machine
       board: ThermomachineHeaterMachineCircuitBoard
+
+- type: entity
+  parent: GasThermoMachineHeater
+  id: GasThermoMachineHeaterEnabled
+  suffix: Enabled
+  components:
+  - type: GasThermoMachine
+    enabled: true
+  - type: ApcPowerReceiver
+    powerDisabled: false
diff --git a/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezerPanelOpen.png b/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezerPanelOpen.png
new file mode 100644 (file)
index 0000000..2b12a2d
Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezerPanelOpen.png differ
diff --git a/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezer_open.png b/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezer_open.png
deleted file mode 100644 (file)
index 87e8042..0000000
Binary files a/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/freezer_open.png and /dev/null differ
diff --git a/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heaterPanelOpen.png b/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heaterPanelOpen.png
new file mode 100644 (file)
index 0000000..53905e1
Binary files /dev/null and b/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heaterPanelOpen.png differ
diff --git a/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heater_open.png b/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heater_open.png
deleted file mode 100644 (file)
index 9cbe10c..0000000
Binary files a/Resources/Textures/Structures/Piping/Atmospherics/thermomachine.rsi/heater_open.png and /dev/null differ
index 5b63ec0e20037bf7b1f8de68aca3edfed663dcd8..4cbb72e1ac97a31f4775cde18d899ce6d941219a 100644 (file)
@@ -1 +1,38 @@
-{"version":1,"size":{"x":32,"y":32},"copyright":"Taken from tgstation","license":"CC-BY-SA-3.0","states":[{"name":"freezer_off"},{"name":"freezer_open"},{"name":"freezer_on","directions":1,"delays":[[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]]},{"name":"heater_off"},{"name":"heater_open"},{"name":"heater_on","directions":1,"delays":[[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]]},{"name":"pipe","directions":4}]}
\ No newline at end of file
+{
+    "version":1,
+    "size":{"x":32,"y":32},
+    "copyright":"Base sprites taken from tgstation, splitted to display on two layers (machinebody/panel) by Menshin, for SS14",
+    "license":"CC-BY-SA-3.0",
+    "states":[
+        {
+            "name":"freezerOff",
+            "directions":1
+        },
+        {
+            "name":"freezerPanelOpen",
+            "directions":1
+        },
+        {
+            "name":"freezerOn",
+            "directions":1,
+            "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] ]
+        },
+        {
+            "name":"heaterOff",
+            "directions":1
+        },
+        {
+            "name":"heaterPanelOpen",
+            "directions":1
+        },
+        {
+            "name":"heaterOn",
+            "directions":1,
+            "delays":[ [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] ]
+        },
+        {
+            "name":"pipe",
+            "directions":4
+        }
+    ]
+}
\ No newline at end of file