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(); }); }); }); }
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(); } }