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.
This commit is contained in:
Snowni
2022-04-22 02:54:39 -04:00
committed by GitHub
parent 2690c28eea
commit 87c618db4b
19 changed files with 186 additions and 36 deletions

View File

@@ -108,6 +108,7 @@ namespace Content.Client.Entry
"SolarControlConsole", "SolarControlConsole",
"Thruster", "Thruster",
"FlashOnTrigger", "FlashOnTrigger",
"Signaller",
"TriggerOnCollide", "TriggerOnCollide",
"DeleteOnTrigger", "DeleteOnTrigger",
"EmptyOnMachineDeconstruct", "EmptyOnMachineDeconstruct",
@@ -290,7 +291,7 @@ namespace Content.Client.Entry
"IncreaseDamageOnWield", "IncreaseDamageOnWield",
"TabletopGame", "TabletopGame",
"LitOnPowered", "LitOnPowered",
"TriggerOnSignalReceived", "TriggerOnSignal",
"DeviceNetwork", "DeviceNetwork",
"WiredNetworkConnection", "WiredNetworkConnection",
"WirelessNetworkConnection", "WirelessNetworkConnection",

View File

@@ -0,0 +1,13 @@
using Robust.Shared.GameObjects;
namespace Content.Server.Explosion.Components
{
/// <summary>
/// Sends a trigger when signal is received.
/// </summary>
[RegisterComponent]
public sealed class TriggerOnSignalComponent : Component
{
public const string Port = "Trigger";
}
}

View File

@@ -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<TriggerOnSignalComponent,SignalReceivedEvent>(OnSignalReceived);
SubscribeLocalEvent<TriggerOnSignalComponent,ComponentInit>(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<SignalReceiverComponent>(uid);
if (!receiver.Inputs.ContainsKey(TriggerOnSignalComponent.Port))
receiver.AddPort(TriggerOnSignalComponent.Port);
}
}
}

View File

@@ -46,6 +46,7 @@ namespace Content.Server.Explosion.EntitySystems
InitializeProximity(); InitializeProximity();
InitializeOnUse(); InitializeOnUse();
InitializeSignal();
SubscribeLocalEvent<TriggerOnCollideComponent, StartCollideEvent>(OnTriggerCollide); SubscribeLocalEvent<TriggerOnCollideComponent, StartCollideEvent>(OnTriggerCollide);

View File

@@ -0,0 +1,13 @@
using Robust.Shared.GameObjects;
namespace Content.Server.MachineLinking.Components
{
/// <summary>
/// Sends out a signal to machine linked objects.
/// </summary>
[RegisterComponent]
public sealed class SignallerComponent : Component
{
public const string Port = "Pressed";
}
}

View File

@@ -1,9 +0,0 @@
using Robust.Shared.GameObjects;
namespace Content.Server.MachineLinking.Components
{
[RegisterComponent]
public sealed class TriggerOnSignalReceivedComponent : Component
{
}
}

View File

@@ -3,6 +3,7 @@ using Content.Server.MachineLinking.Events;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Content.Shared.Interaction.Events;
namespace Content.Server.MachineLinking.System namespace Content.Server.MachineLinking.System
{ {

View File

@@ -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<SignallerComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<SignallerComponent, UseInHandEvent>(OnUseInHand);
}
private void OnInit(EntityUid uid, SignallerComponent component, ComponentInit args)
{
var transmitter = EnsureComp<SignalTransmitterComponent>(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;
}
}
}

View File

@@ -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<TriggerOnSignalReceivedComponent, SignalReceivedEvent>(OnSignalReceived);
}
private void OnSignalReceived(EntityUid uid, TriggerOnSignalReceivedComponent component, SignalReceivedEvent args)
{
_trigger.Trigger(uid);
}
}
}

View File

@@ -343,6 +343,8 @@
- SolarControlComputerCircuitboard - SolarControlComputerCircuitboard
- GeneratorPlasmaMachineCircuitboard - GeneratorPlasmaMachineCircuitboard
- GeneratorUraniumMachineCircuitboard - GeneratorUraniumMachineCircuitboard
- Signaller
- SignalTrigger
- type: technology - type: technology
name: "compact power technology" name: "compact power technology"

View File

@@ -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

View File

@@ -25,3 +25,17 @@
delayOptions: [3, 5, 10, 15, 30] delayOptions: [3, 5, 10, 15, 30]
initialBeepDelay: 0 initialBeepDelay: 0
beepSound: /Audio/Machines/Nuke/general_beep.ogg 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

View File

@@ -16,6 +16,8 @@
initialBeepDelay: 0 initialBeepDelay: 0
beepSound: /Audio/Machines/Nuke/general_beep.ogg beepSound: /Audio/Machines/Nuke/general_beep.ogg
startOnStick: true startOnStick: true
- type: TriggerOnSignal
- type: SignalReceiver
- type: Sticky - type: Sticky
stickDelay: 5 stickDelay: 5
unstickDelay: 5 unstickDelay: 5

View File

@@ -193,6 +193,8 @@
- TimerTrigger - TimerTrigger
- ChemicalPayload - ChemicalPayload
- FlashPayload - FlashPayload
- Signaller
- SignalTrigger
- type: ActivatableUI - type: ActivatableUI
key: enum.LatheUiKey.Key #Yes only having 1 of them here doesn't break anything key: enum.LatheUiKey.Key #Yes only having 1 of them here doesn't break anything
- type: ActivatableUIRequiresPower - type: ActivatableUIRequiresPower
@@ -303,6 +305,8 @@
- CableMVStack - CableMVStack
- CableHVStack - CableHVStack
- TimerTrigger - TimerTrigger
- Signaller
- SignalTrigger
- type: entity - type: entity
parent: Autolathe parent: Autolathe

View File

@@ -9,6 +9,17 @@
Steel: 300 Steel: 300
Plastic: 200 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 - type: latheRecipe
id: ChemicalPayload id: ChemicalPayload
icon: icon:
@@ -32,3 +43,15 @@
Plastic: 100 Plastic: 100
Glass: 50 Glass: 50
#one fourth of what making a flash would cost #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

View File

@@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

View File

@@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB