diff --git a/Content.Client/Entry/IgnoredComponents.cs b/Content.Client/Entry/IgnoredComponents.cs index b108266e4f..0ce540980a 100644 --- a/Content.Client/Entry/IgnoredComponents.cs +++ b/Content.Client/Entry/IgnoredComponents.cs @@ -108,6 +108,7 @@ namespace Content.Client.Entry "SolarControlConsole", "Thruster", "FlashOnTrigger", + "Signaller", "TriggerOnCollide", "DeleteOnTrigger", "EmptyOnMachineDeconstruct", @@ -290,7 +291,7 @@ namespace Content.Client.Entry "IncreaseDamageOnWield", "TabletopGame", "LitOnPowered", - "TriggerOnSignalReceived", + "TriggerOnSignal", "DeviceNetwork", "WiredNetworkConnection", "WirelessNetworkConnection", diff --git a/Content.Server/Explosion/Components/TriggerOnSignalComponent.cs b/Content.Server/Explosion/Components/TriggerOnSignalComponent.cs new file mode 100644 index 0000000000..cbb1db093d --- /dev/null +++ b/Content.Server/Explosion/Components/TriggerOnSignalComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameObjects; + +namespace Content.Server.Explosion.Components +{ + /// + /// Sends a trigger when signal is received. + /// + [RegisterComponent] + public sealed class TriggerOnSignalComponent : Component + { + public const string Port = "Trigger"; + } +} \ No newline at end of file diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs new file mode 100644 index 0000000000..c484c78c8d --- /dev/null +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs @@ -0,0 +1,29 @@ +using Content.Server.Explosion.Components; +using Content.Server.MachineLinking.Events; +using Content.Server.MachineLinking.Components; + +namespace Content.Server.Explosion.EntitySystems +{ + public sealed partial class TriggerSystem + { + private void InitializeSignal() + { + SubscribeLocalEvent(OnSignalReceived); + SubscribeLocalEvent(OnInit); + } + + private void OnSignalReceived(EntityUid uid, TriggerOnSignalComponent component, SignalReceivedEvent args) + { + if (args.Port != TriggerOnSignalComponent.Port) + return; + + Trigger(uid); + } + private void OnInit(EntityUid uid, TriggerOnSignalComponent component, ComponentInit args) + { + var receiver = EnsureComp(uid); + if (!receiver.Inputs.ContainsKey(TriggerOnSignalComponent.Port)) + receiver.AddPort(TriggerOnSignalComponent.Port); + } + } +} \ No newline at end of file diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs index aab92a3e3b..5efa046c24 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs @@ -46,6 +46,7 @@ namespace Content.Server.Explosion.EntitySystems InitializeProximity(); InitializeOnUse(); + InitializeSignal(); SubscribeLocalEvent(OnTriggerCollide); diff --git a/Content.Server/MachineLinking/Components/SignallerComponent.cs b/Content.Server/MachineLinking/Components/SignallerComponent.cs new file mode 100644 index 0000000000..5397eeb30d --- /dev/null +++ b/Content.Server/MachineLinking/Components/SignallerComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameObjects; + +namespace Content.Server.MachineLinking.Components +{ + /// + /// Sends out a signal to machine linked objects. + /// + [RegisterComponent] + public sealed class SignallerComponent : Component + { + public const string Port = "Pressed"; + } +} diff --git a/Content.Server/MachineLinking/Components/TriggerOnSignalReceivedComponent.cs b/Content.Server/MachineLinking/Components/TriggerOnSignalReceivedComponent.cs deleted file mode 100644 index e5b81732bb..0000000000 --- a/Content.Server/MachineLinking/Components/TriggerOnSignalReceivedComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Robust.Shared.GameObjects; - -namespace Content.Server.MachineLinking.Components -{ - [RegisterComponent] - public sealed class TriggerOnSignalReceivedComponent : Component - { - } -} diff --git a/Content.Server/MachineLinking/System/SignalButtonSystem.cs b/Content.Server/MachineLinking/System/SignalButtonSystem.cs index a857039265..37127acbc9 100644 --- a/Content.Server/MachineLinking/System/SignalButtonSystem.cs +++ b/Content.Server/MachineLinking/System/SignalButtonSystem.cs @@ -3,6 +3,7 @@ using Content.Server.MachineLinking.Events; using Content.Shared.Interaction; using JetBrains.Annotations; using Robust.Shared.GameObjects; +using Content.Shared.Interaction.Events; namespace Content.Server.MachineLinking.System { @@ -29,4 +30,4 @@ namespace Content.Server.MachineLinking.System args.Handled = true; } } -} +} \ No newline at end of file diff --git a/Content.Server/MachineLinking/System/SignallerSystem.cs b/Content.Server/MachineLinking/System/SignallerSystem.cs new file mode 100644 index 0000000000..c839732e2b --- /dev/null +++ b/Content.Server/MachineLinking/System/SignallerSystem.cs @@ -0,0 +1,35 @@ +using Content.Server.MachineLinking.Components; +using Content.Server.MachineLinking.Events; +using Content.Shared.Interaction; +using JetBrains.Annotations; +using Robust.Shared.GameObjects; +using Content.Shared.Interaction.Events; + +namespace Content.Server.MachineLinking.System +{ + [UsedImplicitly] + public sealed class SignallerSystem : EntitySystem + { + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnUseInHand); + } + + private void OnInit(EntityUid uid, SignallerComponent component, ComponentInit args) + { + var transmitter = EnsureComp(uid); + if (!transmitter.Outputs.ContainsKey(SignallerComponent.Port)) + transmitter.AddPort(SignallerComponent.Port); + } + + private void OnUseInHand(EntityUid uid, SignallerComponent component, UseInHandEvent args) + { + if (args.Handled) + return; + RaiseLocalEvent(uid, new InvokePortEvent(SignallerComponent.Port), false); + args.Handled = true; + } + } +} \ No newline at end of file diff --git a/Content.Server/MachineLinking/System/TriggerOnSignalReceivedSystem.cs b/Content.Server/MachineLinking/System/TriggerOnSignalReceivedSystem.cs deleted file mode 100644 index 034a12606a..0000000000 --- a/Content.Server/MachineLinking/System/TriggerOnSignalReceivedSystem.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Content.Server.Explosion.EntitySystems; -using Content.Server.MachineLinking.Components; -using Content.Server.MachineLinking.Events; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; - -namespace Content.Server.MachineLinking.System -{ - public sealed class TriggerOnSignalReceivedSystem : EntitySystem - { - [Dependency] private readonly TriggerSystem _trigger = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnSignalReceived); - } - - private void OnSignalReceived(EntityUid uid, TriggerOnSignalReceivedComponent component, SignalReceivedEvent args) - { - _trigger.Trigger(uid); - } - } -} diff --git a/Resources/Prototypes/Catalog/Research/technologies.yml b/Resources/Prototypes/Catalog/Research/technologies.yml index 60c764eef5..3191f71060 100644 --- a/Resources/Prototypes/Catalog/Research/technologies.yml +++ b/Resources/Prototypes/Catalog/Research/technologies.yml @@ -343,6 +343,8 @@ - SolarControlComputerCircuitboard - GeneratorPlasmaMachineCircuitboard - GeneratorUraniumMachineCircuitboard + - Signaller + - SignalTrigger - type: technology name: "compact power technology" diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/signaller.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/signaller.yml new file mode 100644 index 0000000000..3d12d92f35 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/signaller.yml @@ -0,0 +1,12 @@ +#Remote Signaller Device + +- type: entity + parent: BaseItem + id: RemoteSignaller + name: remote signaller + description: A handheld device used for remotely sending signals to objects. + components: + - type: Sprite + sprite: Objects/Devices/signaller.rsi + state: signaller + - type: Signaller \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml index 8189e1c1c0..3b5083116a 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml @@ -25,3 +25,17 @@ delayOptions: [3, 5, 10, 15, 30] initialBeepDelay: 0 beepSound: /Audio/Machines/Nuke/general_beep.ogg + +- type: entity + parent: TimerTrigger + id: SignalTrigger + name: signal trigger + description: Adds a machine link that is triggered by signals. + components: + - type: Sprite + sprite: Objects/Devices/signaltrigger.rsi + state: signaltrigger + - type: PayloadTrigger + components: + - type: TriggerOnSignal + - type: SignalReceiver \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml index c68498cab8..7de57c3e61 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml @@ -16,6 +16,8 @@ initialBeepDelay: 0 beepSound: /Audio/Machines/Nuke/general_beep.ogg startOnStick: true + - type: TriggerOnSignal + - type: SignalReceiver - type: Sticky stickDelay: 5 unstickDelay: 5 diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index c290c2d87e..434ca76874 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -193,6 +193,8 @@ - TimerTrigger - ChemicalPayload - FlashPayload + - Signaller + - SignalTrigger - type: ActivatableUI key: enum.LatheUiKey.Key #Yes only having 1 of them here doesn't break anything - type: ActivatableUIRequiresPower @@ -303,6 +305,8 @@ - CableMVStack - CableHVStack - TimerTrigger + - Signaller + - SignalTrigger - type: entity parent: Autolathe diff --git a/Resources/Prototypes/Recipes/Lathes/devices.yml b/Resources/Prototypes/Recipes/Lathes/devices.yml index 4ccbce8580..4aaa6d197d 100644 --- a/Resources/Prototypes/Recipes/Lathes/devices.yml +++ b/Resources/Prototypes/Recipes/Lathes/devices.yml @@ -9,6 +9,17 @@ Steel: 300 Plastic: 200 +- type: latheRecipe + id: SignalTrigger + icon: + sprite: Objects/Devices/signaltrigger.rsi + state: signaltrigger + result: SignalTrigger + completetime: 2 + materials: + Steel: 300 + Plastic: 200 + - type: latheRecipe id: ChemicalPayload icon: @@ -32,3 +43,15 @@ Plastic: 100 Glass: 50 #one fourth of what making a flash would cost + +- type: latheRecipe + id: Signaller + icon: + sprite: Objects/Devices/signaller.rsi + state: signaller + result: RemoteSignaller + completetime: 2 + materials: + Steel: 100 + Plastic: 200 + Glass: 100 diff --git a/Resources/Textures/Objects/Devices/signaller.rsi/meta.json b/Resources/Textures/Objects/Devices/signaller.rsi/meta.json new file mode 100644 index 0000000000..de2d6083ca --- /dev/null +++ b/Resources/Textures/Objects/Devices/signaller.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/tgstation/tgstation/commit/1dc83191daf55d54f5e1285c2f8b1af8c2c99b75", + + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "signaller", + "directions": 1 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Devices/signaller.rsi/signaller.png b/Resources/Textures/Objects/Devices/signaller.rsi/signaller.png new file mode 100644 index 0000000000..309f2a9f56 Binary files /dev/null and b/Resources/Textures/Objects/Devices/signaller.rsi/signaller.png differ diff --git a/Resources/Textures/Objects/Devices/signaltrigger.rsi/meta.json b/Resources/Textures/Objects/Devices/signaltrigger.rsi/meta.json new file mode 100644 index 0000000000..832264cdcf --- /dev/null +++ b/Resources/Textures/Objects/Devices/signaltrigger.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/tgstation/tgstation/blob/master/icons/obj/assemblies/new_assemblies.dmi", + + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "signaltrigger", + "directions": 1 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Devices/signaltrigger.rsi/signaltrigger.png b/Resources/Textures/Objects/Devices/signaltrigger.rsi/signaltrigger.png new file mode 100644 index 0000000000..5641b818b9 Binary files /dev/null and b/Resources/Textures/Objects/Devices/signaltrigger.rsi/signaltrigger.png differ