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