diff --git a/core/src/main/java/com/agifans/agile/ui/GameScreenInputProcessor.java b/core/src/main/java/com/agifans/agile/ui/GameScreenInputProcessor.java index a9bae74..9fffd4b 100644 --- a/core/src/main/java/com/agifans/agile/ui/GameScreenInputProcessor.java +++ b/core/src/main/java/com/agifans/agile/ui/GameScreenInputProcessor.java @@ -151,23 +151,83 @@ private UserInput getUserInput() { } private void processVirtualKeyboardKeyDown(int keycode) { - if (((keycode >> 8) & 0xFF) == Keys.SHIFT_LEFT) { - getUserInput().keyDown(Keys.SHIFT_LEFT); - } - - getUserInput().keyDown(keycode & 0xFF); - - if (KeyboardTypeData.KEYTYPED_CHAR_MAP.containsKey(keycode)) { - getUserInput().keyTyped(KeyboardTypeData.KEYTYPED_CHAR_MAP.get(keycode)); + if ((keycode != Keys.SWITCH_CHARSET) && (keycode != Keys.CAPS_LOCK)) { + if (((keycode >> 8) & 0xFF) == Keys.SHIFT_LEFT) { + getUserInput().keyDown(Keys.SHIFT_LEFT); + } + + getUserInput().keyDown(keycode & 0xFF); + + if (KeyboardTypeData.KEYTYPED_CHAR_MAP.containsKey(keycode)) { + getUserInput().keyTyped(KeyboardTypeData.KEYTYPED_CHAR_MAP.get(keycode)); + } } } private void processVirtualKeyboardKeyUp(int keycode) { - getUserInput().keyUp(keycode & 0xFF); + if (keycode == Keys.SWITCH_CHARSET) { + processSwitchCharacterSet(); + } else if (keycode == Keys.CAPS_LOCK) { + processCapsLockToggle(); + } else { + getUserInput().keyUp(keycode & 0xFF); + + if (((keycode >> 8) & 0xFF) == Keys.SHIFT_LEFT) { + getUserInput().keyUp(Keys.SHIFT_LEFT); + } + } + } + + private void processSwitchCharacterSet() { + switch (keyboardType) { + case PORTRAIT_LOWER_CASE: + case PORTRAIT_UPPER_CASE: + keyboardType = KeyboardType.PORTRAIT_PUNC_NUMBERS; + break; + + case LANDSCAPE_LOWER_CASE: + case LANDSCAPE_UPPER_CASE: + keyboardType = KeyboardType.LANDSCAPE_PUNC_NUMBERS; + break; + + case PORTRAIT_PUNC_NUMBERS: + keyboardType = KeyboardType.PORTRAIT_LOWER_CASE; + break; + + case LANDSCAPE_PUNC_NUMBERS: + keyboardType = KeyboardType.LANDSCAPE_LOWER_CASE; + break; + + default: + break; + } - if (((keycode >> 8) & 0xFF) == Keys.SHIFT_LEFT) { - getUserInput().keyUp(Keys.SHIFT_LEFT); + viewportManager.update(); + } + + private void processCapsLockToggle() { + switch (keyboardType) { + case PORTRAIT_LOWER_CASE: + keyboardType = KeyboardType.PORTRAIT_UPPER_CASE; + break; + + case PORTRAIT_UPPER_CASE: + keyboardType = KeyboardType.PORTRAIT_LOWER_CASE; + break; + + case LANDSCAPE_LOWER_CASE: + keyboardType = KeyboardType.LANDSCAPE_UPPER_CASE; + break; + + case LANDSCAPE_UPPER_CASE: + keyboardType = KeyboardType.LANDSCAPE_LOWER_CASE; + break; + + default: + break; } + + viewportManager.update(); } /** diff --git a/core/src/main/java/com/agifans/agile/ui/KeyboardTypeData.java b/core/src/main/java/com/agifans/agile/ui/KeyboardTypeData.java index 23848e4..26da839 100644 --- a/core/src/main/java/com/agifans/agile/ui/KeyboardTypeData.java +++ b/core/src/main/java/com/agifans/agile/ui/KeyboardTypeData.java @@ -65,7 +65,9 @@ public class KeyboardTypeData { static { // Note: ESC doesn't go through libgdx keyTyped, so we don't map it here. - KEYTYPED_CHAR_MAP.put(Keys.SPACE, (char)32); + KEYTYPED_CHAR_MAP.put(Keys.BACKSPACE, (char)8); + KEYTYPED_CHAR_MAP.put(Keys.TAB, (char)9); + KEYTYPED_CHAR_MAP.put(Keys.SPACE, (char)32); KEYTYPED_CHAR_MAP.put(EXCLAIMATION_MARK, (char)33); KEYTYPED_CHAR_MAP.put(DOUBLE_QUOTE, (char)34); KEYTYPED_CHAR_MAP.put(HASH, (char)35); @@ -93,7 +95,7 @@ public class KeyboardTypeData { KEYTYPED_CHAR_MAP.put(Keys.NUM_7, (char)55); KEYTYPED_CHAR_MAP.put(Keys.NUM_8, (char)56); KEYTYPED_CHAR_MAP.put(Keys.NUM_9, (char)57); - KEYTYPED_CHAR_MAP.put(Keys.COLON, (char)58); + KEYTYPED_CHAR_MAP.put(COLON, (char)58); KEYTYPED_CHAR_MAP.put(Keys.SEMICOLON, (char)59); KEYTYPED_CHAR_MAP.put(LESS_THAN, (char)60);