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