Internet/Local/Hotseat working (still need to test for bugs). ALso get an RPC error because we switch scene...

This commit is contained in:
Sch1nken 2024-03-24 03:30:54 +01:00
parent c95b8186ab
commit c4909db2a5
654 changed files with 18133 additions and 39 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,296 @@
@tool
extends Resource
class_name InputIconScheme
# We have a copy of the keys as an array for two reasons:
# 1. We cannot iterate over the [param @GlobalScope.Key] enumerator, just reference it.
# 2. In order to NOT add the 193 keyboards keys manualy, we can populate them in code.
static var keys: Array[int] = [
KEY_NONE,
KEY_SPECIAL,
KEY_ESCAPE,
KEY_TAB,
KEY_BACKTAB,
KEY_BACKSPACE,
KEY_ENTER,
KEY_KP_ENTER,
KEY_INSERT,
KEY_DELETE,
KEY_PAUSE,
KEY_PRINT,
KEY_SYSREQ,
KEY_CLEAR,
KEY_HOME,
KEY_END,
KEY_LEFT,
KEY_UP,
KEY_RIGHT,
KEY_DOWN,
KEY_PAGEUP,
KEY_PAGEDOWN,
KEY_SHIFT,
KEY_CTRL,
KEY_META,
KEY_ALT,
KEY_CAPSLOCK,
KEY_NUMLOCK,
KEY_SCROLLLOCK,
KEY_F1,
KEY_F2,
KEY_F3,
KEY_F4,
KEY_F5,
KEY_F6,
KEY_F7,
KEY_F8,
KEY_F9,
KEY_F10,
KEY_F11,
KEY_F12,
KEY_F13,
KEY_F14,
KEY_F15,
KEY_F16,
KEY_F17,
KEY_F18,
KEY_F19,
KEY_F20,
KEY_F21,
KEY_F22,
KEY_F23,
KEY_F24,
KEY_F25,
KEY_F26,
KEY_F27,
KEY_F28,
KEY_F29,
KEY_F30,
KEY_F31,
KEY_F32,
KEY_F33,
KEY_F34,
KEY_F35,
KEY_KP_MULTIPLY,
KEY_KP_DIVIDE,
KEY_KP_SUBTRACT,
KEY_KP_PERIOD,
KEY_KP_ADD,
KEY_KP_0,
KEY_KP_1,
KEY_KP_2,
KEY_KP_3,
KEY_KP_4,
KEY_KP_5,
KEY_KP_6,
KEY_KP_7,
KEY_KP_8,
KEY_KP_9,
KEY_MENU,
KEY_HYPER,
KEY_HELP,
KEY_BACK,
KEY_FORWARD,
KEY_STOP,
KEY_REFRESH,
KEY_VOLUMEDOWN,
KEY_VOLUMEMUTE,
KEY_VOLUMEUP,
KEY_MEDIAPLAY,
KEY_MEDIASTOP,
KEY_MEDIAPREVIOUS,
KEY_MEDIANEXT,
KEY_MEDIARECORD,
KEY_HOMEPAGE,
KEY_FAVORITES,
KEY_SEARCH,
KEY_STANDBY,
KEY_OPENURL,
KEY_LAUNCHMAIL,
KEY_LAUNCHMEDIA,
KEY_LAUNCH0,
KEY_LAUNCH1,
KEY_LAUNCH2,
KEY_LAUNCH3,
KEY_LAUNCH4,
KEY_LAUNCH5,
KEY_LAUNCH6,
KEY_LAUNCH7,
KEY_LAUNCH8,
KEY_LAUNCH9,
KEY_LAUNCHA,
KEY_LAUNCHB,
KEY_LAUNCHC,
KEY_LAUNCHD,
KEY_LAUNCHE,
KEY_LAUNCHF,
KEY_GLOBE,
KEY_KEYBOARD,
KEY_JIS_EISU,
KEY_JIS_KANA,
KEY_UNKNOWN,
KEY_SPACE,
KEY_EXCLAM,
KEY_QUOTEDBL,
KEY_NUMBERSIGN,
KEY_DOLLAR,
KEY_PERCENT,
KEY_AMPERSAND,
KEY_APOSTROPHE,
KEY_PARENLEFT,
KEY_PARENRIGHT,
KEY_ASTERISK,
KEY_PLUS,
KEY_COMMA,
KEY_MINUS,
KEY_PERIOD,
KEY_SLASH,
KEY_0,
KEY_1,
KEY_2,
KEY_3,
KEY_4,
KEY_5,
KEY_6,
KEY_7,
KEY_8,
KEY_9,
KEY_COLON,
KEY_SEMICOLON,
KEY_LESS,
KEY_EQUAL,
KEY_GREATER,
KEY_QUESTION,
KEY_AT,
KEY_A,
KEY_B,
KEY_C,
KEY_D,
KEY_E,
KEY_F,
KEY_G,
KEY_H,
KEY_I,
KEY_J,
KEY_K,
KEY_L,
KEY_M,
KEY_N,
KEY_O,
KEY_P,
KEY_Q,
KEY_R,
KEY_S,
KEY_T,
KEY_U,
KEY_V,
KEY_W,
KEY_X,
KEY_Y,
KEY_Z,
KEY_BRACKETLEFT,
KEY_BACKSLASH,
KEY_BRACKETRIGHT,
KEY_ASCIICIRCUM,
KEY_UNDERSCORE,
KEY_QUOTELEFT,
KEY_BRACELEFT,
KEY_BAR,
KEY_BRACERIGHT,
KEY_ASCIITILDE,
KEY_YEN,
KEY_SECTION
]
static var mouse_buttons: Array[int] = [
MOUSE_BUTTON_NONE,
MOUSE_BUTTON_LEFT,
MOUSE_BUTTON_RIGHT,
MOUSE_BUTTON_MIDDLE,
MOUSE_BUTTON_WHEEL_UP,
MOUSE_BUTTON_WHEEL_DOWN,
MOUSE_BUTTON_WHEEL_LEFT,
MOUSE_BUTTON_WHEEL_RIGHT,
MOUSE_BUTTON_XBUTTON1,
MOUSE_BUTTON_XBUTTON2
]
static var joy_buttons: Array[int] = [
JOY_BUTTON_INVALID,
JOY_BUTTON_A,
JOY_BUTTON_B,
JOY_BUTTON_X,
JOY_BUTTON_Y,
JOY_BUTTON_BACK,
JOY_BUTTON_GUIDE,
JOY_BUTTON_START,
JOY_BUTTON_LEFT_STICK,
JOY_BUTTON_RIGHT_STICK,
JOY_BUTTON_LEFT_SHOULDER,
JOY_BUTTON_RIGHT_SHOULDER,
JOY_BUTTON_DPAD_UP,
JOY_BUTTON_DPAD_DOWN,
JOY_BUTTON_DPAD_LEFT,
JOY_BUTTON_DPAD_RIGHT,
JOY_BUTTON_MISC1,
JOY_BUTTON_PADDLE1,
JOY_BUTTON_PADDLE2,
JOY_BUTTON_PADDLE3,
JOY_BUTTON_PADDLE4,
JOY_BUTTON_TOUCHPAD,
JOY_BUTTON_SDL_MAX,
JOY_BUTTON_MAX
]
## [b]DESTRUCTIVE[/b] it will fill arrays below with empty [class KeyIcons]
@export var generate_presets: bool = false:
set = set_generate_preset
@export var keyboard: Array[KeyIcon] = []
@export var mouse: Array[KeyIcon] = []
## @tutorial(Guidance): https://docs.godotengine.org/en/stable/classes/class_%40globalscope.html#enum-globalscope-joybutton
@export var joy: Array[KeyIcon] = []
# i wish i had a button
func set_generate_preset(value: bool) -> void:
generate_presets = value
if not Engine.is_editor_hint():
return
if generate_presets:
keyboard = populate_key_icons(keys, KeyIcon.InputTypes.KEYBOARD)
mouse = populate_key_icons(mouse_buttons, KeyIcon.InputTypes.MOUSE)
joy = populate_key_icons(joy_buttons, KeyIcon.InputTypes.JOY_BUTTON)
generate_presets = false
func populate_key_icons(array: Array, type: KeyIcon.InputTypes) -> Array[KeyIcon]:
var arr: Array[KeyIcon] = []
for code in array:
var key_icon: KeyIcon = KeyIcon.new()
key_icon.input_type = type
key_icon.keycode = code
arr.append(key_icon)
return arr
## We gram the KeyIcon Resource by its keycode and type
func get_key_icon(keycode: int, type: KeyIcon.InputTypes) -> KeyIcon:
match type:
KeyIcon.InputTypes.KEYBOARD:
return get_key_icon_by_keycode(keycode, keyboard)
KeyIcon.InputTypes.MOUSE:
return get_key_icon_by_keycode(keycode, mouse)
KeyIcon.InputTypes.JOY_BUTTON:
return get_key_icon_by_keycode(keycode, joy)
# for key_icon in keyboard:
# if key_icon.keycode == keycode:
# return key_icon
return null
## We grab the KeyIcon Resource by its keycode in an array, its more of a helper function
func get_key_icon_by_keycode(keycode: int, array: Array[KeyIcon]) -> KeyIcon:
for key_icon in array:
if key_icon.keycode == keycode:
return key_icon
return null

View file

@ -0,0 +1,138 @@
@tool
extends Resource
class_name KeyIcon
enum InputTypes { KEYBOARD, MOUSE, JOY_BUTTON }
@export var input_type: InputTypes = InputTypes.KEYBOARD
## The keycode, its value depends on its type
@export var keycode: int = KEY_NONE:
set = update_name
## And the image that represents that keycode
@export var icon: Texture2D
## For better readability in the editor, we change the resource name to the name of the key.
## The only easy one is to use the [param OS.get_keycode_string], the rest we have to do manually.
## Luckily apart from Keyboard, theres not a lot of them.
func update_name(value: int) -> void:
keycode = value
if not Engine.is_editor_hint():
return
match input_type:
InputTypes.KEYBOARD:
if keycode == KEY_SPECIAL:
resource_name = "Special"
return
resource_name = OS.get_keycode_string(keycode)
InputTypes.MOUSE:
_update_name_mouse(keycode)
InputTypes.JOY_BUTTON:
_update_name_joy(keycode)
func _update_name_mouse(value: int) -> void:
match value:
MOUSE_BUTTON_LEFT:
resource_name = "Left Mouse Button"
MOUSE_BUTTON_RIGHT:
resource_name = "Right Mouse Button"
MOUSE_BUTTON_MIDDLE:
resource_name = "Middle Mouse Button"
MOUSE_BUTTON_WHEEL_UP:
resource_name = "Mouse Wheel Up"
MOUSE_BUTTON_WHEEL_DOWN:
resource_name = "Mouse Wheel Down"
MOUSE_BUTTON_WHEEL_LEFT:
resource_name = "Mouse Wheel Left"
MOUSE_BUTTON_WHEEL_RIGHT:
resource_name = "Mouse Wheel Right"
MOUSE_BUTTON_XBUTTON1:
resource_name = "X Button 1"
MOUSE_BUTTON_XBUTTON2:
resource_name = "X Button 2"
func _update_name_joy(value: int) -> void:
match value:
JOY_BUTTON_INVALID:
resource_name = "JOY Invalid"
JOY_BUTTON_A:
resource_name = "JOY A"
JOY_BUTTON_B:
resource_name = "JOY B"
JOY_BUTTON_X:
resource_name = "JOY X"
JOY_BUTTON_Y:
resource_name = "JOY Y"
JOY_BUTTON_BACK:
resource_name = "JOY Back"
JOY_BUTTON_GUIDE:
resource_name = "JOY Guide"
JOY_BUTTON_START:
resource_name = "JOY Start"
JOY_BUTTON_LEFT_STICK:
resource_name = "JOY Left Stick"
JOY_BUTTON_RIGHT_STICK:
resource_name = "JOY Right Stick"
JOY_BUTTON_LEFT_SHOULDER:
resource_name = "JOY Left Shoulder"
JOY_BUTTON_RIGHT_SHOULDER:
resource_name = "JOY Right Shoulder"
JOY_BUTTON_DPAD_UP:
resource_name = "JOY Dpad Up"
JOY_BUTTON_DPAD_DOWN:
resource_name = "JOY Dpad Down"
JOY_BUTTON_DPAD_LEFT:
resource_name = "JOY Dpad Left"
JOY_BUTTON_DPAD_RIGHT:
resource_name = "JOY Dpad Right"
JOY_BUTTON_PADDLE1:
resource_name = "JOY Paddle 1"
JOY_BUTTON_PADDLE2:
resource_name = "JOY Paddle 2"
JOY_BUTTON_PADDLE3:
resource_name = "JOY Paddle 3"
JOY_BUTTON_PADDLE4:
resource_name = "JOY Paddle 4"
JOY_BUTTON_TOUCHPAD:
resource_name = "JOY Touchpad"
JOY_BUTTON_MISC1:
resource_name = "JOY Misc 1"
JOY_BUTTON_SDL_MAX:
resource_name = "JOY SDL Max"
JOY_BUTTON_MAX:
resource_name = "JOY Max"

View file

@ -0,0 +1,3 @@
extends Resource
class_name InputIconConfiguration
@export var scheme: InputIconScheme