Exemplo n.º 1
0
        static IEnumerator OnLoadAsync(CancellableSignal signal,
                                       ResourceRequest req,
                                       string path,
                                       string popName,
                                       bool foremost,
                                       Action <Popup> loadDoneCallback)
        {
            yield return(req);

            if (CancellableSignal.IsCancelled(signal))
            {
                yield break;
            }

            var prefab = req.asset as Popup;

            var pop = Popup.OnLoaded(prefab,
                                     path,
                                     popName,
                                     foremost,
                                     false);

            if (null != loadDoneCallback)
            {
                loadDoneCallback(pop);
            }
        }
Exemplo n.º 2
0
            IEnumerator OnOpenSheets(CancellableSignal signal)
            {
                var subTaskHandle = new SubTaskHandle(signal);
                var enumerator    = ServiceModelManager.OpenSheetTask(subTaskHandle);

                while (enumerator.MoveNext())
                {
                    this.SetSubProgress(subTaskHandle.Progress);
                    yield return(enumerator.Current);

                    if (CancellableSignal.IsCancelled(signal))
                    {
                        yield break;
                    }
                }

                if (subTaskHandle.IsError)
                {
#if LOG_DEBUG
                    Debug.LogWarning(string.Format("ASSET:EXCEPT:SHEETS:EXCEPT:{0}", subTaskHandle.Except));
#endif// LOG_DEBUG
                    var e = subTaskHandle.Except;
                    this.SetFailed(signal, 'S', e.GetType().Name, e.Message);
                    yield break;
                }

                this.SetSubProgress(1);
                yield return(null);

                if (CancellableSignal.IsCancelled(signal))
                {
                    yield break;
                }
            }
Exemplo n.º 3
0
            IEnumerator OnOpenServiceTask(Asset.SubTaskHandle sth,
                                          Action loadStart,
                                          Func <bool> loadDone = null)
            {
                var signal = sth.Signal;

                if (CancellableSignal.IsCancelled(signal))
                {
                    yield break;
                }

                try
                {
                    loadStart();
                }
                catch (Exception e)
                {
                    Debug.LogWarning(string.Format("SERVICEMODEL:WARN:OPEN_SERVICE_EXCEPT:{0}", e));
                    sth.SetFailed(e);
                    yield break;
                }

                if (null != loadDone)
                {
                    bool isDone = false;
                    do
                    {
                        try
                        {
                            isDone = loadDone();
                        }
                        catch (Exception e)
                        {
                            Debug.LogWarning(string.Format("SERVICEMODEL:WARN:OPEN_SERVICE_EXCEPT#2:{0}", e));
                            sth.SetFailed(e);
                            yield break;
                        }

                        yield return(null);

                        if (CancellableSignal.IsCancelled(signal))
                        {
                            yield break;
                        }
                    }while (!isDone);
                }
                else
                {
                    yield return(null);

                    if (CancellableSignal.IsCancelled(signal))
                    {
                        yield break;
                    }
                }

                sth.Complete();
            }
Exemplo n.º 4
0
            IEnumerator OnStart(CancellableSignal signal)
            {
                for (State state = State.None, cnt = State.Done; state < cnt; ++state)
                {
                    var enumerator = this.SetState(state, signal);
                    if (null == enumerator)
                    {
                        continue;
                    }

                    while (enumerator.MoveNext())
                    {
                        yield return(enumerator.Current);

                        if (CancellableSignal.IsCancelled(signal))
                        {
                            yield break;
                        }
                    }
                    if (CancellableSignal.IsCancelled(signal))
                    {
                        yield break;
                    }
                }

                // NOTE: last action
                if (this.progressEnd > this.progress)
                {
                    int   lastFrameCount = (int)Mathf.Lerp(30, 15, this.progress); // (0.5 ~ 0.25) + @ sec
                    float dt             = 1 / (float)lastFrameCount;

                    for (int n = 0; n < lastFrameCount; ++n)
                    {
                        this.SetSubProgress(dt * n);
                        yield return(null);

                        if (CancellableSignal.IsCancelled(signal))
                        {
                            yield break;
                        }
                    }
                }

                this.SetSubProgress(1);
                yield return(null);

                if (CancellableSignal.IsCancelled(signal))
                {
                    yield break;
                }

                if (State.Except != this.state)
                {
                    this.state = State.Done;
                }

                this.coroutine = null;
            }
Exemplo n.º 5
0
            internal IEnumerator OpenSheetTask(Asset.SubTaskHandle sth)
            {
                var signal = sth.Signal;

                if (CancellableSignal.IsCancelled(signal))
                {
                    yield break;
                }

                var sheetInfos = new SheetInfo[]
                {
                    //this.CreateSheetInfo<long, GameConfigData   >(this.OnOpenSheets_GameConfigData      ),
                    //this.CreateSheetInfo<long, RegionData       >(this.OnOpenSheets_RegionData          ),
                    //this.CreateSheetInfo<long, ComposerData     >(this.OnOpenSheets_ComposerData        ),
                    //this.CreateSheetInfo<long, MusicData        >(this.OnOpenSheets_MusicData           ),
                    //this.CreateSheetInfo<long, BgmData          >(this.OnOpenSheets_BgmData             ),
                    //this.CreateSheetInfo<long, MatineeData      >(this.OnOpenSheets_MatineeData         ),
                    //this.CreateSheetInfo<long, StarData         >(this.OnOpenSheets_StarData            ),
                    //this.CreateSheetInfo<long, JudgementData    >(this.OnOpenSheets_JudgementData       ),
                    //this.CreateSheetInfo<long, Concours4KeyData >(this.OnOpenSheets_Concours4KeyData    ),
                    //this.CreateSheetInfo<long, Concours6KeyData >(this.OnOpenSheets_Concours6KeyData    ),
                    //this.CreateSheetInfo<long, PianoData        >(this.OnOpenSheets_PianoData           ),
                    this.CreateSheetInfo <long, UnitData>(this.OnOpenSheets_UnitData),
                };

                var progressStride     = 1f / sheetInfos.Length;
                var progressStrideHalf = progressStride * 0.5f;
                var progress           = 0f;

                for (int n = 0, cnt = sheetInfos.Length; n < cnt; ++n)
                {
                    var si     = sheetInfos[n];
                    var source = Resources.Load <TextAsset>(string.Format("Data/{0}", si.sheetname));
                    if (!source)
                    {
                        Debug.LogError(string.Format("SERVICEMODEL:SHEET_NOT_FOUND_ERROR:{0}", si.sheetname));
                    }
                    sth.SetProgress(progress + progressStrideHalf);
                    yield return(null);

                    if (CancellableSignal.IsCancelled(signal))
                    {
                        yield break;
                    }

                    si.parseFunc(si, source);
                    sth.SetProgress(progress += progressStride);
                    yield return(null);

                    if (CancellableSignal.IsCancelled(signal))
                    {
                        yield break;
                    }
                }

                sth.Complete();
            }
Exemplo n.º 6
0
        IEnumerator Routine(UnityAsyncHandler.Input input, SubRoutine[] subRoutines)
        {
            float            subProgressTerm = 1 / (float)subRoutines.Length;
            IEnumerator      enumerator;
            SubRoutineOutput subOutput = new SubRoutineOutput();

            for (int n = 0, count = subRoutines.Length; n < count; ++n)
            {
                subOutput.outSubProgress = 0;
                this.SetSubProgressRange(this.Progress + subProgressTerm);

                SubRoutine subRoutine = subRoutines[n];
                enumerator = subRoutine(input, this.Out, subOutput);
                while (enumerator.MoveNext())
                {
                    this.SetSubProgress(subOutput.outSubProgress);
                    this.Update();
                    yield return(enumerator.Current);

                    if (CancellableSignal.IsCancelled(input.signal))
                    {
                        if (!this.IsCanceled)
                        {
                            this.Cancel();
                        }

                        this.OnCancelDone();
                        yield break;
                    }
                }

                this.SetSubProgress(1);
                this.Update();
                yield return(null);

                if (CancellableSignal.IsCancelled(input.signal))
                {
                    if (!this.IsCanceled)
                    {
                        this.Cancel();
                    }

                    this.OnCancelDone();
                    yield break;
                }
            }

            this.Done();
            yield return(null);
        }
Exemplo n.º 7
0
            IEnumerator OnOpenServiceModels(CancellableSignal signal)
            {
                var   subTaskHandle = new SubTaskHandle(signal);
                var   tasks         = ServiceModelManager.OpenServiceTask(subTaskHandle);
                int   count         = tasks.Length;
                float progress      = 0f;
                float progressDelta = 1 / (float)count;

                foreach (var task in tasks)
                {
                    subTaskHandle.Clear();

                    while (task.MoveNext())
                    {
                        this.SetSubProgress(progress + (progressDelta * subTaskHandle.Progress));
                        yield return(task.Current);

                        if (CancellableSignal.IsCancelled(signal))
                        {
                            yield break;
                        }
                    }

                    progress += progressDelta;
                    this.SetSubProgress(progress);

                    if (subTaskHandle.IsError)
                    {
#if LOG_DEBUG
                        Debug.LogWarning("ASSET:EXCEPT:SERVICE_MODELS");
#endif// LOG_DEBUG
                        var e = subTaskHandle.Except;
                        this.SetFailed(signal, 'C', e.GetType().Name, e.Message);
                        yield break;
                    }
                }

                this.SetSubProgress(1);
                yield return(null);

                if (CancellableSignal.IsCancelled(signal))
                {
                    yield break;
                }
            }
Exemplo n.º 8
0
        IEnumerator OnActiveWithDelay(CancellableSignal signal, float delay, float prev)
        {
            do
            {
                yield return(null);

                if (CancellableSignal.IsCancelled(signal))
                {
                    this.waitForDelay = 0;
                    //Debug.Log("CANCEL");
                    yield break;
                }

                var now   = Time.realtimeSinceStartup;
                var delta = now - prev;

                //var old = this.waitForDelay;
                this.waitForDelay = Mathf.Max(0, this.waitForDelay - delta);
                //Debug.Log("DELAY:" + this.waitForDelay + ", OLD:" + old + ", DT:" + delta + ", PREV:" + prev + ", NOW:" + now);
                prev = now;
            }while (0 < this.waitForDelay);

            this.OnActive(true);
        }