internal async UniTask <ASceneGroup> LoadAsync(AReporter reporter) { reporter.SetCurrentSceneGroup(this); await reporter.InternalPrepareAsync(); if (Ordering == E_SCENE_LOAD_ORDERING.RANDOM) { this.Scenes = SceneTypes.Select(x => (AScene)Activator.CreateInstance(x)).ToArray(); var sceneLoadTasks = Scenes.Select(x => x.LoadAsync(reporter)); await UniTask.WhenAll(sceneLoadTasks) .ContinueWith(async() => await PreLoadAsync(Scenes, reporter)) .ContinueWith(async() => await reporter.ReportEnd()); } else { this.Scenes = SceneTypes.Select(x => (AScene)Activator.CreateInstance(x)).ToArray(); foreach (var scene in Scenes) { await scene.LoadAsync(reporter); } await PreLoadAsync(Scenes, reporter); await reporter.ReportEnd(); } reporter.SetCurrentSceneGroup(null); await AfterLoadAsync(Scenes); return(this); }
public async UniTask LoadAsync(AReporter reporter, UnityEngine.SceneManagement.LoadSceneMode loadSceneMode = UnityEngine.SceneManagement.LoadSceneMode.Additive) { await reporter.Report(null); this.LoadAsyncOperation = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(this.SceneBuildIndex, loadSceneMode); while (!this.LoadAsyncOperation.isDone) { await reporter.Report(null); await UniTask.Delay(16); } await reporter.Report(null); }
public void RegisterReporter <T>(T reporter) where T : AReporter { this.Reporter = reporter; }
public void RegisterReporter <T>() where T : AReporter { this.Reporter = Activator.CreateInstance <T>(); }