using Content.Shared.Wires; namespace Content.Server.Wires; /// /// convenience class for wires that depend on the existence of some component to function. Slightly reduces boilerplate. /// public abstract class ComponentWireAction : BaseWireAction where TComponent : Component { public abstract StatusLightState? GetLightState(Wire wire, TComponent component); public override StatusLightState? GetLightState(Wire wire) { return EntityManager.TryGetComponent(wire.Owner, out TComponent? component) ? GetLightState(wire, component) : StatusLightState.Off; } public abstract bool Cut(EntityUid user, Wire wire, TComponent component); public abstract bool Mend(EntityUid user, Wire wire, TComponent component); public abstract void Pulse(EntityUid user, Wire wire, TComponent component); public override bool Cut(EntityUid user, Wire wire) { base.Cut(user, wire); return EntityManager.TryGetComponent(wire.Owner, out TComponent? component) && Cut(user, wire, component); } public override bool Mend(EntityUid user, Wire wire) { base.Mend(user, wire); return EntityManager.TryGetComponent(wire.Owner, out TComponent? component) && Mend(user, wire, component); } public override void Pulse(EntityUid user, Wire wire) { base.Pulse(user, wire); if (EntityManager.TryGetComponent(wire.Owner, out TComponent? component)) Pulse(user, wire, component); } }