protected override void Awake()
        {
            base.Awake();

            keyMapping = new UDEPlayer.KeyMappingInfo()
            {
                moveUp    = KeyCode.UpArrow,
                moveDown  = KeyCode.DownArrow,
                moveLeft  = KeyCode.LeftArrow,
                moveRight = KeyCode.RightArrow,
                shoot     = KeyCode.Z,
                slowMode  = KeyCode.LeftShift
            };
        }
        private void OnEnable()
        {
            UDEPlayer.KeyMappingInfo keyMappingInfo = KeyMappingManager.Instance.KeyMapping;

            keyMapping.moveUp.text    = keyMappingInfo.moveUp.ToString();
            keyMapping.moveDown.text  = keyMappingInfo.moveDown.ToString();
            keyMapping.moveLeft.text  = keyMappingInfo.moveLeft.ToString();
            keyMapping.moveRight.text = keyMappingInfo.moveRight.ToString();
            keyMapping.shoot.text     = keyMappingInfo.shoot.ToString();
            keyMapping.slowMode.text  = keyMappingInfo.slowMode.ToString();

            KeyName currKeySelected = (KeyName)(currentRow + RowNumber * currentColumn);

            if (currKeySelected == KeyName.MoveUp)
            {
                keyMapping.moveUp.color = selectColor;
            }
            else
            {
                keyMapping.moveUp.color = unselectColor;
            }

            if (currKeySelected == KeyName.MoveDown)
            {
                keyMapping.moveDown.color = selectColor;
            }
            else
            {
                keyMapping.moveDown.color = unselectColor;
            }

            if (currKeySelected == KeyName.MoveLeft)
            {
                keyMapping.moveLeft.color = selectColor;
            }
            else
            {
                keyMapping.moveLeft.color = unselectColor;
            }

            if (currKeySelected == KeyName.MoveRight)
            {
                keyMapping.moveRight.color = selectColor;
            }
            else
            {
                keyMapping.moveRight.color = unselectColor;
            }

            if (currKeySelected == KeyName.Shoot)
            {
                keyMapping.shoot.color = selectColor;
            }
            else
            {
                keyMapping.shoot.color = unselectColor;
            }

            if (currKeySelected == KeyName.SlowMode)
            {
                keyMapping.slowMode.color = selectColor;
            }
            else
            {
                keyMapping.slowMode.color = unselectColor;
            }

            readingKeyInput = false;
        }
        private void Update()
        {
            Gamepad pad = Gamepad.current;

            if (!readingKeyInput)
            {
                if (Input.GetKeyDown(KeyCode.LeftArrow) || (pad != null && pad.dpad.left.wasPressedThisFrame))
                {
                    if (currentColumn > 0)
                    {
                        KeyName currKeySelected = (KeyName)(currentRow + RowNumber * currentColumn);
                        switch (currKeySelected)
                        {
                        case KeyName.MoveUp:
                            keyMapping.moveUp.color = unselectColor;
                            break;

                        case KeyName.MoveDown:
                            keyMapping.moveDown.color = unselectColor;
                            break;

                        case KeyName.MoveLeft:
                            keyMapping.moveLeft.color = unselectColor;
                            break;

                        case KeyName.MoveRight:
                            keyMapping.moveRight.color = unselectColor;
                            break;

                        case KeyName.Shoot:
                            keyMapping.shoot.color = unselectColor;
                            break;

                        case KeyName.SlowMode:
                            keyMapping.slowMode.color = unselectColor;
                            break;
                        }
                        currentColumn--;

                        currKeySelected = (KeyName)(currentRow + RowNumber * currentColumn);
                        switch (currKeySelected)
                        {
                        case KeyName.MoveUp:
                            keyMapping.moveUp.color = selectColor;
                            break;

                        case KeyName.MoveDown:
                            keyMapping.moveDown.color = selectColor;
                            break;

                        case KeyName.MoveLeft:
                            keyMapping.moveLeft.color = selectColor;
                            break;

                        case KeyName.MoveRight:
                            keyMapping.moveRight.color = selectColor;
                            break;

                        case KeyName.Shoot:
                            keyMapping.shoot.color = selectColor;
                            break;

                        case KeyName.SlowMode:
                            keyMapping.slowMode.color = selectColor;
                            break;
                        }

                        settings.PlayMenuMove();
                    }
                    else
                    {
                        settings.PlayMenuError();
                    }
                }
                else if (Input.GetKeyDown(KeyCode.RightArrow) || (pad != null && pad.dpad.right.wasPressedThisFrame))
                {
                    if (currentColumn < ColumnNumber - 1)
                    {
                        KeyName currKeySelected = (KeyName)(currentRow + RowNumber * currentColumn);
                        switch (currKeySelected)
                        {
                        case KeyName.MoveUp:
                            keyMapping.moveUp.color = unselectColor;
                            break;

                        case KeyName.MoveDown:
                            keyMapping.moveDown.color = unselectColor;
                            break;

                        case KeyName.MoveLeft:
                            keyMapping.moveLeft.color = unselectColor;
                            break;

                        case KeyName.MoveRight:
                            keyMapping.moveRight.color = unselectColor;
                            break;

                        case KeyName.Shoot:
                            keyMapping.shoot.color = unselectColor;
                            break;

                        case KeyName.SlowMode:
                            keyMapping.slowMode.color = unselectColor;
                            break;
                        }
                        currentColumn++;

                        currKeySelected = (KeyName)(currentRow + RowNumber * currentColumn);
                        switch (currKeySelected)
                        {
                        case KeyName.MoveUp:
                            keyMapping.moveUp.color = selectColor;
                            break;

                        case KeyName.MoveDown:
                            keyMapping.moveDown.color = selectColor;
                            break;

                        case KeyName.MoveLeft:
                            keyMapping.moveLeft.color = selectColor;
                            break;

                        case KeyName.MoveRight:
                            keyMapping.moveRight.color = selectColor;
                            break;

                        case KeyName.Shoot:
                            keyMapping.shoot.color = selectColor;
                            break;

                        case KeyName.SlowMode:
                            keyMapping.slowMode.color = selectColor;
                            break;
                        }

                        settings.PlayMenuMove();
                    }
                    else
                    {
                        settings.PlayMenuError();
                    }
                }
                else if (Input.GetKeyDown(KeyCode.UpArrow) || (pad != null && pad.dpad.up.wasPressedThisFrame))
                {
                    if (currentRow > 0)
                    {
                        KeyName currKeySelected = (KeyName)(currentRow + RowNumber * currentColumn);
                        switch (currKeySelected)
                        {
                        case KeyName.MoveUp:
                            keyMapping.moveUp.color = unselectColor;
                            break;

                        case KeyName.MoveDown:
                            keyMapping.moveDown.color = unselectColor;
                            break;

                        case KeyName.MoveLeft:
                            keyMapping.moveLeft.color = unselectColor;
                            break;

                        case KeyName.MoveRight:
                            keyMapping.moveRight.color = unselectColor;
                            break;

                        case KeyName.Shoot:
                            keyMapping.shoot.color = unselectColor;
                            break;

                        case KeyName.SlowMode:
                            keyMapping.slowMode.color = unselectColor;
                            break;
                        }
                        currentRow--;

                        currKeySelected = (KeyName)(currentRow + RowNumber * currentColumn);
                        switch (currKeySelected)
                        {
                        case KeyName.MoveUp:
                            keyMapping.moveUp.color = selectColor;
                            break;

                        case KeyName.MoveDown:
                            keyMapping.moveDown.color = selectColor;
                            break;

                        case KeyName.MoveLeft:
                            keyMapping.moveLeft.color = selectColor;
                            break;

                        case KeyName.MoveRight:
                            keyMapping.moveRight.color = selectColor;
                            break;

                        case KeyName.Shoot:
                            keyMapping.shoot.color = selectColor;
                            break;

                        case KeyName.SlowMode:
                            keyMapping.slowMode.color = selectColor;
                            break;
                        }

                        settings.PlayMenuMove();
                    }
                    else
                    {
                        settings.PlayMenuError();
                    }
                }
                else if (Input.GetKeyDown(KeyCode.DownArrow) || (pad != null && pad.dpad.down.wasPressedThisFrame))
                {
                    if (currentRow < RowNumber - 1)
                    {
                        KeyName currKeySelected = (KeyName)(currentRow + RowNumber * currentColumn);
                        switch (currKeySelected)
                        {
                        case KeyName.MoveUp:
                            keyMapping.moveUp.color = unselectColor;
                            break;

                        case KeyName.MoveDown:
                            keyMapping.moveDown.color = unselectColor;
                            break;

                        case KeyName.MoveLeft:
                            keyMapping.moveLeft.color = unselectColor;
                            break;

                        case KeyName.MoveRight:
                            keyMapping.moveRight.color = unselectColor;
                            break;

                        case KeyName.Shoot:
                            keyMapping.shoot.color = unselectColor;
                            break;

                        case KeyName.SlowMode:
                            keyMapping.slowMode.color = unselectColor;
                            break;
                        }
                        currentRow++;

                        currKeySelected = (KeyName)(currentRow + RowNumber * currentColumn);
                        switch (currKeySelected)
                        {
                        case KeyName.MoveUp:
                            keyMapping.moveUp.color = selectColor;
                            break;

                        case KeyName.MoveDown:
                            keyMapping.moveDown.color = selectColor;
                            break;

                        case KeyName.MoveLeft:
                            keyMapping.moveLeft.color = selectColor;
                            break;

                        case KeyName.MoveRight:
                            keyMapping.moveRight.color = selectColor;
                            break;

                        case KeyName.Shoot:
                            keyMapping.shoot.color = selectColor;
                            break;

                        case KeyName.SlowMode:
                            keyMapping.slowMode.color = selectColor;
                            break;
                        }

                        settings.PlayMenuMove();
                    }
                    else
                    {
                        settings.PlayMenuError();
                    }
                }
                else if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter) || (pad != null && pad.buttonSouth.wasPressedThisFrame))
                {
                    KeyName currKeySelected = (KeyName)(currentRow + RowNumber * currentColumn);
                    switch (currKeySelected)
                    {
                    case KeyName.MoveUp:
                        keyMapping.moveUp.text = I2.Loc.ScriptLocalization.Settings_Keyboard.ReadingKey;
                        break;

                    case KeyName.MoveDown:
                        keyMapping.moveDown.text = I2.Loc.ScriptLocalization.Settings_Keyboard.ReadingKey;
                        break;

                    case KeyName.MoveLeft:
                        keyMapping.moveLeft.text = I2.Loc.ScriptLocalization.Settings_Keyboard.ReadingKey;
                        break;

                    case KeyName.MoveRight:
                        keyMapping.moveRight.text = I2.Loc.ScriptLocalization.Settings_Keyboard.ReadingKey;
                        break;

                    case KeyName.Shoot:
                        keyMapping.shoot.text = I2.Loc.ScriptLocalization.Settings_Keyboard.ReadingKey;
                        break;

                    case KeyName.SlowMode:
                        keyMapping.slowMode.text = I2.Loc.ScriptLocalization.Settings_Keyboard.ReadingKey;
                        break;
                    }
                    readingKeyInput = true;
                }
            }
            else
            {
                if (!Input.anyKeyDown)
                {
                    return;
                }

                KeyName currKeySelected = (KeyName)(currentRow + RowNumber * currentColumn);
                if (Input.GetKeyDown(KeyCode.Escape))
                {
                    UDEPlayer.KeyMappingInfo keyMappingInfo = KeyMappingManager.Instance.KeyMapping;

                    switch (currKeySelected)
                    {
                    case KeyName.MoveUp:
                        keyMapping.moveUp.text = keyMappingInfo.moveUp.ToString();
                        break;

                    case KeyName.MoveDown:
                        keyMapping.moveDown.text = keyMappingInfo.moveDown.ToString();
                        break;

                    case KeyName.MoveLeft:
                        keyMapping.moveLeft.text = keyMappingInfo.moveLeft.ToString();
                        break;

                    case KeyName.MoveRight:
                        keyMapping.moveRight.text = keyMappingInfo.moveRight.ToString();
                        break;

                    case KeyName.Shoot:
                        keyMapping.shoot.text = keyMappingInfo.shoot.ToString();
                        break;

                    case KeyName.SlowMode:
                        keyMapping.slowMode.text = keyMappingInfo.slowMode.ToString();
                        break;
                    }
                    readingKeyInput = false;
                }
                else if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
                {
                    return;
                }
                else
                {
                    KeyCode key = KeyMappingManager.GetKeyCodeDown();
                    if (key.ToString().Contains("Joystick")) // Do not allow joystick input.
                    {
                        return;
                    }

                    if (key != KeyCode.None)
                    {
                        UDEPlayer.KeyMappingInfo keyMappingInfo = KeyMappingManager.Instance.KeyMapping;

                        switch (currKeySelected)
                        {
                        case KeyName.MoveUp:
                            keyMappingInfo.moveUp  = key;
                            keyMapping.moveUp.text = keyMappingInfo.moveUp.ToString();
                            break;

                        case KeyName.MoveDown:
                            keyMappingInfo.moveDown  = key;
                            keyMapping.moveDown.text = keyMappingInfo.moveDown.ToString();
                            break;

                        case KeyName.MoveLeft:
                            keyMappingInfo.moveLeft  = key;
                            keyMapping.moveLeft.text = keyMappingInfo.moveLeft.ToString();
                            break;

                        case KeyName.MoveRight:
                            keyMappingInfo.moveRight  = key;
                            keyMapping.moveRight.text = keyMappingInfo.moveRight.ToString();
                            break;

                        case KeyName.Shoot:
                            keyMappingInfo.shoot  = key;
                            keyMapping.shoot.text = keyMappingInfo.shoot.ToString();
                            break;

                        case KeyName.SlowMode:
                            keyMappingInfo.slowMode  = key;
                            keyMapping.slowMode.text = keyMappingInfo.slowMode.ToString();
                            break;
                        }
                        KeyMappingManager.Instance.KeyMapping = keyMappingInfo;

                        readingKeyInput = false;
                    }
                }
            }
        }