diff --git a/Content.Server/Trigger/Systems/FireStackOnTriggerSystem.cs b/Content.Server/Trigger/Systems/FireStackOnTriggerSystem.cs new file mode 100644 index 0000000000..af3298b865 --- /dev/null +++ b/Content.Server/Trigger/Systems/FireStackOnTriggerSystem.cs @@ -0,0 +1,53 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Shared.Trigger; +using Content.Shared.Trigger.Components.Effects; + +namespace Content.Server.Trigger.Systems; + +/// +/// Trigger system for adding or removing fire stacks from an entity with . +/// +/// +public sealed class FireStackOnTriggerSystem : EntitySystem +{ + [Dependency] private readonly FlammableSystem _flame = default!; + + /// + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnTriggerFlame); + SubscribeLocalEvent(OnTriggerExtinguish); + } + + private void OnTriggerFlame(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; + + _flame.AdjustFireStacks(target.Value, ent.Comp.FireStacks, ignite: ent.Comp.DoIgnite); + + args.Handled = true; + } + + private void OnTriggerExtinguish(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; + + _flame.Extinguish(target.Value); + + args.Handled = true; + } +} diff --git a/Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs b/Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs deleted file mode 100644 index 879d57b845..0000000000 --- a/Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Content.Server.Atmos.EntitySystems; -using Content.Shared.Trigger; -using Content.Shared.Trigger.Components.Effects; - -namespace Content.Server.Trigger.Systems; - -/// -/// Trigger system for setting something on fire. -/// -/// -public sealed class FlameStackOnTriggerSystem : EntitySystem -{ - [Dependency] private readonly FlammableSystem _flame = default!; - - /// - 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 == null) - return; - - _flame.AdjustFireStacks(target.Value, ent.Comp.FireStacks, ignite: ent.Comp.DoIgnite); - - args.Handled = true; - } -} diff --git a/Content.Server/Trigger/Systems/IgniteOnTriggerSystem.cs b/Content.Server/Trigger/Systems/IgniteOnTriggerSystem.cs index b19f4738ca..c6ae16ec78 100644 --- a/Content.Server/Trigger/Systems/IgniteOnTriggerSystem.cs +++ b/Content.Server/Trigger/Systems/IgniteOnTriggerSystem.cs @@ -8,7 +8,7 @@ namespace Content.Server.Trigger.Systems; /// /// Handles igniting when triggered and stopping ignition after the delay. /// -/// +/// public sealed class IgniteOnTriggerSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; diff --git a/Content.Shared/Trigger/Components/Effects/ExtinguishOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/ExtinguishOnTriggerComponent.cs new file mode 100644 index 0000000000..43208a9971 --- /dev/null +++ b/Content.Shared/Trigger/Components/Effects/ExtinguishOnTriggerComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Trigger.Components.Effects; + +/// +/// This trigger removes all the fire stacks on a target with . +/// If TargetUser is true, the entity that caused this trigger will be extinguished instead. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ExtinguishOnTriggerComponent : BaseXOnTriggerComponent; diff --git a/Content.Shared/Trigger/Components/Effects/FlameStackOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/FireStackOnTriggerComponent.cs similarity index 90% rename from Content.Shared/Trigger/Components/Effects/FlameStackOnTriggerComponent.cs rename to Content.Shared/Trigger/Components/Effects/FireStackOnTriggerComponent.cs index f7186ae003..cde5075e9b 100644 --- a/Content.Shared/Trigger/Components/Effects/FlameStackOnTriggerComponent.cs +++ b/Content.Shared/Trigger/Components/Effects/FireStackOnTriggerComponent.cs @@ -9,7 +9,7 @@ namespace Content.Shared.Trigger.Components.Effects; /// /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class FlameStackOnTriggerComponent : BaseXOnTriggerComponent +public sealed partial class FireStackOnTriggerComponent : BaseXOnTriggerComponent { /// /// How many fire stacks to add or remove. diff --git a/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs index e9f51cf4e7..3e3db526e4 100644 --- a/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs +++ b/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs @@ -8,7 +8,7 @@ namespace Content.Shared.Trigger.Components.Effects; /// Requires along with triggering components. /// The if TargetUser is true they will be ignited instead (they need IgnitionSourceComponent as well). /// -/// +/// [RegisterComponent, NetworkedComponent] [AutoGenerateComponentState, AutoGenerateComponentPause] public sealed partial class IgniteOnTriggerComponent : BaseXOnTriggerComponent diff --git a/Content.Shared/Trigger/Components/Triggers/TriggerOnInteractHandComponent.cs b/Content.Shared/Trigger/Components/Triggers/TriggerOnInteractHandComponent.cs new file mode 100644 index 0000000000..ca7e96be74 --- /dev/null +++ b/Content.Shared/Trigger/Components/Triggers/TriggerOnInteractHandComponent.cs @@ -0,0 +1,11 @@ +using Content.Shared.Interaction; +using Robust.Shared.GameStates; + +namespace Content.Shared.Trigger.Components.Triggers; + +/// +/// Trigger on , aka clicking on an entity with an empty hand. +/// User is the player with the hand doing the clicking. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class TriggerOnInteractHandComponent : BaseTriggerOnXComponent; diff --git a/Content.Shared/Trigger/Systems/TriggerSystem.Interaction.cs b/Content.Shared/Trigger/Systems/TriggerSystem.Interaction.cs index f506909760..035ef4ec91 100644 --- a/Content.Shared/Trigger/Systems/TriggerSystem.Interaction.cs +++ b/Content.Shared/Trigger/Systems/TriggerSystem.Interaction.cs @@ -12,6 +12,7 @@ public sealed partial class TriggerSystem { SubscribeLocalEvent(OnActivate); SubscribeLocalEvent(OnUse); + SubscribeLocalEvent(OnInteractHand); SubscribeLocalEvent(HandleItemToggleOnTrigger); SubscribeLocalEvent(HandleAnchorOnTrigger); @@ -39,6 +40,15 @@ public sealed partial class TriggerSystem args.Handled = true; } + private void OnInteractHand(Entity ent, ref InteractHandEvent args) + { + if (args.Handled) + return; + + Trigger(ent.Owner, args.User, ent.Comp.KeyOut); + args.Handled = true; + } + private void HandleItemToggleOnTrigger(Entity ent, ref TriggerEvent args) { if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key))