using Content.Server.Explosion.EntitySystems; using Content.Shared._RMC14.Weapons.Ranged; using Content.Shared.Throwing; using Content.Shared.Weapons.Ranged.Events; using Robust.Shared.Timing; namespace Content.Server._RMC14.Trigger; public sealed class RMCTriggerSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly TriggerSystem _trigger = default!; public override void Initialize() { SubscribeLocalEvent(OnTriggerTimerAmmoShot); SubscribeLocalEvent(OnTriggerOnFixedDistanceStop); } private void OnTriggerTimerAmmoShot(Entity ent, ref AmmoShotEvent args) { foreach (var projectile in args.FiredProjectiles) { _trigger.HandleTimerTrigger(projectile, null, ent.Comp.Delay, ent.Comp.BeepInterval, ent.Comp.InitialBeepDelay, ent.Comp.BeepSound); } } private void OnTriggerOnFixedDistanceStop(Entity ent, ref ProjectileFixedDistanceStopEvent args) { var active = EnsureComp(ent); active.TriggerAt = _timing.CurTime + ent.Comp.Delay; } public override void Update(float frameTime) { var time = _timing.CurTime; var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var active)) { if (time < active.TriggerAt) continue; _trigger.Trigger(uid); if (!EntityManager.IsQueuedForDeletion(uid) && !TerminatingOrDeleted(uid)) QueueDel(uid); } } }