using System.Collections.Generic; using OmiLAXR.Composers; using OmiLAXR.Endpoints; using OmiLAXR.Hooks; using UnityEngine; namespace OmiLAXR { [DefaultExecutionOrder(-1)] public abstract class DataProviderExtension : PipelineComponent, IDataProviderExtension where T : DataProvider { public readonly List Composers = new List(); public readonly List Hooks = new List(); public readonly List Endpoints = new List(); public T DataProvider { get; protected set; } public DataProvider GetDataProvider() => DataProvider; private void Awake() { var pipeline = FindObject(); Extend(pipeline); } public void Extend(DataProvider dataProvider) { DataProvider = (T)dataProvider; var composers = gameObject.GetComponentsInChildren(); var hooks = gameObject.GetComponentsInChildren(); var endpoints = gameObject.GetComponentsInChildren(); Composers.AddRange(composers); Hooks.AddRange(hooks); Endpoints.AddRange(endpoints); DataProvider.Composers.AddRange(composers); DataProvider.Hooks.AddRange(hooks); DataProvider.Endpoints.AddRange(endpoints); DataProvider.Extensions.Add(this); DebugLog.OmiLAXR.Print("Extended data provider " + typeof(T)); } } }