diff --git a/Content.Server/GameObjects/Components/MachineLinking/ISignalReceiver.cs b/Content.Server/GameObjects/Components/MachineLinking/ISignalReceiver.cs index 78e032606f..412e0570d3 100644 --- a/Content.Server/GameObjects/Components/MachineLinking/ISignalReceiver.cs +++ b/Content.Server/GameObjects/Components/MachineLinking/ISignalReceiver.cs @@ -1,14 +1,9 @@ -namespace Content.Server.GameObjects.Components.MachineLinking -{ - public interface ISignalReceiver - { - void TriggerSignal(SignalState state); - } +using System; - public enum SignalState +namespace Content.Server.GameObjects.Components.MachineLinking +{ + public interface ISignalReceiver { - On, - Off, - Toggle + void TriggerSignal(T signal); } } diff --git a/Content.Server/GameObjects/Components/MachineLinking/SignalButtonComponent.cs b/Content.Server/GameObjects/Components/MachineLinking/SignalButtonComponent.cs index 4fc80c5902..928f774281 100644 --- a/Content.Server/GameObjects/Components/MachineLinking/SignalButtonComponent.cs +++ b/Content.Server/GameObjects/Components/MachineLinking/SignalButtonComponent.cs @@ -1,4 +1,5 @@ -using Content.Shared.Interfaces; +using Content.Server.GameObjects.Components.MachineLinking.Signals; +using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; @@ -29,7 +30,7 @@ namespace Content.Server.GameObjects.Components.MachineLinking return; } - if (transmitter.TransmitSignal(user, SignalState.Toggle)) + if (transmitter.TransmitSignal(user, new ToggleSignal())) { // Since the button doesn't have an animation, I'm going to use a popup message Owner.PopupMessage(user, Loc.GetString("Click.")); diff --git a/Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs b/Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs index d72e9ca5ec..0ae94e641c 100644 --- a/Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs +++ b/Content.Server/GameObjects/Components/MachineLinking/SignalReceiverComponent.cs @@ -26,9 +26,9 @@ namespace Content.Server.GameObjects.Components.MachineLinking _transmitters = new List(); } - public void DistributeSignal(SignalState state) + public void DistributeSignal(T state) { - foreach (var comp in Owner.GetAllComponents()) + foreach (var comp in Owner.GetAllComponents>()) { comp.TriggerSignal(state); } diff --git a/Content.Server/GameObjects/Components/MachineLinking/SignalSwitchComponent.cs b/Content.Server/GameObjects/Components/MachineLinking/SignalSwitchComponent.cs index 6ad3734f3c..26e694f4e9 100644 --- a/Content.Server/GameObjects/Components/MachineLinking/SignalSwitchComponent.cs +++ b/Content.Server/GameObjects/Components/MachineLinking/SignalSwitchComponent.cs @@ -52,7 +52,7 @@ namespace Content.Server.GameObjects.Components.MachineLinking return; } - transmitter.TransmitSignal(user, _on ? SignalState.On : SignalState.Off); + transmitter.TransmitSignal(user, _on); } private void UpdateSprite() diff --git a/Content.Server/GameObjects/Components/MachineLinking/SignalTransmitterComponent.cs b/Content.Server/GameObjects/Components/MachineLinking/SignalTransmitterComponent.cs index eccdd7a2f9..081494309f 100644 --- a/Content.Server/GameObjects/Components/MachineLinking/SignalTransmitterComponent.cs +++ b/Content.Server/GameObjects/Components/MachineLinking/SignalTransmitterComponent.cs @@ -87,7 +87,7 @@ namespace Content.Server.GameObjects.Components.MachineLinking } } - public bool TransmitSignal(IEntity user, SignalState state) + public bool TransmitSignal(IEntity user, T signal) { if (_receivers.Count == 0) { @@ -102,7 +102,7 @@ namespace Content.Server.GameObjects.Components.MachineLinking continue; } - receiver.DistributeSignal(state); + receiver.DistributeSignal(signal); } return true; } diff --git a/Content.Server/GameObjects/Components/MachineLinking/Signals/ToggleSignal.cs b/Content.Server/GameObjects/Components/MachineLinking/Signals/ToggleSignal.cs new file mode 100644 index 0000000000..130f9cdbd9 --- /dev/null +++ b/Content.Server/GameObjects/Components/MachineLinking/Signals/ToggleSignal.cs @@ -0,0 +1,4 @@ +namespace Content.Server.GameObjects.Components.MachineLinking.Signals +{ + public class ToggleSignal {} +} diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs index 679d1096d2..366756931a 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.MachineLinking; +using Content.Server.GameObjects.Components.MachineLinking.Signals; using Content.Server.GameObjects.Components.Mobs; using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Damage; @@ -28,7 +29,7 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece /// Component that represents a wall light. It has a light bulb that can be replaced when broken. /// [RegisterComponent] - public class PoweredLightComponent : Component, IInteractHand, IInteractUsing, IMapInit, ISignalReceiver + public class PoweredLightComponent : Component, IInteractHand, IInteractUsing, IMapInit, ISignalReceiver, ISignalReceiver { [Dependency] private IGameTiming _gameTiming = default!; @@ -62,23 +63,6 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece return InsertBulb(eventArgs.Using); } - public void TriggerSignal(SignalState state) - { - switch (state) - { - case SignalState.On: - _on = true; - break; - case SignalState.Off: - _on = false; - break; - case SignalState.Toggle: - _on = !_on; - break; - } - UpdateLight(); - } - public bool InteractHand(InteractHandEventArgs eventArgs) { if (!eventArgs.User.TryGetComponent(out IDamageableComponent damageableComponent)) @@ -252,5 +236,17 @@ namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerRece var entity = Owner.EntityManager.SpawnEntity(prototype, Owner.Transform.Coordinates); _lightBulbContainer.Insert(entity); } + + public void TriggerSignal(bool signal) + { + _on = signal; + UpdateLight(); + } + + public void TriggerSignal(ToggleSignal signal) + { + _on = !_on; + UpdateLight(); + } } }