using System.Diagnostics.CodeAnalysis; using Content.Shared.Administration.Logs; using Content.Shared.Database; using Content.Shared.Emp; using Content.Shared.Power.Components; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Network; namespace Content.Shared.Power.EntitySystems; public abstract class SharedPowerReceiverSystem : EntitySystem { [Dependency] private readonly INetManager _netMan = default!; [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedPowerNetSystem _net = default!; public abstract bool ResolveApc(EntityUid entity, [NotNullWhen(true)] ref SharedApcPowerReceiverComponent? component); public void SetNeedsPower(EntityUid uid, bool value, SharedApcPowerReceiverComponent? receiver = null) { if (!ResolveApc(uid, ref receiver) || receiver.NeedsPower == value) return; receiver.NeedsPower = value; Dirty(uid, receiver); } public void SetPowerDisabled(EntityUid uid, bool value, SharedApcPowerReceiverComponent? receiver = null) { if (!ResolveApc(uid, ref receiver) || receiver.PowerDisabled == value) return; receiver.PowerDisabled = value; Dirty(uid, receiver); } // Frontier: upstream (#28984) - MIT public bool TryTogglePower(EntityUid uid, bool playSwitchSound = true, SharedApcPowerReceiverComponent? receiver = null, EntityUid? user = null) { if (HasComp(uid)) return false; return TogglePower(uid, playSwitchSound, receiver, user); } // End Frontier: upstream (#28984) - MIT /// /// Turn this machine on or off. /// Returns true if we turned it on, false if we turned it off. /// protected bool TogglePower(EntityUid uid, bool playSwitchSound = true, SharedApcPowerReceiverComponent? receiver = null, EntityUid? user = null) // Frontier: public entity) { // NOOP on server because client has 0 idea of load so we can't raise it properly in shared. } /// /// Checks if entity is APC-powered device, and if it have power. /// public bool IsPowered(Entity entity) { if (!ResolveApc(entity.Owner, ref entity.Comp)) return true; return entity.Comp.Powered; } protected string GetExamineText(bool powered) { return Loc.GetString("power-receiver-component-on-examine-main", ("stateText", Loc.GetString(powered ? "power-receiver-component-on-examine-powered" : "power-receiver-component-on-examine-unpowered"))); } }