protected IEnumerator ExecuteLoadAsync()
 {
     foreach (var sceneQueeItem in ScenesQueue.ToArray())
     {
         yield return(StartCoroutine(sceneQueeItem.Loader));
     }
 }
Esempio n. 2
0
 protected IEnumerator ExecuteLoadAsync()
 {
     foreach (var sceneQueeItem in ScenesQueue.ToArray())
     {
         yield return sceneQueeItem.Loader;
     }
 }
 public void QueueSceneLoad(string sceneName, ISceneSettings settings)
 {
     ScenesQueue.Enqueue(new SceneQueueItem()
     {
         Loader   = LoadSceneInternal(sceneName),
         Name     = sceneName,
         Settings = settings
     });
 }
        public IEnumerator SetupScene(IScene sceneRoot)
        {
            this.Publish(new SceneLoaderEvent()
            {
                State     = SceneState.Instantiating,
                SceneRoot = sceneRoot
            });



            //If the scene was loaded via the api (it was queued having some name and settings)
            if (ScenesQueue.Count > 0)
            {
                var sceneQueueItem = ScenesQueue.Dequeue();
                sceneRoot.Name            = sceneQueueItem.Name;
                sceneRoot._SettingsObject = sceneQueueItem.Settings;
            }
            //Else, means scene was the start scene (loaded before kernel)
            else
            {
//				sceneRoot.Name = Application.loadedLevelName;
                sceneRoot.Name = UnityEngine.SceneManagement.SceneManager.GetSceneAt(UnityEngine.SceneManagement.SceneManager.sceneCount - 1).name;
            }


            this.Publish(new SceneLoaderEvent()
            {
                State     = SceneState.Instantiated,
                SceneRoot = sceneRoot
            });
            var sceneRootClosure = sceneRoot;
            Action <float, string> updateDelegate = (v, m) => {
                this.Publish(new SceneLoaderEvent()
                {
                    SceneRoot       = sceneRootClosure,
                    Name            = sceneRootClosure.Name,
                    State           = SceneState.Update,
                    Progress        = v,
                    ProgressMessage = m
                });
            };

            var sceneLoader = SceneLoaders.FirstOrDefault(loader => loader.SceneType == sceneRoot.GetType()) ??
                              _defaultSceneLoader;

            yield return(StartCoroutine(sceneLoader.Load(sceneRoot, updateDelegate)));

            LoadedScenes.Add(sceneRoot);

            this.Publish(new SceneLoaderEvent()
            {
                State     = SceneState.Loaded,
                SceneRoot = sceneRoot
            });
        }
 public void LoadScene(string name, ISceneSettings settings, bool restrictToSingleScene)
 {
     if (restrictToSingleScene &&
         (LoadedScenes.Any(p => p.Name == name) || ScenesQueue.Any(p => p.Name == name) ||
          Application.loadedLevelName == name))
     {
         return;
     }
     this.QueueSceneLoad(name, settings);
     this.ExecuteLoad();
 }
        public void LoadScene(string name, ISceneSettings settings, bool restrictToSingleScene)
        {
            if (restrictToSingleScene &&
                (LoadedScenes.Any(p => p.Name == name) || ScenesQueue.Any(p => p.Name == name) ||
//                 Application.loadedLevelName == name)) return;
                 UnityEngine.SceneManagement.SceneManager.GetSceneAt(UnityEngine.SceneManagement.SceneManager.sceneCount - 1).name == name))
            {
                return;
            }
            this.QueueSceneLoad(name, settings);
            this.ExecuteLoad();
        }
 public void QueueSceneLoadIfNotAlready(string sceneName, ISceneSettings settings)
 {
     if (LoadedScenes.Any(p => p.Name == sceneName) || ScenesQueue.Any(p => p.Name == sceneName) ||
         Application.loadedLevelName == sceneName)
     {
         return;
     }
     ScenesQueue.Enqueue(new SceneQueueItem()
     {
         Loader   = LoadSceneInternal(sceneName),
         Name     = sceneName,
         Settings = settings
     });
 }
        public void QueueSceneLoadIfNotAlready(string sceneName, ISceneSettings settings)
        {
            if (LoadedScenes.Any(p => p.Name == sceneName) || ScenesQueue.Any(p => p.Name == sceneName) ||
//			    Application.loadedLevelName == sceneName) {
                UnityEngine.SceneManagement.SceneManager.GetSceneAt(UnityEngine.SceneManagement.SceneManager.sceneCount - 1).name == sceneName)
            {
                return;
            }
            ScenesQueue.Enqueue(new SceneQueueItem()
            {
                Loader   = LoadSceneInternal(sceneName),
                Name     = sceneName,
                Settings = settings
            });
        }
 public void QueueScenesLoad(params SceneQueueItem[] items)
 {
     foreach (var item in items)
     {
         if (item.RestrictToSingleScene &&
             (LoadedScenes.Any(p => p.Name == name) || ScenesQueue.Any(p => p.Name == name) ||
              Application.loadedLevelName == name))
         {
             continue;
         }
         if (item.Loader == null)
         {
             item.Loader = LoadSceneInternal(item.Name);
         }
         ScenesQueue.Enqueue(item);
     }
 }
Esempio n. 10
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="name"></param>
 /// <param name="loadSceneMode"></param>
 /// <param name="extraBindings"></param>
 /// <param name="startup">如果为true,加载成功后则自动startup..如果为false.得用户手动startup</param>
 /// <returns></returns>
 public IEnumerator LoadSceneAsync(string name, LoadSceneMode loadSceneMode, Action<DiContainer> extraBindings)
 {
     switch (loadSceneMode)
     {
         case LoadSceneMode.Single:
             ScenesQueue.Enqueue(new SceneQueueItem()
             {
                 Loader = InstantiateSceneAsync(name, extraBindings),
                 Name = name,
             });
             break;
         case LoadSceneMode.Additive:
             ScenesQueue.Enqueue(new SceneQueueItem()
             {
                 Loader = InstantiateSceneAsyncAdditively(name, extraBindings),
                 Name = name,
             });
             break;
     }
     yield return ExecuteLoadAsync();
 }