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