Implement Equals for ApcBoundInterfaceState (#27965)
* Implement Equals for ApcBoundInterfaceState Saves a lot on bandwidth. Also made it round to the nearest 5. * Also this
This commit is contained in:
@@ -8,6 +8,7 @@ using Content.Shared.APC;
|
|||||||
using Content.Shared.Emag.Components;
|
using Content.Shared.Emag.Components;
|
||||||
using Content.Shared.Emag.Systems;
|
using Content.Shared.Emag.Systems;
|
||||||
using Content.Shared.Popups;
|
using Content.Shared.Popups;
|
||||||
|
using Content.Shared.Rounding;
|
||||||
using Robust.Server.GameObjects;
|
using Robust.Server.GameObjects;
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
using Robust.Shared.Audio.Systems;
|
using Robust.Shared.Audio.Systems;
|
||||||
@@ -147,10 +148,14 @@ public sealed class ApcSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
var battery = netBat.NetworkBattery;
|
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,
|
var state = new ApcBoundInterfaceState(apc.MainBreakerEnabled, apc.HasAccess,
|
||||||
(int) MathF.Ceiling(battery.CurrentSupply), apc.LastExternalState,
|
(int) MathF.Ceiling(battery.CurrentSupply), apc.LastExternalState,
|
||||||
battery.CurrentStorage / battery.Capacity);
|
charge);
|
||||||
|
|
||||||
_ui.SetUiState((uid, ui), ApcUiKey.Key, state);
|
_ui.SetUiState((uid, ui), ApcUiKey.Key, state);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ namespace Content.Shared.APC
|
|||||||
/// Bitmask for the full state for a given APC lock indicator.
|
/// Bitmask for the full state for a given APC lock indicator.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
All = (Lock),
|
All = (Lock),
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The log 2 width in bits of the bitfields indicating the status of an APC lock indicator.
|
/// 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))).
|
/// 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]
|
[Serializable, NetSerializable]
|
||||||
public sealed class ApcBoundInterfaceState : BoundUserInterfaceState
|
public sealed class ApcBoundInterfaceState : BoundUserInterfaceState, IEquatable<ApcBoundInterfaceState>
|
||||||
{
|
{
|
||||||
public readonly bool MainBreaker;
|
public readonly bool MainBreaker;
|
||||||
public readonly bool HasAccess;
|
public readonly bool HasAccess;
|
||||||
@@ -191,6 +191,27 @@ namespace Content.Shared.APC
|
|||||||
ApcExternalPower = apcExternalPower;
|
ApcExternalPower = apcExternalPower;
|
||||||
Charge = charge;
|
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]
|
[Serializable, NetSerializable]
|
||||||
@@ -198,7 +219,7 @@ namespace Content.Shared.APC
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ApcExternalPowerState
|
public enum ApcExternalPowerState : byte
|
||||||
{
|
{
|
||||||
None,
|
None,
|
||||||
Low,
|
Low,
|
||||||
@@ -206,7 +227,7 @@ namespace Content.Shared.APC
|
|||||||
}
|
}
|
||||||
|
|
||||||
[NetSerializable, Serializable]
|
[NetSerializable, Serializable]
|
||||||
public enum ApcUiKey
|
public enum ApcUiKey : byte
|
||||||
{
|
{
|
||||||
Key,
|
Key,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user