using Content.Server.DeviceLinking.Systems; using Content.Shared.DeviceLinking; using Content.Shared.Tools; using Robust.Shared.Audio; using Robust.Shared.Prototypes; namespace Content.Server.DeviceLinking.Components; /// /// A logic gate that sets its output port by doing an operation on its 2 input ports, A and B. /// [RegisterComponent, Access(typeof(LogicGateSystem))] public sealed partial class LogicGateComponent : Component { /// /// The logic gate operation to use. /// [DataField] public LogicGate Gate = LogicGate.Or; /// /// Tool quality to use for cycling logic gate operations. /// Cannot be pulsing since linking uses that. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public ProtoId CycleQuality = "Screwing"; /// /// Sound played when cycling logic gate operations. /// [DataField] public SoundSpecifier CycleSound = new SoundPathSpecifier("/Audio/Machines/lightswitch.ogg"); /// /// Name of the first input port. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public ProtoId InputPortA = "InputA"; /// /// Name of the second input port. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public ProtoId InputPortB = "InputB"; /// /// Name of the output port. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public ProtoId OutputPort = "Output"; // Initial state, used to not spam invoke ports [DataField] public SignalState StateA = SignalState.Low; [DataField] public SignalState StateB = SignalState.Low; [DataField] public bool LastOutput; }