From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Sat, 18 Oct 2025 19:23:45 +0000 (+0200) Subject: Trigger On Hitscan (#40964) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=7168fd9ed9a427c6f6b8f53496d943db0c3a417c;p=space-station-14.git Trigger On Hitscan (#40964) * init * doc * merge systems * review --- 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); + } +}