Пример #1
0
 public override void PreInit()
 {
     OnPreInit?.Invoke(Manager);
 }
        public static IEnumerator InitAll(IEnumerator onInit, Action <double> onProgress)
        {
            double maxIter = Controllers.Count * 3;

            if (maxIter == 0)
            {
                maxIter = 1;
            }

            double currentIter  = 0;
            double currentValue = 0;

            OnPreInit.Invoke(AddObservers, AddObservers);

            double part = 1 / maxIter;

            Action <double> initProgress = (progress) =>
            {
                onProgress(currentValue + (progress * part));
            };

            foreach (var controller in Controllers)
            {
                yield return(controller.Value.AddObservers());

                onProgress(currentValue = (currentIter++ / maxIter));
            }

            foreach (var controller in Controllers)
            {
                yield return(controller.Value.Bind());

                onProgress(currentValue = (currentIter++ / maxIter));
            }

            foreach (var controller in Controllers)
            {
                BaseController baseController = controller.Value;
                yield return(baseController.Init(initProgress));
            }

            foreach (var controller in Controllers)
            {
                yield return(controller.Value.WaitForInitialize());

                onProgress(currentValue = (currentIter++ / maxIter));
            }


            foreach (var controller in Controllers)
            {
                controller.Value.PostInit();
            }

            foreach (var controller in Controllers)
            {
                controller.Value.enabled = true;
            }

#if MMDevelop
            Debug.Log("BaseController.Init END");
#endif

            if (onInit != null)
            {
                yield return(onInit);
            }
        }