private IEnumerator Coro_ExecuteLoading(LoadingData load) { yield return(Coro_Progress(load)); if (string.IsNullOrEmpty(load.nextScreen)) { ScreenDirector.CloseScreen(this, false); } else { if (load.forceClose) { ScreenDirector.CloseScreen(this, false); } else { ScreenDirector.LoadScreen(load.nextScreen, load, load.isNextScreenCached); } } coroutine = null; }
private IEnumerator Coro_Progress(LoadingData load) { for (int i = 0; i < load.coroutines.Count; i++) { yield return(load.coroutines[i]); if (load.forceClose) { yield break; } } if (load.resources.Count > 0) { int srcLoadCount = load.resources.Count; foreach (var task in load.resources) { task.status = TaskStatus.Pending; ResourceManagement.ResourceManager.Load(new ResourceManagement.ResourceManager.LoadTask() { path = System.IO.Path.Combine(task.path, task.name), type = task.type, completed = assets => { if (assets.Length > 0) { task.loadedObj = assets[0]; } srcLoadCount--; task.status = TaskStatus.Ready; } }); } yield return(new WaitUntil(() => srcLoadCount == 0)); } if (load.parallelHttpGroup.Groups.Count > 0) { foreach (DictionaryEntry e in load.parallelHttpGroup.Groups) { if (httpWrapper == null) { httpWrapper = HttpRequesterWrapper.Create(); DontDestroyOnLoad(httpWrapper.gameObject); } ParallelHttp https = (ParallelHttp)e.Value; foreach (DictionaryEntry e1 in https.Https) { var task = (HttpRequestTask)e1.Value; task.status = TaskStatus.Pending; if (task.req == null) { task.status = TaskStatus.Ready; continue; } var req = UnityWebRequester.Create(); req.SetOnSuccess(res => { task.res = res; task.resCode = res.ResponseCode; task.resData = res.ResponseText; task.resTex = res.ResponseTexture; if (task.onSuccess != null) { task.onSuccess(task); } }); req.SetOnFailure(res => { task.res = res; task.resCode = res.ResponseCode; task.resFail = res.ResponseText; if (task.onFailed != null) { task.onFailed(task.resFail); } }); req.SetOnError(res => { task.res = res; task.resCode = res.ResponseCode; task.resError = res.ResponseError; if (task.onFailed != null) { task.onFailed(task.resError); } }); req.SetOnFinish(() => { task.status = TaskStatus.Ready; }); req.AddRequest(task.req); httpWrapper.SendRequest(req); } yield return(new WaitUntil(() => httpWrapper == null || httpWrapper.IsEmpty)); if (load.forceClose) { yield break; } bool forceBreak = false; foreach (DictionaryEntry e1 in https.Https) { var task = (HttpRequestTask)e1.Value; if (task.abortIfFail && (string.IsNullOrEmpty(task.resFail) == false || string.IsNullOrEmpty(task.resError) == false)) { forceBreak = true; break; } } if (forceBreak) { break; } } DestroyHttpWrapper(); } foreach (var kv in load.https) { var task = kv.Value; task.status = TaskStatus.Pending; if (task.req == null) { task.status = TaskStatus.Ready; continue; } bool pending = true; bool failed = false; var reqSender = UnityWebRequester.Create(); reqSender.SetOnSuccess(res => { task.res = res; task.resCode = res.ResponseCode; task.resData = res.ResponseText; task.resTex = res.ResponseTexture; if (task.onSuccess != null) { task.onSuccess(task); } }); reqSender.SetOnFailure(res => { task.res = res; task.resCode = res.ResponseCode; task.resFail = res.ResponseText; failed = true; if (task.onFailed != null) { task.onFailed(task.resFail); } }); reqSender.SetOnError(res => { task.res = res; task.resCode = res.ResponseCode; task.resError = res.ResponseError; failed = true; if (task.onFailed != null) { task.onFailed(task.resError); } }); reqSender.SetOnFinish(() => { pending = false; task.status = TaskStatus.Ready; }); reqSender.AddRequest(task.req); reqSender.Send(); // Wait request pending... yield return(new WaitWhile(() => pending)); if (load.forceClose) { yield break; } if (failed && task.abortIfFail) { break; } } if (load.forceClose) { yield break; } for (int i = 0; i < load.lateCoroutines.Count; i++) { yield return(load.lateCoroutines[i]); if (load.forceClose) { yield break; } } }
public override void OnStart(object obj) { LoadingData loadingData = (LoadingData)obj; coroutine = StartCoroutine(Coro_ExecuteLoading(loadingData)); }
static public void Open(LoadingData loadingData) { ScreenDirector.LoadScreen("ScreenLoading", loadingData, loadingData.isLoadingScreenCached); }