public Keyboard(Keyboard_Type type, params KeyCode[] key_config) { constructor_defaults(type); if (setup_configuration(key_config) == false) { } //checks to make sure it's not off keyboard, THROW EXCEPTION if (configuration_location_check(num_rows, row_size) == false) { throw new Exception("ERROR: Invalid key configuration given in constructor"); } }
//================================== Private Functionality Functions ==============================================// //Under the hood stuff really. There's no need for you to be here unless I REALLY screwed up. private void constructor_defaults(Keyboard_Type type) { foreach (KeyCode key in (KeyCode[])Enum.GetValues(typeof(KeyCode))) { if (key_hash.ContainsKey(key) == false) { key_hash.Add(key, new Vector2(-1, -1)); } } clear_key_locations(); keyboard_switch(type); // assigning key_has values using key_map values for (int i = 0; i < num_rows; i++) { for (int j = 0; j < row_size[i]; j++) { key_hash[key_map[i][j]] = new Vector2(i, j); } } }
public bool keyboard_switch(Keyboard_Type type) { // set all keys to a location outside of the map //TODO: make this more efficient by going through the keyboard and setting those to -1, -1 int rows = 0; int[] size; switch (type) { case Keyboard_Type.QWERTY: /* * QWERTYUIOP[] * ASDFGHJKL;' * ZXCVBNM,./ */ rows = 3; size = new int[] { 10, 11, 12 }; break; case Keyboard_Type.Dvorak_US: /* * ,,.PYFGCRL/= * AOEUIDHTNS- * ;QJKXBMWVZ */ rows = 3; size = new int[] { 10, 11, 12 }; break; case Keyboard_Type.AZERTY: //french keyboard /* * There are technically 12 keys on the second row, but not sure if Unity supports it * * AZERTYUIOP^$ * QSDFGHJKLM * <WXCVBN,;:! */ rows = 3; size = new int[] { 11, 10, 12 }; break; default: throw new Exception("Invalid Keyboard Type. No changes were applied"); return(false); break; } //Makes sure the keyboard contains the bound of the location (there is a key that is not off board) // not the case firt time setting this up if (base_key_set) { if (configuration_location_check(rows, size) == false) { throw new Exception("ERROR: Can not convert to new keyboard configuration"); return(false); } } else { base_key_set = true; } num_rows = rows; row_size = size; key_map = new KeyCode[num_rows][]; for (int i = 0; i < num_rows; i++) { key_map[i] = new KeyCode[row_size[i]]; } current_keyboard_type = type; switch (type) { case Keyboard_Type.QWERTY: // map the keys in the key map. // US keyboard: 3 rows, 10, 11, 12 /* * QWERTYUIOP[] * ASDFGHJKL;' * ZXCVBNM,./ */ key_map[2][0] = KeyCode.Q; key_map[2][1] = KeyCode.W; key_map[2][2] = KeyCode.E; key_map[2][3] = KeyCode.R; key_map[2][4] = KeyCode.T; key_map[2][5] = KeyCode.Y; key_map[2][6] = KeyCode.U; key_map[2][7] = KeyCode.I; key_map[2][8] = KeyCode.O; key_map[2][9] = KeyCode.P; key_map[2][10] = KeyCode.LeftBracket; key_map[2][11] = KeyCode.RightBracket; key_map[1][0] = KeyCode.A; key_map[1][1] = KeyCode.S; key_map[1][2] = KeyCode.D; key_map[1][3] = KeyCode.F; key_map[1][4] = KeyCode.G; key_map[1][5] = KeyCode.H; key_map[1][6] = KeyCode.J; key_map[1][7] = KeyCode.K; key_map[1][8] = KeyCode.L; key_map[1][9] = KeyCode.Semicolon; key_map[1][10] = KeyCode.Quote; key_map[0][0] = KeyCode.Z; key_map[0][1] = KeyCode.X; key_map[0][2] = KeyCode.C; key_map[0][3] = KeyCode.V; key_map[0][4] = KeyCode.B; key_map[0][5] = KeyCode.N; key_map[0][6] = KeyCode.M; key_map[0][7] = KeyCode.Comma; key_map[0][8] = KeyCode.Period; key_map[0][9] = KeyCode.Slash; break; case Keyboard_Type.Dvorak_US: /* * ',.PYFGCRL/= * AOEUIDHTNS- * ;QJKXBMWVZ */ key_map[2][0] = KeyCode.Quote; key_map[2][1] = KeyCode.Comma; key_map[2][2] = KeyCode.Period; key_map[2][3] = KeyCode.P; key_map[2][4] = KeyCode.Y; key_map[2][5] = KeyCode.F; key_map[2][6] = KeyCode.G; key_map[2][7] = KeyCode.C; key_map[2][8] = KeyCode.R; key_map[2][9] = KeyCode.L; key_map[2][10] = KeyCode.Slash; key_map[2][11] = KeyCode.Equals; key_map[1][0] = KeyCode.A; key_map[1][1] = KeyCode.S; key_map[1][2] = KeyCode.E; key_map[1][3] = KeyCode.U; key_map[1][4] = KeyCode.I; key_map[1][5] = KeyCode.D; key_map[1][6] = KeyCode.H; key_map[1][7] = KeyCode.T; key_map[1][8] = KeyCode.N; key_map[1][9] = KeyCode.S; key_map[1][10] = KeyCode.Minus; key_map[0][0] = KeyCode.Semicolon; key_map[0][1] = KeyCode.Q; key_map[0][2] = KeyCode.J; key_map[0][3] = KeyCode.K; key_map[0][4] = KeyCode.X; key_map[0][5] = KeyCode.B; key_map[0][6] = KeyCode.M; key_map[0][7] = KeyCode.W; key_map[0][8] = KeyCode.V; key_map[0][9] = KeyCode.Z; break; case Keyboard_Type.AZERTY: //french keyboard /* * AZERTYUIOP^$ * QSDFGHJKLM * <WXCVBN,;:! */ key_map[2][0] = KeyCode.A; key_map[2][1] = KeyCode.Z; key_map[2][2] = KeyCode.E; key_map[2][3] = KeyCode.R; key_map[2][4] = KeyCode.T; key_map[2][5] = KeyCode.Y; key_map[2][6] = KeyCode.U; key_map[2][7] = KeyCode.I; key_map[2][8] = KeyCode.O; key_map[2][9] = KeyCode.P; key_map[2][10] = KeyCode.Caret; key_map[2][11] = KeyCode.Dollar; key_map[1][0] = KeyCode.Q; key_map[1][1] = KeyCode.S; key_map[1][2] = KeyCode.D; key_map[1][3] = KeyCode.F; key_map[1][4] = KeyCode.G; key_map[1][5] = KeyCode.H; key_map[1][6] = KeyCode.J; key_map[1][7] = KeyCode.K; key_map[1][8] = KeyCode.L; key_map[1][9] = KeyCode.M; key_map[0][0] = KeyCode.Less; key_map[0][1] = KeyCode.W; key_map[0][2] = KeyCode.X; key_map[0][3] = KeyCode.C; key_map[0][4] = KeyCode.V; key_map[0][5] = KeyCode.B; key_map[0][6] = KeyCode.N; key_map[0][7] = KeyCode.Comma; key_map[0][8] = KeyCode.Semicolon; key_map[0][9] = KeyCode.Colon; key_map[0][10] = KeyCode.Equals; break; } return(true); }