46 lines
1.8 KiB
GDScript
46 lines
1.8 KiB
GDScript
class_name KeyAdjacency
|
|
|
|
const MAP: Dictionary[Key, Array] = {
|
|
KEY_Q: [KEY_W, KEY_A],
|
|
KEY_W: [KEY_E, KEY_S, KEY_A, KEY_Q],
|
|
KEY_E: [KEY_R, KEY_D, KEY_S, KEY_W],
|
|
KEY_R: [KEY_T, KEY_F, KEY_D, KEY_E],
|
|
KEY_T: [KEY_Y, KEY_G, KEY_F, KEY_R],
|
|
KEY_Y: [KEY_U, KEY_H, KEY_G, KEY_T],
|
|
KEY_U: [KEY_I, KEY_J, KEY_H, KEY_Y],
|
|
KEY_I: [KEY_O, KEY_K, KEY_J, KEY_U],
|
|
KEY_O: [KEY_P, KEY_L, KEY_K, KEY_I],
|
|
KEY_P: [KEY_BRACKETLEFT, KEY_SEMICOLON, KEY_L, KEY_O],
|
|
KEY_BRACKETLEFT: [KEY_BRACKETRIGHT, KEY_APOSTROPHE, KEY_SEMICOLON, KEY_P],
|
|
KEY_BRACKETRIGHT: [KEY_APOSTROPHE, KEY_BRACKETLEFT],
|
|
KEY_A: [KEY_Q, KEY_W, KEY_S, KEY_Z],
|
|
KEY_S: [KEY_W, KEY_E, KEY_D, KEY_X, KEY_Z, KEY_A],
|
|
KEY_D: [KEY_E, KEY_R, KEY_F, KEY_C, KEY_X, KEY_S],
|
|
KEY_F: [KEY_R, KEY_T, KEY_G, KEY_V, KEY_C, KEY_D],
|
|
KEY_G: [KEY_T, KEY_Y, KEY_H, KEY_B, KEY_V, KEY_F],
|
|
KEY_H: [KEY_Y, KEY_U, KEY_J, KEY_N, KEY_B, KEY_G],
|
|
KEY_J: [KEY_U, KEY_I, KEY_K, KEY_M, KEY_N, KEY_H],
|
|
KEY_K: [KEY_I, KEY_O, KEY_L, KEY_COMMA, KEY_M, KEY_J],
|
|
KEY_L: [KEY_O, KEY_P, KEY_SEMICOLON, KEY_PERIOD, KEY_COMMA, KEY_K],
|
|
KEY_SEMICOLON:
|
|
[KEY_P, KEY_BRACKETLEFT, KEY_APOSTROPHE, KEY_SLASH, KEY_PERIOD, KEY_L],
|
|
KEY_APOSTROPHE: [KEY_BRACKETLEFT, KEY_BRACKETRIGHT, KEY_SLASH, KEY_SEMICOLON],
|
|
KEY_Z: [KEY_A, KEY_S, KEY_X],
|
|
KEY_X: [KEY_S, KEY_D, KEY_C, KEY_Z],
|
|
KEY_C: [KEY_D, KEY_F, KEY_V, KEY_X],
|
|
KEY_V: [KEY_F, KEY_G, KEY_B, KEY_C],
|
|
KEY_B: [KEY_G, KEY_H, KEY_N, KEY_V],
|
|
KEY_N: [KEY_H, KEY_J, KEY_M, KEY_B],
|
|
KEY_M: [KEY_J, KEY_K, KEY_COMMA, KEY_N],
|
|
KEY_COMMA: [KEY_K, KEY_L, KEY_PERIOD, KEY_M],
|
|
KEY_PERIOD: [KEY_L, KEY_SEMICOLON, KEY_SLASH, KEY_COMMA],
|
|
KEY_SLASH: [KEY_SEMICOLON, KEY_APOSTROPHE, KEY_PERIOD],
|
|
}
|
|
|
|
|
|
static func is_adjacent(from: GameKey, to: GameKey) -> bool:
|
|
return (
|
|
MAP.has(from.props.physical_keycode)
|
|
and (to.props.physical_keycode in KeyAdjacency.MAP[from.props.physical_keycode])
|
|
)
|