using Content.Shared.Trigger.Components.Effects; using Content.Shared.Trigger.Systems; namespace Content.Shared.Trigger; /// /// This is a base Trigger system which handles all the boilerplate for triggers automagically! /// public abstract class TriggerOnXSystem : EntitySystem { [Dependency] protected readonly TriggerSystem Trigger = default!; } /// /// This is a base Trigger system which handles all the boilerplate for triggers automagically! /// public abstract class XOnTriggerSystem : EntitySystem where T : BaseXOnTriggerComponent { /// public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnTrigger); } private void OnTrigger(Entity ent, ref TriggerEvent args) { if (args.Key != null && !ent.Comp.KeysIn.Contains(args.Key)) return; var target = ent.Comp.TargetUser ? args.User : ent.Owner; if (target is not { } uid) return; OnTrigger(ent, uid, ref args); } protected abstract void OnTrigger(Entity ent, EntityUid target, ref TriggerEvent args); }