From c01ec294d015a6f222ae806374f179e9fa9bba08 Mon Sep 17 00:00:00 2001
From: Princess Cheeseballs
<66055347+Princess-Cheeseballs@users.noreply.github.com>
Date: Fri, 24 Oct 2025 17:00:55 -0700
Subject: [PATCH] Reduce Triggers Boilerplate. (#41086)
* Push 1
* cleanup + master merge
* launchontrigger
* A crumb of cleanup
---------
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
---
.../Effects/LaunchOnTriggerComponent.cs | 5 +-
.../Trigger/SharedTriggerSystems.cs | 41 ++++++++++++++
.../Systems/ComponentsOnTriggerSystem.cs | 55 +++++-------------
.../Trigger/Systems/DamageOnTriggerSystem.cs | 21 +------
.../Systems/DnaScrambleOnTriggerSystem.cs | 37 ++++--------
.../Systems/EmitSoundOnTriggerSystem.cs | 21 +------
.../Trigger/Systems/EmpOnTriggerSystem.cs | 21 +------
.../Systems/EntityEffectOnTriggerSystem.cs | 21 +------
.../Trigger/Systems/ExplodeOnTriggerSystem.cs | 56 ++++++-------------
.../Trigger/Systems/FlashOnTriggerSystem.cs | 21 +------
.../Trigger/Systems/GibOnTriggerSystem.cs | 24 ++------
.../Trigger/Systems/LaunchOnTriggerSystem.cs | 27 ++-------
.../Trigger/Systems/LockOnTriggerSystem.cs | 22 ++------
.../Trigger/Systems/PopupOnTriggerSystem.cs | 52 ++++++++---------
.../Systems/RejuvenateOnTriggerSystem.cs | 21 +------
.../Systems/RepulseAttractOnTriggerSystem.cs | 22 +-------
.../Trigger/Systems/ScramOnTriggerSystem.cs | 20 ++-----
.../Trigger/Systems/ShockOnTriggerSystem.cs | 27 ++-------
.../Trigger/Systems/SolutionTriggerSystem.cs | 22 +-------
.../Systems/StaminaDamageOnTriggerSystem.cs | 24 ++------
.../Systems/TriggerOnActivateImplantSystem.cs | 6 +-
.../TriggerOnContainerInteractionSystem.cs | 11 ++--
.../Systems/TriggerOnEmptyGunshotSystem.cs | 6 +-
.../Systems/TriggerOnEquipmentSystem.cs | 11 ++--
...riggerSystem.cs => TriggerOnHandSystem.cs} | 13 ++---
.../Trigger/Systems/TriggerOnHitscanSystem.cs | 8 +--
.../Trigger/Systems/TriggerOnLandSystem.cs | 6 +-
...iggerSystem.cs => TriggerOnMeleeSystem.cs} | 12 ++--
.../Systems/TriggerOnMobstateChangeSystem.cs | 7 +--
.../Systems/TriggerOnRoundEndSystem.cs | 6 +-
.../Trigger/Systems/TriggerOnSlipSystem.cs | 6 +-
.../TriggerOnStrappedOrBuckledSystem.cs | 12 ++--
.../Trigger/Systems/TriggerOnStuckSystem.cs | 6 +-
.../Trigger/Systems/TriggerOnToolUseSystem.cs | 6 +-
.../Trigger/Systems/TriggerOnVerbSystem.cs | 6 +-
.../Trigger/Systems/UncuffOnTriggerSystem.cs | 23 ++------
.../Trigger/Systems/WeatherTriggerSystem.cs | 21 +------
.../Prototypes/Entities/Objects/Fun/toys.yml | 2 +-
38 files changed, 219 insertions(+), 509 deletions(-)
create mode 100644 Content.Shared/Trigger/SharedTriggerSystems.cs
rename Content.Shared/Trigger/Systems/{HandTriggerSystem.cs => TriggerOnHandSystem.cs} (81%)
rename Content.Shared/Trigger/Systems/{MeleeTriggerSystem.cs => TriggerOnMeleeSystem.cs} (78%)
diff --git a/Content.Shared/Trigger/Components/Effects/LaunchOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/LaunchOnTriggerComponent.cs
index eae877d7b6..e86fe9cef1 100644
--- a/Content.Shared/Trigger/Components/Effects/LaunchOnTriggerComponent.cs
+++ b/Content.Shared/Trigger/Components/Effects/LaunchOnTriggerComponent.cs
@@ -9,6 +9,9 @@ namespace Content.Shared.Trigger.Components.Effects;
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class LaunchOnTriggerComponent : BaseXOnTriggerComponent
{
+ ///
+ /// A linear impulse applied to the target, measured in kg * m / s
+ ///
[DataField, AutoNetworkedField]
- public float Speed = 10.0f;
+ public float Impulse = 10.0f;
}
diff --git a/Content.Shared/Trigger/SharedTriggerSystems.cs b/Content.Shared/Trigger/SharedTriggerSystems.cs
new file mode 100644
index 0000000000..bb500398c3
--- /dev/null
+++ b/Content.Shared/Trigger/SharedTriggerSystems.cs
@@ -0,0 +1,41 @@
+using Content.Shared.Trigger.Components.Effects;
+using Content.Shared.Trigger.Systems;
+
+namespace Content.Shared.Trigger;
+
+///
+/// This is a base Trigger system which handles all the boilerplate for triggers automagically!
+///
+public abstract class TriggerOnXSystem : EntitySystem
+{
+ [Dependency] protected readonly TriggerSystem Trigger = default!;
+}
+
+///
+/// This is a base Trigger system which handles all the boilerplate for triggers automagically!
+///
+public abstract class XOnTriggerSystem : EntitySystem where T : BaseXOnTriggerComponent
+{
+ ///
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnTrigger);
+ }
+
+ private void OnTrigger(Entity ent, ref TriggerEvent args)
+ {
+ if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
+ return;
+
+ var target = ent.Comp.TargetUser ? args.User : ent.Owner;
+
+ if (target is not { } uid)
+ return;
+
+ OnTrigger(ent, uid, ref args);
+ }
+
+ protected abstract void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args);
+}
diff --git a/Content.Shared/Trigger/Systems/ComponentsOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/ComponentsOnTriggerSystem.cs
index f4e144b7ce..ab654273f0 100644
--- a/Content.Shared/Trigger/Systems/ComponentsOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/ComponentsOnTriggerSystem.cs
@@ -2,71 +2,44 @@ using Content.Shared.Trigger.Components.Effects;
namespace Content.Shared.Trigger.Systems;
-public sealed partial class ComponentsOnTriggerSystem : EntitySystem
+public sealed partial class AddComponentsOnTriggerSystem : XOnTriggerSystem
{
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(HandleAddTrigger);
- SubscribeLocalEvent(HandleRemoveTrigger);
- SubscribeLocalEvent(HandleToggleTrigger);
- }
-
- private void HandleAddTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
if (ent.Comp.TriggerOnce && ent.Comp.Triggered)
return;
- EntityManager.AddComponents(target.Value, ent.Comp.Components, ent.Comp.RemoveExisting);
+ EntityManager.AddComponents(target, ent.Comp.Components, ent.Comp.RemoveExisting);
ent.Comp.Triggered = true;
Dirty(ent);
args.Handled = true;
}
+}
- private void HandleRemoveTrigger(Entity ent, ref TriggerEvent args)
+public sealed partial class RemoveComponentsOnTriggerSystem : XOnTriggerSystem
+{
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
if (ent.Comp.TriggerOnce && ent.Comp.Triggered)
return;
- EntityManager.RemoveComponents(target.Value, ent.Comp.Components);
+ EntityManager.RemoveComponents(target, ent.Comp.Components);
ent.Comp.Triggered = true;
Dirty(ent);
args.Handled = true;
}
+}
- private void HandleToggleTrigger(Entity ent, ref TriggerEvent args)
+public sealed partial class ToggleComponentsOnTriggerSystem : XOnTriggerSystem
+{
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
if (!ent.Comp.ComponentsAdded)
- EntityManager.AddComponents(target.Value, ent.Comp.Components, ent.Comp.RemoveExisting);
+ EntityManager.AddComponents(target, ent.Comp.Components, ent.Comp.RemoveExisting);
else
- EntityManager.RemoveComponents(target.Value, ent.Comp.Components);
+ EntityManager.RemoveComponents(target, ent.Comp.Components);
ent.Comp.ComponentsAdded = !ent.Comp.ComponentsAdded;
Dirty(ent);
diff --git a/Content.Shared/Trigger/Systems/DamageOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/DamageOnTriggerSystem.cs
index 8f30c852ea..cdcb1044f7 100644
--- a/Content.Shared/Trigger/Systems/DamageOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/DamageOnTriggerSystem.cs
@@ -3,29 +3,14 @@ using Content.Shared.Trigger.Components.Effects;
namespace Content.Shared.Trigger.Systems;
-public sealed class DamageOnTriggerSystem : EntitySystem
+public sealed class DamageOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly DamageableSystem _damageableSystem = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
var damage = new DamageSpecifier(ent.Comp.Damage);
- var ev = new BeforeDamageOnTriggerEvent(damage, target.Value);
+ var ev = new BeforeDamageOnTriggerEvent(damage, target);
RaiseLocalEvent(ent.Owner, ref ev);
args.Handled |= _damageableSystem.TryChangeDamage(target, ev.Damage, ent.Comp.IgnoreResistances, origin: ent.Owner) is not null;
diff --git a/Content.Shared/Trigger/Systems/DnaScrambleOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/DnaScrambleOnTriggerSystem.cs
index af5a73ffb6..51bf4e8659 100644
--- a/Content.Shared/Trigger/Systems/DnaScrambleOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/DnaScrambleOnTriggerSystem.cs
@@ -9,7 +9,7 @@ using Robust.Shared.Network;
namespace Content.Shared.Trigger.Systems;
-public sealed class DnaScrambleOnTriggerSystem : EntitySystem
+public sealed class DnaScrambleOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly MetaDataSystem _metaData = default!;
[Dependency] private readonly SharedHumanoidAppearanceSystem _humanoidAppearance = default!;
@@ -18,23 +18,8 @@ public sealed class DnaScrambleOnTriggerSystem : EntitySystem
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly INetManager _net = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
if (!TryComp(target, out var humanoid))
return;
@@ -46,21 +31,21 @@ public sealed class DnaScrambleOnTriggerSystem : EntitySystem
return;
var newProfile = HumanoidCharacterProfile.RandomWithSpecies(humanoid.Species);
- _humanoidAppearance.LoadProfile(target.Value, newProfile, humanoid);
- _metaData.SetEntityName(target.Value, newProfile.Name, raiseEvents: false); // raising events would update ID card, station record, etc.
+ _humanoidAppearance.LoadProfile(target, newProfile, humanoid);
+ _metaData.SetEntityName(target, newProfile.Name, raiseEvents: false); // raising events would update ID card, station record, etc.
// If the entity has the respective components, then scramble the dna and fingerprint strings.
- _forensics.RandomizeDNA(target.Value);
- _forensics.RandomizeFingerprint(target.Value);
+ _forensics.RandomizeDNA(target);
+ _forensics.RandomizeFingerprint(target);
- RemComp(target.Value); // remove MRP+ custom description if one exists
- _identity.QueueIdentityUpdate(target.Value); // manually queue identity update since we don't raise the event
+ RemComp(target); // remove MRP+ custom description if one exists
+ _identity.QueueIdentityUpdate(target); // manually queue identity update since we don't raise the event
// Can't use PopupClient or PopupPredicted because the trigger might be unpredicted.
- _popup.PopupEntity(Loc.GetString("scramble-on-trigger-popup"), target.Value, target.Value);
+ _popup.PopupEntity(Loc.GetString("scramble-on-trigger-popup"), target, target);
- var ev = new DnaScrambledEvent(target.Value);
- RaiseLocalEvent(target.Value, ref ev, true);
+ var ev = new DnaScrambledEvent(target);
+ RaiseLocalEvent(target, ref ev, true);
}
}
diff --git a/Content.Shared/Trigger/Systems/EmitSoundOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/EmitSoundOnTriggerSystem.cs
index e296ccc177..b2ad01dd9a 100644
--- a/Content.Shared/Trigger/Systems/EmitSoundOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/EmitSoundOnTriggerSystem.cs
@@ -4,29 +4,14 @@ using Robust.Shared.Network;
namespace Content.Shared.Trigger.Systems;
-public sealed class EmitSoundOnTriggerSystem : EntitySystem
+public sealed class EmitSoundOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly INetManager _netMan = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
- args.Handled |= TryEmitSound(ent, target.Value, args.User);
+ args.Handled |= TryEmitSound(ent, target, args.User);
}
private bool TryEmitSound(Entity ent, EntityUid target, EntityUid? user = null)
diff --git a/Content.Shared/Trigger/Systems/EmpOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/EmpOnTriggerSystem.cs
index 50fb7a25e4..6cefafcadc 100644
--- a/Content.Shared/Trigger/Systems/EmpOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/EmpOnTriggerSystem.cs
@@ -3,28 +3,13 @@ using Content.Shared.Trigger.Components.Effects;
namespace Content.Shared.Trigger.Systems;
-public sealed class EmpOnTriggerSystem : EntitySystem
+public sealed class EmpOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly SharedEmpSystem _emp = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
- _emp.EmpPulse(Transform(target.Value).Coordinates, ent.Comp.Range, ent.Comp.EnergyConsumption, ent.Comp.DisableDuration, args.User);
+ _emp.EmpPulse(Transform(target).Coordinates, ent.Comp.Range, ent.Comp.EnergyConsumption, ent.Comp.DisableDuration, args.User);
args.Handled = true;
}
}
diff --git a/Content.Shared/Trigger/Systems/EntityEffectOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/EntityEffectOnTriggerSystem.cs
index 021b72d86f..294bf9660f 100644
--- a/Content.Shared/Trigger/Systems/EntityEffectOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/EntityEffectOnTriggerSystem.cs
@@ -3,28 +3,13 @@ using Content.Shared.Trigger.Components.Effects;
namespace Content.Shared.Trigger.Systems;
-public sealed class EntityEffectOnTriggerSystem : EntitySystem
+public sealed class EntityEffectOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly SharedEntityEffectsSystem _effects = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
- _effects.ApplyEffects(target.Value, ent.Comp.Effects, ent.Comp.Scale);
+ _effects.ApplyEffects(target, ent.Comp.Effects, ent.Comp.Scale);
args.Handled = true;
}
}
diff --git a/Content.Shared/Trigger/Systems/ExplodeOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/ExplodeOnTriggerSystem.cs
index 120aa23a9d..239d490820 100644
--- a/Content.Shared/Trigger/Systems/ExplodeOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/ExplodeOnTriggerSystem.cs
@@ -3,52 +3,32 @@ using Content.Shared.Trigger.Components.Effects;
namespace Content.Shared.Trigger.Systems;
-public sealed class ExplodeOnTriggerSystem : EntitySystem
+public sealed class ExplodeOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly SharedExplosionSystem _explosion = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnExplodeTrigger);
- SubscribeLocalEvent(OnQueueExplosionTrigger);
- }
-
- private void OnExplodeTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
- _explosion.TriggerExplosive(target.Value, user: args.User);
+ _explosion.TriggerExplosive(target, user: args.User);
args.Handled = true;
}
+}
- private void OnQueueExplosionTrigger(Entity ent, ref TriggerEvent args)
- {
- var (uid, comp) = ent;
- if (args.Key != null && !comp.KeysIn.Contains(args.Key))
- return;
-
- var target = comp.TargetUser ? args.User : uid;
-
- if (target == null)
- return;
+public sealed class ExplosionOnTriggerSystem : XOnTriggerSystem
+{
+ [Dependency] private readonly SharedExplosionSystem _explosion = default!;
- _explosion.QueueExplosion(target.Value,
- comp.ExplosionType,
- comp.TotalIntensity,
- comp.IntensitySlope,
- comp.MaxTileIntensity,
- comp.TileBreakScale,
- comp.MaxTileBreak,
- comp.CanCreateVacuum,
- args.User);
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
+ {
+ _explosion.QueueExplosion(target,
+ ent.Comp.ExplosionType,
+ ent.Comp.TotalIntensity,
+ ent.Comp.IntensitySlope,
+ ent.Comp.MaxTileIntensity,
+ ent.Comp.TileBreakScale,
+ ent.Comp.MaxTileBreak,
+ ent.Comp.CanCreateVacuum,
+ args.User);
args.Handled = true;
}
}
diff --git a/Content.Shared/Trigger/Systems/FlashOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/FlashOnTriggerSystem.cs
index 6153e228bf..ca2dee6274 100644
--- a/Content.Shared/Trigger/Systems/FlashOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/FlashOnTriggerSystem.cs
@@ -3,28 +3,13 @@ using Content.Shared.Trigger.Components.Effects;
namespace Content.Shared.Trigger.Systems;
-public sealed class FlashOnTriggerSystem : EntitySystem
+public sealed class FlashOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly SharedFlashSystem _flash = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
- _flash.FlashArea(target.Value, args.User, ent.Comp.Range, ent.Comp.Duration, probability: ent.Comp.Probability);
+ _flash.FlashArea(target, args.User, ent.Comp.Range, ent.Comp.Duration, probability: ent.Comp.Probability);
args.Handled = true;
}
}
diff --git a/Content.Shared/Trigger/Systems/GibOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/GibOnTriggerSystem.cs
index 95ef5ec1db..237c925716 100644
--- a/Content.Shared/Trigger/Systems/GibOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/GibOnTriggerSystem.cs
@@ -4,37 +4,23 @@ using Content.Shared.Trigger.Components.Effects;
namespace Content.Shared.Trigger.Systems;
-public sealed class GibOnTriggerSystem : EntitySystem
+public sealed class GibOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly SharedBodySystem _body = default!;
[Dependency] private readonly InventorySystem _inventory = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
if (ent.Comp.DeleteItems)
{
- var items = _inventory.GetHandOrInventoryEntities(target.Value);
+ var items = _inventory.GetHandOrInventoryEntities(target);
foreach (var item in items)
{
PredictedQueueDel(item);
}
}
- _body.GibBody(target.Value, true);
+
+ _body.GibBody(target, true);
args.Handled = true;
}
}
diff --git a/Content.Shared/Trigger/Systems/LaunchOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/LaunchOnTriggerSystem.cs
index 45b794d6ff..8bc7dd16c0 100644
--- a/Content.Shared/Trigger/Systems/LaunchOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/LaunchOnTriggerSystem.cs
@@ -5,43 +5,26 @@ using Robust.Shared.Physics.Systems;
namespace Content.Shared.Trigger.Systems;
-public sealed class LaunchOnTriggerSystem : EntitySystem
+public sealed class LaunchOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target is null)
- return;
-
if (!TryComp(target, out PhysicsComponent? phys))
return;
- var linearVelocity = _physics.GetMapLinearVelocity(target.Value);
+ var linearVelocity = _physics.GetMapLinearVelocity(target);
// If the linear velocity is length 0, this means it's not moving. Given we want to move it in some direction...
if (linearVelocity.IsLengthZero())
// An object that isn't moving is launched in the direction its facing, not the direction it's rotated (objects face away from their rotation).
- linearVelocity = _transform.GetWorldRotation(target.Value).RotateVec(Vector2.UnitY) * -1;
+ linearVelocity = _transform.GetWorldRotation(target).RotateVec(Vector2.UnitY) * -1;
// When triggered, take the direction the target is moving in (the normalized vector) and multiply it by the speed.
// Then apply an impulse to the target on the new vector.
// (If the target is moving NE at 10 m/s, this impulses it NE at speed m/s)
- _physics.ApplyLinearImpulse(target.Value,
- linearVelocity.Normalized() * ent.Comp.Speed,
- body: phys);
+ _physics.ApplyLinearImpulse(target, linearVelocity.Normalized() * ent.Comp.Impulse, body: phys);
args.Handled = true;
}
diff --git a/Content.Shared/Trigger/Systems/LockOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/LockOnTriggerSystem.cs
index 2056d5fe51..3bc8fecc1e 100644
--- a/Content.Shared/Trigger/Systems/LockOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/LockOnTriggerSystem.cs
@@ -3,37 +3,25 @@ using Content.Shared.Trigger.Components.Effects;
namespace Content.Shared.Trigger.Systems;
-public sealed class LockOnTriggerSystem : EntitySystem
+public sealed class LockOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly LockSystem _lock = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
if (!TryComp(target, out var lockComp))
return; // prevent the Resolve in Lock/Unlock/ToggleLock from logging errors in case the user does not have the component
switch (ent.Comp.LockMode)
{
case LockAction.Lock:
- _lock.Lock(target.Value, args.User, lockComp);
+ _lock.Lock(target, args.User, lockComp);
break;
case LockAction.Unlock:
- _lock.Unlock(target.Value, args.User, lockComp);
+ _lock.Unlock(target, args.User, lockComp);
break;
case LockAction.Toggle:
- _lock.ToggleLock(target.Value, args.User, lockComp);
+ _lock.ToggleLock(target, args.User, lockComp);
break;
}
}
diff --git a/Content.Shared/Trigger/Systems/PopupOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/PopupOnTriggerSystem.cs
index 65ed216af1..d123c213db 100644
--- a/Content.Shared/Trigger/Systems/PopupOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/PopupOnTriggerSystem.cs
@@ -6,57 +6,49 @@ namespace Content.Shared.Trigger.Systems;
///
/// This handles
///
-public sealed class PopupOnTriggerSystem : EntitySystem
+public sealed class PopupOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly SharedPopupSystem _popup = default!;
- ///
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
// Popups only play for one entity
if (ent.Comp.Quiet)
{
if (ent.Comp.Predicted)
+ {
_popup.PopupClient(Loc.GetString(ent.Comp.Text),
- target.Value,
- ent.Comp.UserIsRecipient ? args.User : ent.Owner,
- ent.Comp.PopupType);
+ target,
+ ent.Comp.UserIsRecipient ? args.User : ent.Owner,
+ ent.Comp.PopupType);
+ }
else if (args.User != null)
+ {
_popup.PopupEntity(Loc.GetString(ent.Comp.OtherText ?? ent.Comp.Text),
- target.Value,
- args.User.Value,
- ent.Comp.PopupType);
+ target,
+ args.User.Value,
+ ent.Comp.PopupType);
+ }
return;
}
// Popups play for all entities
if (ent.Comp.Predicted)
+ {
_popup.PopupPredicted(Loc.GetString(ent.Comp.Text),
- Loc.GetString(ent.Comp.OtherText ?? ent.Comp.Text),
- target.Value,
- ent.Comp.UserIsRecipient ? args.User : ent.Owner,
- ent.Comp.PopupType);
+ Loc.GetString(ent.Comp.OtherText ?? ent.Comp.Text),
+ target,
+ ent.Comp.UserIsRecipient ? args.User : ent.Owner,
+ ent.Comp.PopupType);
+ }
else
+ {
_popup.PopupEntity(Loc.GetString(ent.Comp.OtherText ?? ent.Comp.Text),
- target.Value,
- ent.Comp.PopupType);
+ target,
+ ent.Comp.PopupType);
+ }
}
}
diff --git a/Content.Shared/Trigger/Systems/RejuvenateOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/RejuvenateOnTriggerSystem.cs
index f1c5fdc57e..9457c5e6ee 100644
--- a/Content.Shared/Trigger/Systems/RejuvenateOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/RejuvenateOnTriggerSystem.cs
@@ -3,28 +3,13 @@ using Content.Shared.Trigger.Components.Effects;
namespace Content.Shared.Trigger.Systems;
-public sealed class RejuvenateOnTriggerSystem : EntitySystem
+public sealed class RejuvenateOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly RejuvenateSystem _rejuvenate = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
- _rejuvenate.PerformRejuvenate(target.Value);
+ _rejuvenate.PerformRejuvenate(target);
args.Handled = true;
}
}
diff --git a/Content.Shared/Trigger/Systems/RepulseAttractOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/RepulseAttractOnTriggerSystem.cs
index 9bedc87b6b..3a9813f322 100644
--- a/Content.Shared/Trigger/Systems/RepulseAttractOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/RepulseAttractOnTriggerSystem.cs
@@ -1,32 +1,16 @@
-using Content.Shared.Trigger;
using Content.Shared.Trigger.Components.Effects;
using Content.Shared.RepulseAttract;
namespace Content.Shared.Trigger.Systems;
-public sealed class RepulseAttractOnTriggerSystem : EntitySystem
+public sealed class RepulseAttractOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly RepulseAttractSystem _repulse = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
- var position = _transform.GetMapCoordinates(target.Value);
+ var position = _transform.GetMapCoordinates(target);
_repulse.TryRepulseAttract(position, args.User, ent.Comp.Speed, ent.Comp.Range, ent.Comp.Whitelist, ent.Comp.CollisionMask);
args.Handled = true;
diff --git a/Content.Shared/Trigger/Systems/ScramOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/ScramOnTriggerSystem.cs
index 163012cec5..a2c280d0d5 100644
--- a/Content.Shared/Trigger/Systems/ScramOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/ScramOnTriggerSystem.cs
@@ -14,7 +14,7 @@ using Robust.Shared.Random;
namespace Content.Shared.Trigger.Systems;
-public sealed class ScramOnTriggerSystem : EntitySystem
+public sealed class ScramOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly PullingSystem _pulling = default!;
[Dependency] private readonly EntityLookupSystem _lookup = default!;
@@ -31,24 +31,14 @@ public sealed class ScramOnTriggerSystem : EntitySystem
{
base.Initialize();
- SubscribeLocalEvent(OnTrigger);
-
_physicsQuery = GetEntityQuery();
}
- private void OnTrigger(Entity ent, ref TriggerEvent args)
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
// We need stop the user from being pulled so they don't just get "attached" with whoever is pulling them.
// This can for example happen when the user is cuffed and being pulled.
- if (TryComp(target, out var pull) && _pulling.IsPulled(target.Value, pull))
+ if (TryComp(target, out var pull) && _pulling.IsPulled(target, pull))
_pulling.TryStopPull(ent, pull);
// Check if the user is pulling anything, and drop it if so.
@@ -61,12 +51,12 @@ public sealed class ScramOnTriggerSystem : EntitySystem
if (_net.IsClient)
return;
- var xform = Transform(target.Value);
+ var xform = Transform(target);
var targetCoords = SelectRandomTileInRange(xform, ent.Comp.TeleportRadius);
if (targetCoords != null)
{
- _transform.SetCoordinates(target.Value, targetCoords.Value);
+ _transform.SetCoordinates(target, targetCoords.Value);
args.Handled = true;
}
}
diff --git a/Content.Shared/Trigger/Systems/ShockOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/ShockOnTriggerSystem.cs
index c4d34af7e1..08c5da6ed3 100644
--- a/Content.Shared/Trigger/Systems/ShockOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/ShockOnTriggerSystem.cs
@@ -4,41 +4,24 @@ using Robust.Shared.Containers;
namespace Content.Shared.Trigger.Systems;
-public sealed class ShockOnTriggerSystem : EntitySystem
+public sealed class ShockOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly SharedContainerSystem _container = default!;
[Dependency] private readonly SharedElectrocutionSystem _electrocution = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- EntityUid? target;
+ // Override the normal target if we target the container
if (ent.Comp.TargetContainer)
{
// shock whoever is wearing this clothing item
if (!_container.TryGetContainingContainer(ent.Owner, out var container))
return;
+
target = container.Owner;
}
- else
- {
- target = ent.Comp.TargetUser ? args.User : ent.Owner;
- }
- if (target == null)
- return;
-
- _electrocution.TryDoElectrocution(target.Value, null, ent.Comp.Damage, ent.Comp.Duration, true, ignoreInsulation: true);
+ _electrocution.TryDoElectrocution(target, null, ent.Comp.Damage, ent.Comp.Duration, true, ignoreInsulation: true);
args.Handled = true;
}
-
}
diff --git a/Content.Shared/Trigger/Systems/SolutionTriggerSystem.cs b/Content.Shared/Trigger/Systems/SolutionTriggerSystem.cs
index 54a1869217..a5e1f3d547 100644
--- a/Content.Shared/Trigger/Systems/SolutionTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/SolutionTriggerSystem.cs
@@ -1,31 +1,15 @@
using Content.Shared.Trigger.Components.Effects;
-using Robust.Shared.Containers;
using Content.Shared.Chemistry.EntitySystems;
namespace Content.Shared.Trigger.Systems;
-public sealed class SolutionTriggerSystem : EntitySystem
+public sealed class SolutionTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTriggered);
- }
-
- private void OnTriggered(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
- if (!_solutionContainer.TryGetSolution(target.Value, ent.Comp.Solution, out var solutionRef, out _))
+ if (!_solutionContainer.TryGetSolution(target, ent.Comp.Solution, out var solutionRef, out _))
return;
_solutionContainer.AddSolution(solutionRef.Value, ent.Comp.AddedSolution);
diff --git a/Content.Shared/Trigger/Systems/StaminaDamageOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/StaminaDamageOnTriggerSystem.cs
index 0efa437275..7d159925f9 100644
--- a/Content.Shared/Trigger/Systems/StaminaDamageOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/StaminaDamageOnTriggerSystem.cs
@@ -1,34 +1,18 @@
-using Content.Shared.Damage;
using Content.Shared.Damage.Systems;
using Content.Shared.Trigger.Components.Effects;
namespace Content.Shared.Trigger.Systems;
-public sealed class StaminaDamageOnTriggerSystem : EntitySystem
+public sealed class StaminaDamageOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly SharedStaminaSystem _stamina = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
- var ev = new BeforeStaminaDamageOnTriggerEvent(ent.Comp.Stamina, target.Value);
+ var ev = new BeforeStaminaDamageOnTriggerEvent(ent.Comp.Stamina, target);
RaiseLocalEvent(ent.Owner, ref ev);
- _stamina.TakeStaminaDamage(target.Value, ev.Stamina, source: args.User, with: ent.Owner, ignoreResist: ent.Comp.IgnoreResistances);
+ _stamina.TakeStaminaDamage(target, ev.Stamina, source: args.User, with: ent.Owner, ignoreResist: ent.Comp.IgnoreResistances);
args.Handled = true;
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnActivateImplantSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnActivateImplantSystem.cs
index 3825708550..ea5ebac6ea 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnActivateImplantSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnActivateImplantSystem.cs
@@ -3,10 +3,8 @@ using Content.Shared.Trigger.Components.Triggers;
namespace Content.Shared.Trigger.Systems;
-public sealed partial class TriggerOnActivateImplantSystem : EntitySystem
+public sealed partial class TriggerOnActivateImplantSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
-
public override void Initialize()
{
base.Initialize();
@@ -16,7 +14,7 @@ public sealed partial class TriggerOnActivateImplantSystem : EntitySystem
private void OnActivateImplant(Entity ent, ref ActivateImplantEvent args)
{
- _trigger.Trigger(ent.Owner, args.Performer, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Performer, ent.Comp.KeyOut);
args.Handled = true;
}
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnContainerInteractionSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnContainerInteractionSystem.cs
index 8fa9308f70..0d6ff4dbc6 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnContainerInteractionSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnContainerInteractionSystem.cs
@@ -7,9 +7,8 @@ namespace Content.Shared.Trigger.Systems;
///
/// System for creating triggers when entities are inserted into or removed from containers.
///
-public sealed class TriggerOnContainerInteractionSystem : EntitySystem
+public sealed class TriggerOnContainerInteractionSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
[Dependency] private readonly IGameTiming _timing = default!;
public override void Initialize()
@@ -31,7 +30,7 @@ public sealed class TriggerOnContainerInteractionSystem : EntitySystem
if (ent.Comp.ContainerId != null && ent.Comp.ContainerId != args.Container.ID)
return;
- _trigger.Trigger(ent.Owner, args.Entity, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Entity, ent.Comp.KeyOut);
}
private void OnRemovedFromContainer(Entity ent, ref EntRemovedFromContainerMessage args)
@@ -42,7 +41,7 @@ public sealed class TriggerOnContainerInteractionSystem : EntitySystem
if (ent.Comp.ContainerId != null && ent.Comp.ContainerId != args.Container.ID)
return;
- _trigger.Trigger(ent.Owner, args.Entity, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Entity, ent.Comp.KeyOut);
}
// Used by entities to trigger when they are inserted into or removed from a container
@@ -54,7 +53,7 @@ public sealed class TriggerOnContainerInteractionSystem : EntitySystem
if (ent.Comp.ContainerId != null && ent.Comp.ContainerId != args.Container.ID)
return;
- _trigger.Trigger(ent.Owner, args.Container.Owner, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Container.Owner, ent.Comp.KeyOut);
}
private void OnGotRemovedFromContainer(Entity ent, ref EntGotRemovedFromContainerMessage args)
@@ -65,6 +64,6 @@ public sealed class TriggerOnContainerInteractionSystem : EntitySystem
if (ent.Comp.ContainerId != null && ent.Comp.ContainerId != args.Container.ID)
return;
- _trigger.Trigger(ent.Owner, args.Container.Owner, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Container.Owner, ent.Comp.KeyOut);
}
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnEmptyGunshotSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnEmptyGunshotSystem.cs
index cc23fa2b84..2de0f516da 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnEmptyGunshotSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnEmptyGunshotSystem.cs
@@ -2,10 +2,8 @@ using Content.Shared.Trigger.Components.Triggers;
using Content.Shared.Weapons.Ranged.Events;
namespace Content.Shared.Trigger.Systems;
-public sealed partial class TriggerOnEmptyGunshotSystem : EntitySystem
+public sealed partial class TriggerOnEmptyGunshotSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
-
public override void Initialize()
{
base.Initialize();
@@ -15,6 +13,6 @@ public sealed partial class TriggerOnEmptyGunshotSystem : EntitySystem
private void OnEmptyGunShot(Entity ent, ref OnEmptyGunShotEvent args)
{
- _trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
}
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnEquipmentSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnEquipmentSystem.cs
index bc097ae831..8a122a1f65 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnEquipmentSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnEquipmentSystem.cs
@@ -7,9 +7,8 @@ namespace Content.Shared.Trigger.Systems;
///
/// System for creating triggers when entities are equipped or unequipped from inventory slots.
///
-public sealed class TriggerOnEquipmentSystem : EntitySystem
+public sealed class TriggerOnEquipmentSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
[Dependency] private readonly IGameTiming _timing = default!;
public override void Initialize()
@@ -31,7 +30,7 @@ public sealed class TriggerOnEquipmentSystem : EntitySystem
if ((ent.Comp.SlotFlags & args.SlotFlags) == 0)
return;
- _trigger.Trigger(ent.Owner, args.Equipment, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Equipment, ent.Comp.KeyOut);
}
private void OnDidUnequip(Entity ent, ref DidUnequipEvent args)
@@ -42,7 +41,7 @@ public sealed class TriggerOnEquipmentSystem : EntitySystem
if ((ent.Comp.SlotFlags & args.SlotFlags) == 0)
return;
- _trigger.Trigger(ent.Owner, args.Equipment, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Equipment, ent.Comp.KeyOut);
}
// Used by entities when they get equipped or unequipped
@@ -54,7 +53,7 @@ public sealed class TriggerOnEquipmentSystem : EntitySystem
if ((ent.Comp.SlotFlags & args.SlotFlags) == 0)
return;
- _trigger.Trigger(ent.Owner, args.Equipee, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Equipee, ent.Comp.KeyOut);
}
private void OnGotUnequipped(Entity ent, ref GotUnequippedEvent args)
@@ -65,6 +64,6 @@ public sealed class TriggerOnEquipmentSystem : EntitySystem
if ((ent.Comp.SlotFlags & args.SlotFlags) == 0)
return;
- _trigger.Trigger(ent.Owner, args.Equipee, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Equipee, ent.Comp.KeyOut);
}
}
diff --git a/Content.Shared/Trigger/Systems/HandTriggerSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnHandSystem.cs
similarity index 81%
rename from Content.Shared/Trigger/Systems/HandTriggerSystem.cs
rename to Content.Shared/Trigger/Systems/TriggerOnHandSystem.cs
index 8001d5d92f..580d4990a8 100644
--- a/Content.Shared/Trigger/Systems/HandTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnHandSystem.cs
@@ -5,10 +5,9 @@ using Robust.Shared.Timing;
namespace Content.Shared.Trigger.Systems;
-public sealed partial class HandTriggerSystem : EntitySystem
+public sealed partial class HandTriggerSystem : TriggerOnXSystem
{
[Dependency] private readonly IGameTiming _timing = default!;
- [Dependency] private readonly TriggerSystem _trigger = default!;
public override void Initialize()
{
@@ -29,7 +28,7 @@ public sealed partial class HandTriggerSystem : EntitySystem
if (_timing.ApplyingState)
return;
- _trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
}
private void OnGotUnequipped(Entity ent, ref GotUnequippedHandEvent args)
@@ -37,7 +36,7 @@ public sealed partial class HandTriggerSystem : EntitySystem
if (_timing.ApplyingState)
return;
- _trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
}
private void OnDidEquip(Entity ent, ref DidEquipHandEvent args)
@@ -45,7 +44,7 @@ public sealed partial class HandTriggerSystem : EntitySystem
if (_timing.ApplyingState)
return;
- _trigger.Trigger(ent.Owner, args.Equipped, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Equipped, ent.Comp.KeyOut);
}
private void OnDidUnequip(Entity ent, ref DidUnequipHandEvent args)
@@ -53,12 +52,12 @@ public sealed partial class HandTriggerSystem : EntitySystem
if (_timing.ApplyingState)
return;
- _trigger.Trigger(ent.Owner, args.Unequipped, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Unequipped, ent.Comp.KeyOut);
}
private void OnDropped(Entity ent, ref DroppedEvent args)
{
// We don't need the guard statement here because this one is not a container event, but raised directly when interacting.
- _trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
}
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnHitscanSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnHitscanSystem.cs
index 069b586055..711e76d55e 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnHitscanSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnHitscanSystem.cs
@@ -3,10 +3,8 @@ using Content.Shared.Weapons.Hitscan.Events;
namespace Content.Shared.Trigger.Systems;
-public sealed class TriggerOnHitscanSystem : EntitySystem
+public sealed class TriggerOnHitscanSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
-
public override void Initialize()
{
base.Initialize();
@@ -20,11 +18,11 @@ public sealed class TriggerOnHitscanSystem : EntitySystem
if (args.Data.HitEntity == null)
return;
- _trigger.Trigger(ent.Owner, args.Data.HitEntity, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Data.HitEntity, ent.Comp.KeyOut);
}
private void OnFired(Entity ent, ref HitscanRaycastFiredEvent args)
{
- _trigger.Trigger(ent.Owner, args.Data.Shooter, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Data.Shooter, ent.Comp.KeyOut);
}
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnLandSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnLandSystem.cs
index 754f285753..64e2e5a5c1 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnLandSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnLandSystem.cs
@@ -3,10 +3,8 @@ using Content.Shared.Trigger.Components.Triggers;
namespace Content.Shared.Trigger.Systems;
-public sealed partial class TriggerOnLandSystem : EntitySystem
+public sealed partial class TriggerOnLandSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
-
public override void Initialize()
{
base.Initialize();
@@ -16,6 +14,6 @@ public sealed partial class TriggerOnLandSystem : EntitySystem
private void OnLand(Entity ent, ref LandEvent args)
{
- _trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
}
}
diff --git a/Content.Shared/Trigger/Systems/MeleeTriggerSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnMeleeSystem.cs
similarity index 78%
rename from Content.Shared/Trigger/Systems/MeleeTriggerSystem.cs
rename to Content.Shared/Trigger/Systems/TriggerOnMeleeSystem.cs
index b7433a2987..e38afb973a 100644
--- a/Content.Shared/Trigger/Systems/MeleeTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnMeleeSystem.cs
@@ -6,10 +6,8 @@ namespace Content.Shared.Trigger.Systems;
///
/// Trigger system for melee related triggers.
///
-public sealed class MeleeTriggerSystem : EntitySystem
+public sealed class TriggerOnMeleeTriggerSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
-
///
public override void Initialize()
{
@@ -23,7 +21,7 @@ public sealed class MeleeTriggerSystem : EntitySystem
private void OnMissTrigger(Entity ent, ref MeleeHitEvent args)
{
if (args.HitEntities.Count == 0)
- _trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
}
private void OnSwingTrigger(Entity ent, ref MeleeHitEvent args)
@@ -34,7 +32,7 @@ public sealed class MeleeTriggerSystem : EntitySystem
else
target = ent.Comp.TargetIsUser ? args.HitEntities[0] : args.User;
- _trigger.Trigger(ent.Owner, target, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, target, ent.Comp.KeyOut);
}
private void OnHitTrigger(Entity ent, ref MeleeHitEvent args)
@@ -45,14 +43,14 @@ public sealed class MeleeTriggerSystem : EntitySystem
if (!ent.Comp.TriggerEveryHit)
{
var target = ent.Comp.TargetIsUser ? args.HitEntities[0] : args.User;
- _trigger.Trigger(ent.Owner, target, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, target, ent.Comp.KeyOut);
return;
}
// if TriggerEveryHit
foreach (var target in args.HitEntities)
{
- _trigger.Trigger(ent.Owner, ent.Comp.TargetIsUser ? target : args.User, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, ent.Comp.TargetIsUser ? target : args.User, ent.Comp.KeyOut);
}
}
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnMobstateChangeSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnMobstateChangeSystem.cs
index 68c109aef9..3afd03f41a 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnMobstateChangeSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnMobstateChangeSystem.cs
@@ -6,9 +6,8 @@ using Content.Shared.Trigger.Components.Triggers;
namespace Content.Shared.Trigger.Systems;
-public sealed partial class TriggerOnMobstateChangeSystem : EntitySystem
+public sealed partial class TriggerOnMobstateChangeSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
public override void Initialize()
@@ -27,7 +26,7 @@ public sealed partial class TriggerOnMobstateChangeSystem : EntitySystem
if (!component.MobState.Contains(args.NewMobState))
return;
- _trigger.Trigger(uid, component.TargetMobstateEntity ? uid : args.Origin, component.KeyOut);
+ Trigger.Trigger(uid, component.TargetMobstateEntity ? uid : args.Origin, component.KeyOut);
}
private void OnMobStateRelay(EntityUid uid, TriggerOnMobstateChangeComponent component, ImplantRelayEvent args)
@@ -35,7 +34,7 @@ public sealed partial class TriggerOnMobstateChangeSystem : EntitySystem
if (!component.MobState.Contains(args.Event.NewMobState))
return;
- _trigger.Trigger(uid, component.TargetMobstateEntity ? args.ImplantedEntity : args.Event.Origin, component.KeyOut);
+ Trigger.Trigger(uid, component.TargetMobstateEntity ? args.ImplantedEntity : args.Event.Origin, component.KeyOut);
}
///
diff --git a/Content.Shared/Trigger/Systems/TriggerOnRoundEndSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnRoundEndSystem.cs
index c18fb08f3f..b5b910d08d 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnRoundEndSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnRoundEndSystem.cs
@@ -6,10 +6,8 @@ namespace Content.Shared.Trigger.Systems;
///
/// System for creating a trigger when the round ends.
///
-public sealed class TriggerOnRoundEndSystem : EntitySystem
+public sealed class TriggerOnRoundEndSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
-
///
public override void Initialize()
{
@@ -25,7 +23,7 @@ public sealed class TriggerOnRoundEndSystem : EntitySystem
// trigger everything with the component
while (triggerQuery.MoveNext(out var uid, out var comp))
{
- _trigger.Trigger(uid, null, comp.KeyOut);
+ Trigger.Trigger(uid, null, comp.KeyOut);
}
}
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnSlipSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnSlipSystem.cs
index 6940ea52e2..746694b891 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnSlipSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnSlipSystem.cs
@@ -3,10 +3,8 @@ using Content.Shared.Trigger.Components.Triggers;
namespace Content.Shared.Trigger.Systems;
-public sealed partial class TriggerOnSlipSystem : EntitySystem
+public sealed partial class TriggerOnSlipSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
-
public override void Initialize()
{
base.Initialize();
@@ -16,6 +14,6 @@ public sealed partial class TriggerOnSlipSystem : EntitySystem
private void OnSlip(Entity ent, ref SlipEvent args)
{
- _trigger.Trigger(ent.Owner, args.Slipped, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Slipped, ent.Comp.KeyOut);
}
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnStrappedOrBuckledSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnStrappedOrBuckledSystem.cs
index d4960ff70c..20cf2393b9 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnStrappedOrBuckledSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnStrappedOrBuckledSystem.cs
@@ -8,10 +8,8 @@ namespace Content.Shared.Trigger.Systems;
/// The users of strap components are the objects having an entity strapped to them (IE: Chairs)
/// The users of buckle components are entities being buckled to an object. (IE: Mobs and players)
///
-public sealed partial class TriggerOnStrappedOrBuckledSystem : EntitySystem
+public sealed partial class TriggerOnStrappedOrBuckledSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
-
public override void Initialize()
{
base.Initialize();
@@ -27,23 +25,23 @@ public sealed partial class TriggerOnStrappedOrBuckledSystem : EntitySystem
// Called by objects entities can be buckled to. (Chairs, surgical tables/)
private void OnStrapped(Entity ent, ref StrappedEvent args)
{
- _trigger.Trigger(ent.Owner, args.Strap, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Strap, ent.Comp.KeyOut);
}
private void OnUnstrapped(Entity ent, ref UnstrappedEvent args)
{
- _trigger.Trigger(ent.Owner, args.Strap, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Strap, ent.Comp.KeyOut);
}
// Called by entities that are buckled to an object. (Mobs, players.)
private void OnBuckled(Entity ent, ref BuckledEvent args)
{
- _trigger.Trigger(ent.Owner, args.Buckle, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Buckle, ent.Comp.KeyOut);
}
private void OnUnbuckled(Entity ent, ref UnbuckledEvent args)
{
- _trigger.Trigger(ent.Owner, args.Buckle, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.Buckle, ent.Comp.KeyOut);
}
#endregion
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnStuckSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnStuckSystem.cs
index d364adccff..dc6441d9df 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnStuckSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnStuckSystem.cs
@@ -3,10 +3,8 @@ using Content.Shared.Trigger.Components.Triggers;
namespace Content.Shared.Trigger.Systems;
-public sealed class TriggerOnStuckSystem : EntitySystem
+public sealed class TriggerOnStuckSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
-
public override void Initialize()
{
base.Initialize();
@@ -16,6 +14,6 @@ public sealed class TriggerOnStuckSystem : EntitySystem
private void OnStuck(Entity ent, ref EntityStuckEvent args)
{
- _trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
}
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnToolUseSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnToolUseSystem.cs
index 01f612aadf..b0265e571e 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnToolUseSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnToolUseSystem.cs
@@ -3,10 +3,8 @@ using Content.Shared.Trigger.Components.Triggers;
namespace Content.Shared.Trigger.Systems;
-public sealed class TriggerOnToolUseSystem : EntitySystem
+public sealed class TriggerOnToolUseSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
-
public override void Initialize()
{
base.Initialize();
@@ -16,6 +14,6 @@ public sealed class TriggerOnToolUseSystem : EntitySystem
private void OnToolUse(Entity ent, ref SimpleToolDoAfterEvent args)
{
- _trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
+ Trigger.Trigger(ent.Owner, args.User, ent.Comp.KeyOut);
}
}
diff --git a/Content.Shared/Trigger/Systems/TriggerOnVerbSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnVerbSystem.cs
index d5830dd75d..31c0e9c377 100644
--- a/Content.Shared/Trigger/Systems/TriggerOnVerbSystem.cs
+++ b/Content.Shared/Trigger/Systems/TriggerOnVerbSystem.cs
@@ -3,10 +3,8 @@ using Content.Shared.Trigger.Components.Triggers;
namespace Content.Shared.Trigger.Systems;
-public sealed partial class TriggerOnVerbSystem : EntitySystem
+public sealed partial class TriggerOnVerbSystem : TriggerOnXSystem
{
- [Dependency] private readonly TriggerSystem _trigger = default!;
-
public override void Initialize()
{
base.Initialize();
@@ -24,7 +22,7 @@ public sealed partial class TriggerOnVerbSystem : EntitySystem
args.Verbs.Add(new AlternativeVerb
{
Text = Loc.GetString(ent.Comp.Text),
- Act = () => _trigger.Trigger(ent.Owner, user, ent.Comp.KeyOut),
+ Act = () => Trigger.Trigger(ent.Owner, user, ent.Comp.KeyOut),
Priority = 2 // should be above any timer settings
});
}
diff --git a/Content.Shared/Trigger/Systems/UncuffOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/UncuffOnTriggerSystem.cs
index 9b83c4cf8e..ebcfc05de4 100644
--- a/Content.Shared/Trigger/Systems/UncuffOnTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/UncuffOnTriggerSystem.cs
@@ -4,31 +4,16 @@ using Content.Shared.Trigger.Components.Effects;
namespace Content.Shared.Trigger.Systems;
-public sealed class UncuffOnTriggerSystem : EntitySystem
+public sealed class UncuffOnTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly SharedCuffableSystem _cuffable = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
- if (!TryComp(target.Value, out var cuffs) || cuffs.Container.ContainedEntities.Count < 1)
+ if (!TryComp(target, out var cuffs) || cuffs.Container.ContainedEntities.Count < 1)
return;
- _cuffable.Uncuff(target.Value, args.User, cuffs.LastAddedCuffs);
+ _cuffable.Uncuff(target, args.User, cuffs.LastAddedCuffs);
args.Handled = true;
}
}
diff --git a/Content.Shared/Trigger/Systems/WeatherTriggerSystem.cs b/Content.Shared/Trigger/Systems/WeatherTriggerSystem.cs
index 6343e08f0b..3a64f94f67 100644
--- a/Content.Shared/Trigger/Systems/WeatherTriggerSystem.cs
+++ b/Content.Shared/Trigger/Systems/WeatherTriggerSystem.cs
@@ -5,30 +5,15 @@ using Robust.Shared.Timing;
namespace Content.Shared.Trigger.Systems;
-public sealed class WeatherTriggerSystem : EntitySystem
+public sealed class WeatherTriggerSystem : XOnTriggerSystem
{
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly SharedWeatherSystem _weather = default!;
- public override void Initialize()
+ protected override void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args)
{
- base.Initialize();
-
- SubscribeLocalEvent(OnTrigger);
- }
-
- private void OnTrigger(Entity ent, ref TriggerEvent args)
- {
- if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))
- return;
-
- var target = ent.Comp.TargetUser ? args.User : ent.Owner;
-
- if (target == null)
- return;
-
- var xform = Transform(target.Value);
+ var xform = Transform(target);
if (ent.Comp.Weather == null) //Clear weather if nothing is set
{
diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml
index 0e26b1761a..a4cdfcf731 100644
--- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml
+++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml
@@ -537,7 +537,7 @@
description: Someone's drawn ">:3c" on the side of this beach ball in indelible ink.
components:
- type: LaunchOnTrigger
- speed: 100.0
+ impulse: 100.0
keysIn:
- OnCollide
- type: StaminaDamageOnTrigger
--
2.51.2