Ejemplo n.º 1
0
    private void SlideScreen(Type screenType, object data, string sceneName, bool isBack, Action onSuccess)
    {
        var currentScreen = GetCurrentScreen();

        LoadObject(screenType, ScreenParent, obj =>
        {
            var uiRect           = GetComponent <RectTransform>();
            var screenRect       = obj.GetComponent <RectTransform>();
            var screenParentRect = ScreenParent.GetComponent <RectTransform>();

            ActiveObject(obj, data, null, () =>
            {
                screenRect.anchoredPosition = new Vector2(isBack ? -uiRect.sizeDelta.x : uiRect.sizeDelta.x, 0);
                var to = new Vector3(isBack ? uiRect.sizeDelta.x : -uiRect.sizeDelta.x, 0, 0);

                TweenUtil.MoveLocal(ScreenParent.gameObject, Vector3.zero, to, TweenType.Linear, 0.5f, () =>
                {
                    if (currentScreen != null)
                    {
                        DeactivateObject(currentScreen.GetType(), null);
                    }
                    screenParentRect.anchoredPosition = Vector2.zero;
                    screenRect.anchoredPosition       = Vector2.zero;
                    _currentScreen = obj.GetComponent <Screen>();

                    if (isBack)
                    {
                        _currentScreen.OnBack();
                    }
                    else
                    {
                        if (_lastScreenData != null)
                        {
                            _lastScreenData.IsSlide = true;
                            _screenHistory.Push(_lastScreenData);
                        }
                    }

                    _lastScreenData = new SwitchScreenData
                    {
                        ScreenType = screenType,
                        Data       = data,
                        SceneName  = sceneName
                    };

                    _onSwitchScreen.Execute(_currentScreen);
                    onSuccess.Execute();
                });
            });
        });
    }
Ejemplo n.º 2
0
    private void ActiveScreen(Type screenType, object data, string sceneName, bool isBack, Action onSuccess)
    {
        Action active = () =>
        {
            LoadObject(screenType, ScreenParent, obj =>
            {
                ActiveObject(obj, data, null, () =>
                {
                    _currentScreen = obj.GetComponent <Screen>();

                    if (isBack)
                    {
                        _currentScreen.OnBack();
                    }
                    else
                    {
                        if (_lastScreenData != null)
                        {
                            _screenHistory.Push(_lastScreenData);
                        }
                    }

                    _lastScreenData = new SwitchScreenData
                    {
                        ScreenType = screenType,
                        Data       = data,
                        SceneName  = sceneName
                    };

                    _onSwitchScreen.Execute(_currentScreen);
                    onSuccess.Execute();
                });
            });
        };

        if (_currentScreen != null)
        {
            DeactivateObject(_currentScreen.GetType(), active);
        }
        else
        {
            active();
        }
    }