gfolf2/src/ui/input_prompt/prompt_map.gd

272 lines
9.3 KiB
GDScript

class_name PromptMap
## Tools for mapping input events to PromptFont glyphs.
const UNKNOWN_INPUT_SYMBOL := PromptFont.ICON_QUESTION
## Keyboard key map
const KEYBOARD := {
KEY_LEFT: PromptFont.KEYBOARD_LEFT,
KEY_UP: PromptFont.KEYBOARD_UP,
KEY_RIGHT: PromptFont.KEYBOARD_RIGHT,
KEY_DOWN: PromptFont.KEYBOARD_DOWN,
KEY_CTRL: PromptFont.KEYBOARD_CONTROL,
KEY_ALT: PromptFont.KEYBOARD_ALT,
KEY_SHIFT: PromptFont.KEYBOARD_SHIFT,
KEY_TAB: PromptFont.KEYBOARD_TAB,
KEY_CAPSLOCK: PromptFont.KEYBOARD_CAPS,
KEY_BACKSPACE: PromptFont.KEYBOARD_BACKSPACE,
KEY_ENTER: PromptFont.KEYBOARD_ENTER,
KEY_KP_ENTER: PromptFont.KEYBOARD_ENTER,
KEY_ESCAPE: PromptFont.KEYBOARD_ESCAPE,
KEY_PRINT: PromptFont.KEYBOARD_PRINT_SCREEN,
KEY_SCROLLLOCK: PromptFont.KEYBOARD_SCROLL_LOCK,
KEY_PAUSE: PromptFont.KEYBOARD_PAUSE,
KEY_NUMLOCK: PromptFont.KEYBOARD_NUM_LOCK,
KEY_INSERT: PromptFont.KEYBOARD_INSERT,
KEY_HOME: PromptFont.KEYBOARD_HOME,
KEY_PAGEUP: PromptFont.KEYBOARD_PAGE_UP,
KEY_DELETE: PromptFont.KEYBOARD_DELETE,
KEY_END: PromptFont.KEYBOARD_END,
KEY_PAGEDOWN: PromptFont.KEYBOARD_PAGE_DOWN,
KEY_SPACE: PromptFont.KEYBOARD_SPACE,
KEY_F1: PromptFont.KEYBOARD_F1,
KEY_F2: PromptFont.KEYBOARD_F2,
KEY_F3: PromptFont.KEYBOARD_F3,
KEY_F4: PromptFont.KEYBOARD_F4,
KEY_F5: PromptFont.KEYBOARD_F5,
KEY_F6: PromptFont.KEYBOARD_F6,
KEY_F7: PromptFont.KEYBOARD_F7,
KEY_F8: PromptFont.KEYBOARD_F8,
KEY_F9: PromptFont.KEYBOARD_F9,
KEY_F10: PromptFont.KEYBOARD_F10,
KEY_F11: PromptFont.KEYBOARD_F11,
KEY_F12: PromptFont.KEYBOARD_F12,
KEY_0: PromptFont.KEYBOARD_0,
KEY_1: PromptFont.KEYBOARD_1,
KEY_2: PromptFont.KEYBOARD_2,
KEY_3: PromptFont.KEYBOARD_3,
KEY_4: PromptFont.KEYBOARD_4,
KEY_5: PromptFont.KEYBOARD_5,
KEY_6: PromptFont.KEYBOARD_6,
KEY_7: PromptFont.KEYBOARD_7,
KEY_8: PromptFont.KEYBOARD_8,
KEY_9: PromptFont.KEYBOARD_9,
KEY_KP_0: PromptFont.KEYBOARD_0,
KEY_KP_1: PromptFont.KEYBOARD_1,
KEY_KP_2: PromptFont.KEYBOARD_2,
KEY_KP_3: PromptFont.KEYBOARD_3,
KEY_KP_4: PromptFont.KEYBOARD_4,
KEY_KP_5: PromptFont.KEYBOARD_5,
KEY_KP_6: PromptFont.KEYBOARD_6,
KEY_KP_7: PromptFont.KEYBOARD_7,
KEY_KP_8: PromptFont.KEYBOARD_8,
KEY_KP_9: PromptFont.KEYBOARD_9,
KEY_A: PromptFont.KEYBOARD_A,
KEY_B: PromptFont.KEYBOARD_B,
KEY_C: PromptFont.KEYBOARD_C,
KEY_D: PromptFont.KEYBOARD_D,
KEY_E: PromptFont.KEYBOARD_E,
KEY_F: PromptFont.KEYBOARD_F,
KEY_G: PromptFont.KEYBOARD_G,
KEY_H: PromptFont.KEYBOARD_H,
KEY_I: PromptFont.KEYBOARD_I,
KEY_J: PromptFont.KEYBOARD_J,
KEY_K: PromptFont.KEYBOARD_K,
KEY_L: PromptFont.KEYBOARD_L,
KEY_M: PromptFont.KEYBOARD_M,
KEY_N: PromptFont.KEYBOARD_N,
KEY_O: PromptFont.KEYBOARD_O,
KEY_P: PromptFont.KEYBOARD_P,
KEY_Q: PromptFont.KEYBOARD_Q,
KEY_R: PromptFont.KEYBOARD_R,
KEY_S: PromptFont.KEYBOARD_S,
KEY_T: PromptFont.KEYBOARD_T,
KEY_U: PromptFont.KEYBOARD_U,
KEY_V: PromptFont.KEYBOARD_V,
KEY_W: PromptFont.KEYBOARD_W,
KEY_X: PromptFont.KEYBOARD_X,
KEY_Y: PromptFont.KEYBOARD_Y,
KEY_Z: PromptFont.KEYBOARD_Z
}
## Mouse button & scroll map
const MOUSE := {
MOUSE_BUTTON_LEFT: PromptFont.MOUSE_1,
MOUSE_BUTTON_RIGHT: PromptFont.MOUSE_2,
MOUSE_BUTTON_MIDDLE: PromptFont.MOUSE_3,
MOUSE_BUTTON_XBUTTON1: PromptFont.MOUSE_4,
MOUSE_BUTTON_XBUTTON2: PromptFont.MOUSE_5,
# PromptFont.MOUSE_6,
# PromptFont.MOUSE_7,
# PromptFont.MOUSE_8,
MOUSE_BUTTON_WHEEL_UP: PromptFont.MOUSE_SCROLL_UP,
MOUSE_BUTTON_WHEEL_DOWN: PromptFont.MOUSE_SCROLL_DOWN
# PromptFont.MOUSE_LEFT,
# PromptFont.MOUSE_RIGHT,
# PromptFont.MOUSE_MIDDLE,
# PromptFont.MOUSE_LEFT_RIGHT,
# PromptFont.MOUSE_UP_DOWN,
# PromptFont.MOUSE_ANY
}
## Generic gamepad button map
const GAMEPAD_BUTTON := {
JOY_BUTTON_X: PromptFont.GAMEPAD_X,
JOY_BUTTON_Y: PromptFont.GAMEPAD_Y,
JOY_BUTTON_B: PromptFont.GAMEPAD_B,
JOY_BUTTON_A: PromptFont.GAMEPAD_A,
JOY_BUTTON_BACK: PromptFont.GAMEPAD_SELECT,
JOY_BUTTON_START: PromptFont.GAMEPAD_START,
JOY_BUTTON_GUIDE: PromptFont.GAMEPAD_HOME,
JOY_BUTTON_LEFT_STICK: PromptFont.ANALOG_L_CLICK,
JOY_BUTTON_RIGHT_STICK: PromptFont.ANALOG_R_CLICK,
JOY_BUTTON_LEFT_SHOULDER: PromptFont.XBOX_LEFT_SHOULDER,
JOY_BUTTON_RIGHT_SHOULDER: PromptFont.XBOX_RIGHT_SHOULDER,
JOY_BUTTON_DPAD_UP: PromptFont.DPAD_UP,
JOY_BUTTON_DPAD_DOWN: PromptFont.DPAD_DOWN,
JOY_BUTTON_DPAD_LEFT: PromptFont.DPAD_LEFT,
JOY_BUTTON_DPAD_RIGHT: PromptFont.DPAD_RIGHT,
JOY_BUTTON_MISC1: PromptFont.XBOX_VIEW,
# JOY_BUTTON_PADDLE_1: ## Wtf is this?
JOY_BUTTON_TOUCHPAD: PromptFont.SONY_TOUCHPAD
}
## Generic gamepad axis map
const GAMEPAD_AXIS := {
JOY_AXIS_LEFT_X: PromptFont.ANALOG_L_LEFT_RIGHT,
JOY_AXIS_LEFT_Y: PromptFont.ANALOG_L_UP_DOWN,
JOY_AXIS_RIGHT_X: PromptFont.ANALOG_R_LEFT_RIGHT,
JOY_AXIS_RIGHT_Y: PromptFont.ANALOG_R_UP_DOWN,
JOY_AXIS_TRIGGER_LEFT: PromptFont.XBOX_LEFT_TRIGGER,
JOY_AXIS_TRIGGER_RIGHT: PromptFont.XBOX_RIGHT_TRIGGER
}
## Xbox gamepad button map
const XBOX_BUTTON := {
JOY_BUTTON_LEFT_SHOULDER: PromptFont.XBOX_LEFT_SHOULDER,
JOY_BUTTON_RIGHT_SHOULDER: PromptFont.XBOX_RIGHT_SHOULDER,
JOY_BUTTON_X: PromptFont.XBOX_X,
JOY_BUTTON_Y: PromptFont.XBOX_Y,
JOY_BUTTON_B: PromptFont.XBOX_B,
JOY_BUTTON_A: PromptFont.XBOX_A,
JOY_BUTTON_MISC1: PromptFont.XBOX_VIEW,
JOY_BUTTON_START: PromptFont.XBOX_MENU,
JOY_BUTTON_DPAD_LEFT: PromptFont.XBOX_DPAD_LEFT,
JOY_BUTTON_DPAD_UP: PromptFont.XBOX_DPAD_UP,
JOY_BUTTON_DPAD_RIGHT: PromptFont.XBOX_DPAD_RIGHT,
JOY_BUTTON_DPAD_DOWN: PromptFont.XBOX_DPAD_DOWN,
JOY_BUTTON_GUIDE: PromptFont.ICON_XBOX
}
## Xbox gamepad axis map
const XBOX_AXIS := {
JOY_AXIS_TRIGGER_LEFT: PromptFont.XBOX_LEFT_TRIGGER,
JOY_AXIS_TRIGGER_RIGHT: PromptFont.XBOX_RIGHT_TRIGGER
}
## Sony gamepad button map
const SONY_BUTTON := {
JOY_BUTTON_LEFT_SHOULDER: PromptFont.SONY_LEFT_SHOULDER,
JOY_BUTTON_RIGHT_SHOULDER: PromptFont.SONY_RIGHT_SHOULDER,
JOY_BUTTON_X: PromptFont.SONY_X,
JOY_BUTTON_Y: PromptFont.SONY_Y,
JOY_BUTTON_B: PromptFont.SONY_B,
JOY_BUTTON_A: PromptFont.SONY_A,
JOY_BUTTON_MISC1: PromptFont.SONY_SHARE,
JOY_BUTTON_TOUCHPAD: PromptFont.SONY_TOUCHPAD,
JOY_BUTTON_START: PromptFont.SONY_OPTIONS,
JOY_BUTTON_GUIDE: PromptFont.ICON_PLAYSTATION
}
## Sony gamepad axis map
const SONY_AXIS := {
JOY_AXIS_TRIGGER_LEFT: PromptFont.SONY_LEFT_TRIGGER,
JOY_AXIS_TRIGGER_RIGHT: PromptFont.SONY_RIGHT_TRIGGER
}
## Nintendo gamepad button map
const NINTENDO_BUTTON := {
JOY_BUTTON_LEFT_SHOULDER: PromptFont.NINTENDO_LEFT_SHOULDER,
JOY_BUTTON_RIGHT_SHOULDER: PromptFont.NINTENDO_RIGHT_SHOULDER,
JOY_BUTTON_BACK: PromptFont.NINTENDO_MINUS,
JOY_BUTTON_START: PromptFont.NINTENDO_PLUS,
JOY_BUTTON_DPAD_LEFT: PromptFont.NINTENDO_DPAD_LEFT,
JOY_BUTTON_DPAD_UP: PromptFont.NINTENDO_DPAD_UP,
JOY_BUTTON_DPAD_RIGHT: PromptFont.NINTENDO_DPAD_RIGHT,
JOY_BUTTON_DPAD_DOWN: PromptFont.NINTENDO_DPAD_DOWN
}
## Nintendo gamepad axis map
const NINTENDO_AXIS := {
JOY_AXIS_TRIGGER_LEFT: PromptFont.NINTENDO_LEFT_TRIGGER,
JOY_AXIS_TRIGGER_RIGHT: PromptFont.NINTENDO_RIGHT_TRIGGER
}
## Get the symbol representing the given keyboard input event.
##
## If there is no such symbol available, returns the key label.
static func key(event: InputEventKey) -> String:
if event.physical_keycode not in KEYBOARD:
return OS.get_keycode_string(
DisplayServer.keyboard_get_keycode_from_physical(event.physical_keycode)
)
return KEYBOARD[event.physical_keycode]
## Get the symbol representing the given mouse button event.
static func mouse_button(event: InputEventMouseButton) -> String:
return MOUSE.get(event.button_index, UNKNOWN_INPUT_SYMBOL)
## Get the symbol representing the given gamepad button event.
static func gamepad_button(event: InputEventJoypadButton) -> String:
return GAMEPAD_BUTTON.get(event.button_index, UNKNOWN_INPUT_SYMBOL)
## Get the symbol representing the given gamepad axis event.
static func gamepad_axis(event: InputEventJoypadMotion) -> String:
return GAMEPAD_AXIS.get(event.axis, UNKNOWN_INPUT_SYMBOL)
## Get the symbol representing the given gamepad button event.
##
## Symbols specific to Xbox gamepads will be used where possible.
static func xbox_button(event: InputEventJoypadButton) -> String:
return XBOX_BUTTON.get(event.button_index, gamepad_button(event))
## Get the symbol representing the given gamepad axis event.
##
## Symbols specific to Xbox gamepads will be used where possible.
static func xbox_axis(event: InputEventJoypadMotion) -> String:
return XBOX_AXIS.get(event.axis, gamepad_axis(event))
## Get the symbol representing the given gamepad button event.
##
## Symbols specific to Playstation Dualshock gamepads will be used where possible.
static func sony_button(event: InputEventJoypadButton) -> String:
return SONY_BUTTON.get(event.button_index, gamepad_button(event))
## Get the symbol representing the given gamepad axis event.
##
## Symbols specific to Playstation Dualshock gamepads will be used where possible.
static func sony_axis(event: InputEventJoypadMotion) -> String:
return SONY_AXIS.get(event.axis, gamepad_axis(event))
## Get the symbol representing the given gamepad button event.
##
## Symbols specific to Nintendo Switch joycons will be used where possible.
static func nintendo_button(event: InputEventJoypadButton) -> String:
return NINTENDO_BUTTON.get(event.button_index, gamepad_button(event))
## Get the symbol representing the given gamepad axis event.
##
## Symbols specific to Nintendo Switch joycons will be used where possible.
static func nintendo_axis(event: InputEventJoypadMotion) -> String:
return NINTENDO_AXIS.get(event.axis, gamepad_axis(event))