From 87c618db4b10b458de586e7a827d98eecf9d2581 Mon Sep 17 00:00:00 2001 From: Snowni <101532866+Snowni@users.noreply.github.com> Date: Fri, 22 Apr 2022 02:54:39 -0400 Subject: [PATCH] Remote Explosives (#7682) * Remote Explosives * Apparently we forgot to push the changed files. Dumb. We Forgor.# * Made Requested Changes. * And more changes. * Added requested changes and tweaked a few other things. * Fixed RSI issue (hopefully.) Readded Ensurecomp. --- Content.Client/Entry/IgnoredComponents.cs | 3 +- .../Components/TriggerOnSignalComponent.cs | 13 +++++++ .../EntitySystems/TriggerSystem.Signal.cs | 29 +++++++++++++++ .../Explosion/EntitySystems/TriggerSystem.cs | 1 + .../Components/SignallerComponent.cs | 13 +++++++ .../TriggerOnSignalReceivedComponent.cs | 9 ----- .../System/SignalButtonSystem.cs | 3 +- .../MachineLinking/System/SignallerSystem.cs | 35 ++++++++++++++++++ .../System/TriggerOnSignalReceivedSystem.cs | 25 ------------- .../Catalog/Research/technologies.yml | 2 + .../Objects/Devices/Electronics/signaller.yml | 12 ++++++ .../Objects/Devices/Electronics/triggers.yml | 14 +++++++ .../Objects/Weapons/Bombs/plastic.yml | 2 + .../Entities/Structures/Machines/lathe.yml | 4 ++ .../Prototypes/Recipes/Lathes/devices.yml | 23 ++++++++++++ .../Objects/Devices/signaller.rsi/meta.json | 17 +++++++++ .../Devices/signaller.rsi/signaller.png | Bin 0 -> 227 bytes .../Devices/signaltrigger.rsi/meta.json | 17 +++++++++ .../signaltrigger.rsi/signaltrigger.png | Bin 0 -> 15846 bytes 19 files changed, 186 insertions(+), 36 deletions(-) create mode 100644 Content.Server/Explosion/Components/TriggerOnSignalComponent.cs create mode 100644 Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs create mode 100644 Content.Server/MachineLinking/Components/SignallerComponent.cs delete mode 100644 Content.Server/MachineLinking/Components/TriggerOnSignalReceivedComponent.cs create mode 100644 Content.Server/MachineLinking/System/SignallerSystem.cs delete mode 100644 Content.Server/MachineLinking/System/TriggerOnSignalReceivedSystem.cs create mode 100644 Resources/Prototypes/Entities/Objects/Devices/Electronics/signaller.yml create mode 100644 Resources/Textures/Objects/Devices/signaller.rsi/meta.json create mode 100644 Resources/Textures/Objects/Devices/signaller.rsi/signaller.png create mode 100644 Resources/Textures/Objects/Devices/signaltrigger.rsi/meta.json create mode 100644 Resources/Textures/Objects/Devices/signaltrigger.rsi/signaltrigger.png 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 0000000000000000000000000000000000000000..309f2a9f5686305a05529babee8356e9b5800831 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyW&u7St_KbrNK8zWR+LQY4dzo5 z=5>}}Iv~7+iK&{AF{>dVp(G-%C`{E}JG9C}pPM_nFgPsRKOosNw|iy@&;-VkAirP+ zhi5m^fShPg7sn8b-lrE&^ED{&xCE{VnfU1S|N3cZ-(XuWk=)QuMhO?Rx?|D WWO{h*!YVVMH4L7velF{r5}E*`T~4V0 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5641b818b9ae3d8117e0ed8febc9f92ceb793011 GIT binary patch literal 15846 zcmeI3Ply{;7{H$t{Ij+o_MmuJrzw_JoXnqOlFgW;q?_$-pxG|Fk?wl1`!e%pci3cR zoSEHZ_aI9vvi^eQ5#1qJn>cql!1QxE<-h*Ht3pu{&b`7`^HJQi9J}C?`b{!?#O$W~gAb+y$Ky3s0Tpg{MRw42GN1r4(Q!gaW zDOIuROrv#kZpTGSJM%SdXG6>BiIc^Nd|Sm1n#hM-yVVf|wFgA}^=Zw5Xnj>v|6oXE0wg}H9^Yda)KxevdrTdyti%nu+3ZE(a1^9PZ@cd zYdXGZTU_85*6mHdkVpi9`d4>fO{X8o^1AFWMWGEHK}w3kC?j3#+c=wUBV3xU38;aZ z$nrgGCylgo)@|SR*6lGN`|7cQ@tIVs{n#Vd+iZ>u?fElX7(o~5NK3D_?I2+hdG@BO zp_whbm7}9}@0-TpaQ1i#G-KC}+U6LuKogmTsSuq|9`9A1b`kV#w`SXoVw7bIJ%rr! zbeL7#@pGo7+b!=zULZ{d=RNR-%FsteS;Q$Mrg>ScNmFV{RHZZ)RZ)yNiDnW$sRyG`g9%_dw!f@7`ag~4EKWpUrUT2T zEYlCVb+}MsIA#_6gGTLr2|w(iVn$I?N?ss`Ns9%ujT*~k6Zc^+=qD*0DYPLKBMn!^ z8O9V{!|14Dk7Z#EMx*$l4?k}T{RhsW^6Yo9JNaXTdbp=G!TAas%8qVplN3>N`}E;3wnK7^LxB7o3EhKtUJ&@x;E z5W2{4(fJTshKm3~7a1-(A41D;5kTl7!$s#qXc;a72wh~j=zIt*!$kn0iwqZ?520na z2q1Kk;iB^)vIv+yI za1lW0BEv=JLueT;0tj7XxafQcEyG0sp^FR`oe!a9xCkJ0k&0_#@Cqlg@Ozsr{DS6* z<=6khFL!d<++r1goyP#!y$Hac9en=9hK^`BpUepS8a?L$xR{xo$2 zlpX*(yXRk>JbpHJ>HFuNIkkK3>o;#){Nb`)x$xx2zdic?@#}YkFRwiQ-jDDIepwrU N%FKNEol~n9{sCamYEl3I literal 0 HcmV?d00001