using System; using System.Collections.Generic; using System.Linq; using OmiLAXR.Extensions; using OmiLAXR.Listeners; using OmiLAXR.Filters; using OmiLAXR.TrackingBehaviours; using UnityEngine; namespace OmiLAXR { [DefaultExecutionOrder(-100)] public abstract class PipelineExtension : PipelineComponent, IPipelineExtension where T : Pipeline { public T Pipeline { get; protected set; } public Pipeline GetPipeline() => Pipeline; public readonly List Listeners = new List(); public readonly List TrackingBehaviours = new List(); public readonly List Filters = new List(); private void Awake() { var pipeline = FindObject(); Extend(pipeline); } public void Extend(Pipeline pipeline) { Pipeline = (T)pipeline; var listeners = gameObject.GetComponentsInChildren(); var tbs = gameObject.GetComponentsInChildren(); var filters = gameObject.GetComponentsInChildren(); Listeners.AddRange(listeners); TrackingBehaviours.AddRange(tbs); Filters.AddRange(filters); Pipeline.Listeners.AddRange(listeners); Pipeline.TrackingBehaviours.AddRange(tbs); Pipeline.Filters.AddRange(filters); Pipeline.Extensions.Add(this); DebugLog.OmiLAXR.Print("Extended pipeline " + pipeline); } } }