Trigger On Hitscan (#40964)

* init

* doc

* merge systems

* review
This commit is contained in:
ScarKy0
2025-10-18 21:23:45 +02:00
committed by GitHub
parent 219aeda235
commit 7168fd9ed9
3 changed files with 52 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
using Robust.Shared.GameStates;
namespace Content.Shared.Trigger.Components.Triggers;
/// <summary>
/// Component put on the hitscan entity.
/// Triggers when a hitscan raycast is fired.
/// The user is the player shooting it.
/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class TriggerOnHitscanFiredComponent : BaseTriggerOnXComponent;

View File

@@ -0,0 +1,11 @@
using Robust.Shared.GameStates;
namespace Content.Shared.Trigger.Components.Triggers;
/// <summary>
/// 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.
/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class TriggerOnHitscanHitComponent : BaseTriggerOnXComponent;

View File

@@ -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<TriggerOnHitscanHitComponent, HitscanRaycastFiredEvent>(OnHit);
SubscribeLocalEvent<TriggerOnHitscanFiredComponent, HitscanRaycastFiredEvent>(OnFired);
}
private void OnHit(Entity<TriggerOnHitscanHitComponent> ent, ref HitscanRaycastFiredEvent args)
{
if (args.Data.HitEntity == null)
return;
_trigger.Trigger(ent.Owner, args.Data.HitEntity, ent.Comp.KeyOut);
}
private void OnFired(Entity<TriggerOnHitscanFiredComponent> ent, ref HitscanRaycastFiredEvent args)
{
_trigger.Trigger(ent.Owner, args.Data.Shooter, ent.Comp.KeyOut);
}
}