]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fire stacks trigger (#39530)
authorāda <ss.adasts@gmail.com>
Sun, 10 Aug 2025 19:59:32 +0000 (14:59 -0500)
committerGitHub <noreply@github.com>
Sun, 10 Aug 2025 19:59:32 +0000 (21:59 +0200)
* Simple as

* whoops

* not gonna work

* chopped

* missed something

* Better name

* formatting

---------

Co-authored-by: iaada <iaada@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs [new file with mode: 0644]
Content.Server/Trigger/Systems/IgniteOnTriggerSystem.cs
Content.Shared/Trigger/Components/Effects/FlameStackOnTriggerComponent.cs [new file with mode: 0644]
Content.Shared/Trigger/Components/Effects/IgniteOnTriggerComponent.cs

diff --git a/Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs b/Content.Server/Trigger/Systems/FlameStackOnTriggerSystem.cs
new file mode 100644 (file)
index 0000000..879d57b
--- /dev/null
@@ -0,0 +1,37 @@
+using Content.Server.Atmos.EntitySystems;
+using Content.Shared.Trigger;
+using Content.Shared.Trigger.Components.Effects;
+
+namespace Content.Server.Trigger.Systems;
+
+/// <summary>
+/// Trigger system for setting something on fire.
+/// </summary>
+/// <seealso cref="IgniteOnTriggerSystem"/>
+public sealed class FlameStackOnTriggerSystem : EntitySystem
+{
+    [Dependency] private readonly FlammableSystem _flame = default!;
+
+    /// <inheritdoc/>
+    public override void Initialize()
+    {
+        base.Initialize();
+
+        SubscribeLocalEvent<FlameStackOnTriggerComponent, TriggerEvent>(OnTrigger);
+    }
+
+    private void OnTrigger(Entity<FlameStackOnTriggerComponent> 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;
+    }
+}
index f4d88b774a1aa31dfe1e2a6deddbb41da56532a1..b19f4738ca90889a277f51ea9258ff369b89ec77 100644 (file)
@@ -8,6 +8,7 @@ namespace Content.Server.Trigger.Systems;
 /// <summary>
 /// Handles igniting when triggered and stopping ignition after the delay.
 /// </summary>
+/// <seealso cref="FlameStackOnTriggerSystem"/>
 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 (file)
index 0000000..f7186ae
--- /dev/null
@@ -0,0 +1,26 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Trigger.Components.Effects;
+
+/// <summary>
+/// Adjusts fire stacks on trigger, optionally setting them on fire as well.
+/// Requires <see cref="FlammableComponent"/> to ignite the target.
+/// If TargetUser is true they will have their firestacks adjusted instead.
+/// </summary>
+/// <seealso cref="IgniteOnTriggerComponent"/>
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class FlameStackOnTriggerComponent : BaseXOnTriggerComponent
+{
+    /// <summary>
+    /// How many fire stacks to add or remove.
+    /// </summary>
+    [DataField, AutoNetworkedField]
+    public float FireStacks;
+
+    /// <summary>
+    /// If true, the target will be set on fire if it isn't already.
+    /// If false does nothing.
+    /// </summary>
+    [DataField, AutoNetworkedField]
+    public bool DoIgnite = true;
+}
index 36273ef1b21677dd9e0c506c8036886a8f941fe5..e9f51cf4e78b8c200aabdf0d4353a194b45a633f 100644 (file)
@@ -8,6 +8,7 @@ namespace Content.Shared.Trigger.Components.Effects;
 /// Requires <see cref="IgnitionSourceComponent"/> along with triggering components.
 /// The if TargetUser is true they will be ignited instead (they need IgnitionSourceComponent as well).
 /// </summary>
+/// <seealso cref="FlameStackOnTriggerComponent"/>
 [RegisterComponent, NetworkedComponent]
 [AutoGenerateComponentState, AutoGenerateComponentPause]
 public sealed partial class IgniteOnTriggerComponent : BaseXOnTriggerComponent