Exemplo n.º 1
0
    // トランジション
    IObservable <T> MoveTransition <T> (string screenType, TransitionStyle transitionStyle, Action <T> action = null)
        where T : ScreenPresenter
    {
        var        subject = new AsyncSubject <T> ();
        GameObject obj     = Instantiate(ResourcesManager.Instance.GetScreen(screenType), screenContainer) as GameObject;
        var        canvas  = obj.GetComponent <Canvas> ();
        T          screen  = obj.GetComponent <T> ();
        var        effect  = TransitionFactory.Create(transitionStyle);

        Action <Unit> setParam = _ => {
            if (action != null)
            {
                action(screen);
            }
        };

        canvas.enabled = false; // 生成して非表示にしておく
        effect.AnimateIn()
        .SelectMany(_ => screen.Initialize())
        .Do(setParam)
        .SelectMany(_ => screen.OnBeforeMoveIn())
        .Do(_ => canvas.enabled = true)
        .SelectMany(_ => Observable.WhenAll(effect.AnimateOut(), screen.OnMoveIn()))
        .SelectMany(_ => screen.OnEndMoveIn())
        .Subscribe(_ => {}, () => {
            subject.OnNext(screen);
            subject.OnCompleted();
        });
        return(subject);
    }
Exemplo n.º 2
0
    IEnumerator MoveTransitionCoroutine <T> (string screenType, IObserver <T> observer, TransitionStyle transitionStyle = TransitionStyle.Null, Action <T> action = null)
        where T : ScreenPresenter
    {
        var effect = TransitionFactory.Create(transitionStyle);

        yield return(effect.AnimateIn().ToYieldInstruction());

        // 生成
        GameObject obj    = Instantiate(ResourcesManager.Instance.GetScreen(screenType), screenContainer) as GameObject;
        T          screen = obj.GetComponent <T> ();


        // 初期化
        yield return(screen.Initialize().ToYieldInstruction());

        // モデルの注入
        if (action != null)
        {
            action(screen);
        }
        // 遷移
        yield return(screen.OnBeforeMoveIn().ToYieldInstruction());

        //Debug.LogError ("BeforeMoveIn終了");
        yield return(Observable.WhenAll(
                         screen.OnMoveIn(),
                         effect.AnimateOut()
                         ).ToYieldInstruction());

        yield return(screen.OnEndMoveIn().ToYieldInstruction());

        // 副作用
        CurrentScreen = screen;
        observer.OnNext(screen);
        observer.OnCompleted();
    }