Beispiel #1
0
        /// <inheritdoc cref="IUIController.RequestScreen"/>
        public IPromise RequestScreen(string screenName, object arg = null)
        {
            Promise promise = new Promise();

            if (!_dataController.IsLoaded())
            {
                promise.Fail(new Exception("UISystem is not initialized"));
                return(promise);
            }

            if (_currentScreen != null && _currentScreen.Name == screenName)
            {
                promise.Resolve();
                return(promise);
            }

            UIScreenNode screen = _currentGraph.GetScreenNode(screenName);

            if (screen == null)
            {
                promise.Fail(new Exception($"There is no screen named {screenName}"));
                return(promise);
            }

            List <UIElement> elements = _currentGraph.GetUIElements(screen);

            return(_viewHandler.TransitionScreen(screen.Layer, elements, arg).Then(() =>
            {
                while (_screenStack.Count > 0 &&
                       _screenStack.Peek().Layer >= screen.Layer)
                {
                    _screenStack.Pop();
                }

                _screenStack.Push(screen);
                _currentScreen = _currentGraph.GetScreenNode(screenName);
            }));
        }