/**********************************************************************/ // Initialize Managers in order, layer by layer IEnumerator InitLayers() { // Go through the layers int layerNum = 1; foreach (ManagerInitLayer layer in m_managerInitLayers) { Debug.Log("Initializing Managers Layer " + layerNum + ": " + layer.LayerName); List <ManagerBase> workMgr = new List <ManagerBase>(); // List of Managers currently initializing // Instantiate GameObjects from Manager prefabs and Initialize foreach (ManagerBase mgr in layer.m_mgrs) { ManagerBase newMgr = mgr.gameObject.GetComponent <ManagerBase>(); if (newMgr != null) { workMgr.Add(newMgr); AddManagerToCache(newMgr); newMgr.InitState = InitState.Initializing; StartCoroutine(newMgr.RunInitialization()); } else { Debug.LogError("ManagerLocator.InitLayers: Unable to Init Manager due to missing ManagerBase component - " + mgr.name); } } // Wait for all Managers on this layer to finish bool layerFinished = false; while (!layerFinished) { layerFinished = true; foreach (ManagerBase mgr in workMgr) { if (mgr.InitState == InitState.Failed) { InitState = InitState.Failed; break; } if (mgr.InitState != InitState.Initialized) { layerFinished = false; break; } } yield return(null); } Debug.Log("ManagerInitLayer: Layer " + layerNum + " Finished"); if (InitState == InitState.Failed) { // Initialization has failed. RunInitializationFail(); yield break; } layerNum++; } _initComplete = true; }