using System; using OmiLAXR.Schedules; using UnityEngine; namespace OmiLAXR.TrackingBehaviours { public abstract class ScheduledTrackingBehaviour : ScheduledTrackingBehaviour { protected override void AfterFilteredObjects(Component[] components) { } } /// /// Base class for tracking behaviors that operate on a timed interval /// rather than processing every frame. Derived classes should implement /// ProcessObjectsAtInterval to define the interval-based behavior. /// public abstract class ScheduledTrackingBehaviour : TrackingBehaviour where T : Component { public Scheduler scheduler; protected virtual Scheduler GetDefaultScheduler() => GlobalSettings.Instance.GetScheduler().Clone(this); protected override void OnStartedPipeline(Pipeline pipeline) { if (!enabled) return; if (!scheduler) scheduler = GetDefaultScheduler(); scheduler.OnTick += Run; Schedulers.Add(scheduler); if (!scheduler.owner) scheduler.owner = this; scheduler.Start(); base.OnStartedPipeline(pipeline); } protected abstract void Run(); } }