diff --git a/Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs b/Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs new file mode 100644 index 0000000000..879d57b845 --- /dev/null +++ b/Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs @@ -0,0 +1,37 @@ +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 f4d88b774a..b19f4738ca 100644 --- a/Content.Server/Trigger/Systems/IgniteOnTriggerSystem.cs +++ b/Content.Server/Trigger/Systems/IgniteOnTriggerSystem.cs @@ -8,6 +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/FlameStackOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/FlameStackOnTriggerComponent.cs new file mode 100644 index 0000000000..f7186ae003 --- /dev/null +++ b/Content.Shared/Trigger/Components/Effects/FlameStackOnTriggerComponent.cs @@ -0,0 +1,26 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Trigger.Components.Effects; + +/// +/// Adjusts fire stacks on trigger, optionally setting them on fire as well. +/// Requires to ignite the target. +/// If TargetUser is true they will have their firestacks adjusted instead. +/// +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class FlameStackOnTriggerComponent : BaseXOnTriggerComponent +{ + /// + /// How many fire stacks to add or remove. + /// + [DataField, AutoNetworkedField] + public float FireStacks; + + /// + /// If true, the target will be set on fire if it isn't already. + /// If false does nothing. + /// + [DataField, AutoNetworkedField] + public bool DoIgnite = true; +} diff --git a/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs b/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs index 36273ef1b2..e9f51cf4e7 100644 --- a/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs +++ b/Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs @@ -8,6 +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