protected IEnumerator ExecuteLoadAsync() { foreach (var sceneQueeItem in ScenesQueue.ToArray()) { yield return(StartCoroutine(sceneQueeItem.Loader)); } }
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); } }
/// <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(); }