From 7168fd9ed9a427c6f6b8f53496d943db0c3a417c Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Sat, 18 Oct 2025 21:23:45 +0200 Subject: [PATCH] Trigger On Hitscan (#40964) * init * doc * merge systems * review --- .../TriggerOnHitscanFiredComponent.cs | 11 +++++++ .../Triggers/TriggerOnHitscanHitComponent.cs | 11 +++++++ .../Trigger/Systems/TriggerOnHitscanSystem.cs | 30 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 Content.Shared/Trigger/Components/Triggers/TriggerOnHitscanFiredComponent.cs create mode 100644 Content.Shared/Trigger/Components/Triggers/TriggerOnHitscanHitComponent.cs create mode 100644 Content.Shared/Trigger/Systems/TriggerOnHitscanSystem.cs diff --git a/Content.Shared/Trigger/Components/Triggers/TriggerOnHitscanFiredComponent.cs b/Content.Shared/Trigger/Components/Triggers/TriggerOnHitscanFiredComponent.cs new file mode 100644 index 0000000000..f7a86c0ce3 --- /dev/null +++ b/Content.Shared/Trigger/Components/Triggers/TriggerOnHitscanFiredComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Trigger.Components.Triggers; + +/// +/// Component put on the hitscan entity. +/// Triggers when a hitscan raycast is fired. +/// The user is the player shooting it. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class TriggerOnHitscanFiredComponent : BaseTriggerOnXComponent; diff --git a/Content.Shared/Trigger/Components/Triggers/TriggerOnHitscanHitComponent.cs b/Content.Shared/Trigger/Components/Triggers/TriggerOnHitscanHitComponent.cs new file mode 100644 index 0000000000..4520578a8f --- /dev/null +++ b/Content.Shared/Trigger/Components/Triggers/TriggerOnHitscanHitComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Trigger.Components.Triggers; + +/// +/// Component put on the hitscan entity. +/// Triggers when a hitscan raycast is fired, but only if an entity got hit. +/// The user is the entity that got hit. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class TriggerOnHitscanHitComponent : BaseTriggerOnXComponent; diff --git a/Content.Shared/Trigger/Systems/TriggerOnHitscanSystem.cs b/Content.Shared/Trigger/Systems/TriggerOnHitscanSystem.cs new file mode 100644 index 0000000000..069b586055 --- /dev/null +++ b/Content.Shared/Trigger/Systems/TriggerOnHitscanSystem.cs @@ -0,0 +1,30 @@ +using Content.Shared.Trigger.Components.Triggers; +using Content.Shared.Weapons.Hitscan.Events; + +namespace Content.Shared.Trigger.Systems; + +public sealed class TriggerOnHitscanSystem : EntitySystem +{ + [Dependency] private readonly TriggerSystem _trigger = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnHit); + SubscribeLocalEvent(OnFired); + } + + private void OnHit(Entity ent, ref HitscanRaycastFiredEvent args) + { + if (args.Data.HitEntity == null) + return; + + _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); + } +} -- 2.51.2