using UnityEngine; using System.Collections.Generic; namespace IsoTools.Internal { public abstract class IsoBehaviour : MonoBehaviour where T : IsoBehaviour { static IsoAssocList _behaviours = new IsoAssocList(); static List _tempWorlds = new List(); // --------------------------------------------------------------------- // // Internal // // --------------------------------------------------------------------- public bool IsActive() { return isActiveAndEnabled && gameObject.activeInHierarchy; } protected IsoWorld FindFirstActiveParentWorld() { IsoWorld ret_value = null; GetComponentsInParent(false, _tempWorlds); for ( int i = 0, e = _tempWorlds.Count; i < e; ++i ) { var iso_world = _tempWorlds[i]; if ( iso_world.IsActive() ) { ret_value = iso_world; break; } } _tempWorlds.Clear(); return ret_value; } protected static int AllBehaviourCount { get { return _behaviours.Count; } } protected static T GetBehaviourByIndex(int index) { return _behaviours[index]; } // --------------------------------------------------------------------- // // Virtual // // --------------------------------------------------------------------- protected virtual void OnEnable() { var behaviour = this as T; if ( behaviour && behaviour.IsActive() ) { _behaviours.Add(behaviour); } } protected virtual void OnDisable() { var behaviour = this as T; if ( behaviour ) { _behaviours.Remove(behaviour); } } } }