using Content.Shared.Projectiles; using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Standing; using Robust.Shared.Physics.Events; namespace Content.Shared.Damage.Components; public sealed class RequireProjectileTargetSystem : EntitySystem { public override void Initialize() { SubscribeLocalEvent(PreventCollide); SubscribeLocalEvent(StandingBulletHit); SubscribeLocalEvent(LayingBulletPass); } private void PreventCollide(Entity ent, ref PreventCollideEvent args) { if (args.Cancelled) return; if (!ent.Comp.Active) return; var other = args.OtherEntity; if (HasComp(other) && CompOrNull(other)?.Target != ent) { args.Cancelled = true; } } private void SetActive(Entity ent, bool value) { if (ent.Comp.Active == value) return; ent.Comp.Active = value; Dirty(ent); } private void StandingBulletHit(Entity ent, ref StoodEvent args) { SetActive(ent, false); } private void LayingBulletPass(Entity ent, ref DownedEvent args) { SetActive(ent, true); } }