private VRUIViewController PopViewControllerStack(ViewControllerPosition pos)
        {
            VRUIViewController viewController = _viewControllerStacks[pos].Last();

            _viewControllerStacks[pos].Remove(viewController);
            return(viewController);
        }
        private void SetScreen(FlowCoordinator _activeFlowCoordinator, CustomViewController newViewController, VRUIViewController origViewController, ViewControllerPosition pos, bool immediately)
        {
            Action <bool> backAction = (immediate) => SetViewController(_activeFlowCoordinator, PopViewControllerStack(pos), pos, immediate);

            _dismissCustom += backAction;  // custom back button behavior
            if (!newViewController.isActivated)
            {
                if (!_viewControllerStacks.ContainsKey(pos))
                {
                    _viewControllerStacks[pos] = new List <VRUIViewController>();
                }

                _viewControllerStacks[pos].Add(origViewController);
                if (newViewController.includeBackButton)
                {
                    newViewController.ClearBackButtonCallbacks();
                    newViewController.backButtonPressed += () => { backAction.Invoke(false); }; // default back button behavior
                }
                SetViewController(_activeFlowCoordinator, newViewController, pos, immediately);
            }
        }
        private void SetViewController(FlowCoordinator flowCoordinator, VRUIViewController viewController, ViewControllerPosition pos, bool immediate)
        {
            string method = string.Empty;

            switch (pos)
            {
            case ViewControllerPosition.Left:
                method = "SetLeftScreenViewController";
                break;

            case ViewControllerPosition.Right:
                method = "SetRightScreenViewController";
                break;

            case ViewControllerPosition.Bottom:
                method = "SetBottomScreenViewController";
                break;

            default:
                return;
            }
            flowCoordinator.InvokePrivateMethod(method, new object[] { viewController, immediate });
        }