Exemple #1
0
        private Option <ICommand> HandleInput()
        {
            IState currentState = _states.Peek();

            if (!Terminal.HasInput())
            {
                return((currentState is AutoexploreState)
                   ? currentState.HandleKeyInput(Terminal.TK_INPUT_NONE)
                   : Option.None <ICommand>());
            }

            int key = Terminal.Read();

            if (key == Terminal.TK_CLOSE)
            {
                Game.Exit();
                return(Option.None <ICommand>());
            }

            bool left  = key == Terminal.TK_MOUSE_LEFT;
            bool right = key == Terminal.TK_MOUSE_RIGHT;

            if (key == Terminal.TK_MOUSE_MOVE || left || right)
            {
                int       x     = Terminal.State(Terminal.TK_MOUSE_X);
                int       y     = Terminal.State(Terminal.TK_MOUSE_Y);
                LayerInfo layer = _consoles[currentState.GetType()];

                return(layer.PointInside(x, y)
                    ? currentState.HandleMouseInput(x - layer.X, y - layer.Y, left, right)
                    : Option.None <ICommand>());
            }

            if (key == Terminal.TK_ESCAPE)
            {
                PopState();
                if (_states.Count == 0)
                {
                    Game.Exit();
                }

                return(Option.None <ICommand>());
            }

            return(currentState.HandleKeyInput(key));
        }