]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Implement Equals for ApcBoundInterfaceState (#27965)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Mon, 13 May 2024 04:05:37 +0000 (14:05 +1000)
committerGitHub <noreply@github.com>
Mon, 13 May 2024 04:05:37 +0000 (14:05 +1000)
* Implement Equals for ApcBoundInterfaceState

Saves a lot on bandwidth. Also made it round to the nearest 5.

* Also this

Content.Server/Power/EntitySystems/ApcSystem.cs
Content.Shared/APC/SharedApc.cs

index 388f65ad2e88ecdcfe88d0e6f5f1bfa095963216..529d4d81d7c686becbba81cf06d882d098c94b8b 100644 (file)
@@ -8,6 +8,7 @@ using Content.Shared.APC;
 using Content.Shared.Emag.Components;
 using Content.Shared.Emag.Systems;
 using Content.Shared.Popups;
+using Content.Shared.Rounding;
 using Robust.Server.GameObjects;
 using Robust.Shared.Audio;
 using Robust.Shared.Audio.Systems;
@@ -147,10 +148,14 @@ public sealed class ApcSystem : EntitySystem
             return;
 
         var battery = netBat.NetworkBattery;
+        const int ChargeAccuracy = 5;
+
+        // TODO: Fix ContentHelpers or make a new one coz this is cooked.
+        var charge = ContentHelpers.RoundToNearestLevels(battery.CurrentStorage / battery.Capacity, 1.0, 100 / ChargeAccuracy) / 100f * ChargeAccuracy;
 
         var state = new ApcBoundInterfaceState(apc.MainBreakerEnabled, apc.HasAccess,
             (int) MathF.Ceiling(battery.CurrentSupply), apc.LastExternalState,
-            battery.CurrentStorage / battery.Capacity);
+            charge);
 
         _ui.SetUiState((uid, ui), ApcUiKey.Key, state);
     }
index 16cd840b3a438ca514b5891a10d3940eeb3c79af..bf9fdc9444ba50ae5bb4afef0401b45b06375be9 100644 (file)
@@ -65,7 +65,7 @@ namespace Content.Shared.APC
         /// Bitmask for the full state for a given APC lock indicator.
         /// </summary>
         All = (Lock),
-        
+
         /// <summary>
         /// The log 2 width in bits of the bitfields indicating the status of an APC lock indicator.
         /// Used for bit shifting operations (Mask for the state for indicator i is (All << (i << LogWidth))).
@@ -175,7 +175,7 @@ namespace Content.Shared.APC
     }
 
     [Serializable, NetSerializable]
-    public sealed class ApcBoundInterfaceState : BoundUserInterfaceState
+    public sealed class ApcBoundInterfaceState : BoundUserInterfaceState, IEquatable<ApcBoundInterfaceState>
     {
         public readonly bool MainBreaker;
         public readonly bool HasAccess;
@@ -191,6 +191,27 @@ namespace Content.Shared.APC
             ApcExternalPower = apcExternalPower;
             Charge = charge;
         }
+
+        public bool Equals(ApcBoundInterfaceState? other)
+        {
+            if (ReferenceEquals(null, other)) return false;
+            if (ReferenceEquals(this, other)) return true;
+            return MainBreaker == other.MainBreaker &&
+                   HasAccess == other.HasAccess &&
+                   Power == other.Power &&
+                   ApcExternalPower == other.ApcExternalPower &&
+                   MathHelper.CloseTo(Charge, other.Charge);
+        }
+
+        public override bool Equals(object? obj)
+        {
+            return ReferenceEquals(this, obj) || obj is ApcBoundInterfaceState other && Equals(other);
+        }
+
+        public override int GetHashCode()
+        {
+            return HashCode.Combine(MainBreaker, HasAccess, Power, (int) ApcExternalPower, Charge);
+        }
     }
 
     [Serializable, NetSerializable]
@@ -198,7 +219,7 @@ namespace Content.Shared.APC
     {
     }
 
-    public enum ApcExternalPowerState
+    public enum ApcExternalPowerState : byte
     {
         None,
         Low,
@@ -206,7 +227,7 @@ namespace Content.Shared.APC
     }
 
     [NetSerializable, Serializable]
-    public enum ApcUiKey
+    public enum ApcUiKey : byte
     {
         Key,
     }