Пример #1
0
        /// <summary>
        /// Display the maze along with the editor UI and handle all of the User Inputs
        /// </summary>
        /// <param name="screenBuffer"></param>
        public void Show(ScreenBuffer screenBuffer)
        {
            _isEditorRunning = true;

            SetupMazeEditor(screenBuffer);

            // add the ui border as a constant render
            screenBuffer.AddConstantRender(0, 0, _uiOutline);

            while (_isEditorRunning)
            {
                // we shouldn't need to check whether we need to update as this loop will only continue
                // on user input
                Draw(screenBuffer);

                // read input
                var consoleKeyInfo = Console.ReadKey(true);
                var consoleKey     = consoleKeyInfo.Key;

                // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
                switch (consoleKey)
                {
                /*
                 * Cursor Movement
                 */
                case ConsoleKey.UpArrow:
                    // only move if cursor enabled
                    if (!_cursorEnabled)
                    {
                        break;
                    }

                    MoveCursor(0, -1);
                    _cursorDirection = Direction.Up;
                    break;

                case ConsoleKey.DownArrow:
                    // only move if cursor enabled
                    if (!_cursorEnabled)
                    {
                        break;
                    }

                    MoveCursor(0, 1);
                    _cursorDirection = Direction.Down;
                    break;

                case ConsoleKey.LeftArrow:
                    // only move if cursor enabled
                    if (!_cursorEnabled)
                    {
                        break;
                    }

                    MoveCursor(-1, 0);
                    _cursorDirection = Direction.Left;
                    break;

                case ConsoleKey.RightArrow:
                    // only move if cursor enabled
                    if (!_cursorEnabled)
                    {
                        break;
                    }

                    MoveCursor(1, 0);
                    _cursorDirection = Direction.Right;
                    break;

                /*
                 * Cursor Speed
                 */
                case ConsoleKey.Add:
                    ModifyCursorSpeed(+1);
                    break;

                case ConsoleKey.Subtract:
                    ModifyCursorSpeed(-1);
                    break;

                /*
                 * Draw a Map tile
                 */
                case ConsoleKey.Spacebar:
                    // only draw if the cursor is enabled
                    if (!_cursorEnabled)
                    {
                        break;
                    }

                    DrawTile();
                    break;

                /*
                 * Map Tile Selection
                 */
                case ConsoleKey.D1:
                    _currentTileTool = MazeTileType.None;
                    break;

                case ConsoleKey.D2:
                    _currentTileTool = MazeTileType.Wall;
                    break;

                case ConsoleKey.D3:
                    _currentTileTool = MazeTileType.Start;
                    break;

                case ConsoleKey.D4:
                    _currentTileTool = MazeTileType.Finish;
                    break;

                case ConsoleKey.D5:
                    _currentTileTool = MazeTileType.Player;
                    break;

                /*
                 * Colour selector
                 */
                case ConsoleKey.Tab:
                    CycleColourSelector();
                    break;

                case ConsoleKey.Oem8:
                    _isBackgroundColourSelector = !_isBackgroundColourSelector;
                    break;

                /*
                 * Menus
                 */

                // File menu
                case ConsoleKey.F1:
                    _fileMenu.Show(screenBuffer);
                    break;

                // Edit menu
                case ConsoleKey.F2:
                    _editMenu.Show(screenBuffer);
                    break;

                // Debug Menu
                case ConsoleKey.F3:
                    _debugMenu.Show(screenBuffer);
                    break;
                }

                // clear any other input
                // NOTE: This isn't ideal but this prevents a queue of keys to be read
                //       if the user holds down a key which would cause "input lag" of
                //       considerable effect.
                while (Console.KeyAvailable)
                {
                    Console.ReadKey(true);
                }
            }
        }