using Content.Server.Power.NodeGroups; using Content.Server.Power.Pow3r; using Content.Shared.Power.Components; namespace Content.Server.Power.Components { /// /// Attempts to link with a nearby s /// so that it can receive power from a . /// [RegisterComponent] public sealed partial class ApcPowerReceiverComponent : SharedApcPowerReceiverComponent { /// /// Amount of charge this needs from an APC per second to function. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("powerLoad")] public float Load { get => NetworkLoad.DesiredPower; set => NetworkLoad.DesiredPower = value; } public ApcPowerProviderComponent? Provider = null; /// /// When false, causes this to appear powered even if not receiving power from an Apc. /// [ViewVariables(VVAccess.ReadWrite)] public override bool NeedsPower { get => _needsPower; set { _needsPower = value; // Reset this so next tick will do a power update. Recalculate = true; } } [DataField("needsPower")] private bool _needsPower = true; /// /// When true, causes this to never appear powered. /// [DataField("powerDisabled")] public override bool PowerDisabled { get => !NetworkLoad.Enabled; set => NetworkLoad.Enabled = !value; } // TODO Is this needed? It forces a PowerChangedEvent when NeedsPower is toggled even if it changes to the same state. public bool Recalculate; [ViewVariables] public PowerState.Load NetworkLoad { get; } = new PowerState.Load { DesiredPower = 5 }; public float PowerReceived => NetworkLoad.ReceivingPower; } }