diff --git a/project.godot b/project.godot index 940e2f7..832fbf9 100644 --- a/project.godot +++ b/project.godot @@ -22,10 +22,10 @@ config/icon="res://icon.svg" [autoload] -Referencer="*res://scripts/globals/referencer.gd" +Settings="*res://scripts/globals/settings.gd" Inputer="*res://scripts/globals/inputer.gd" Debugger="*res://scenes/debugger.tscn" -Settings="*res://scripts/globals/settings.gd" +Referencer="*res://scripts/globals/referencer.gd" Cursor="*res://scenes/ui/cursor.tscn" Music="*res://scenes/music.tscn" diff --git a/scripts/globals/inputer.gd b/scripts/globals/inputer.gd index 2391d56..7a8f47b 100644 --- a/scripts/globals/inputer.gd +++ b/scripts/globals/inputer.gd @@ -3,7 +3,7 @@ extends Node signal mode_changed(mode: Mode) enum Mode { KB_MOUSE, CONTROLLER } -enum ControllerType { XBOX, SONY, NINTENDO, STEAM, KNOCKOFF } +enum ControllerType { UNSET, XBOX, SONY, NINTENDO, STEAM, KNOCKOFF } const LEFT_TRIGGER_SPRITE_INDEX: int = 20 const RIGHT_TRIGGER_SPRITE_INDEX: int = 21 @@ -12,7 +12,7 @@ const RIGHT_STICK_SPRITE_INDEX: int = 24 @export var mode: Mode = Mode.KB_MOUSE -@export var _controller: ControllerType = ControllerType.XBOX: +@export var _controller: ControllerType = ControllerType.UNSET: set(value): _set_current_prompts(value) _controller = value @@ -30,11 +30,19 @@ var _current_prompts: CompressedTexture2D = _prompts_xbox func _ready() -> void: + Input.joy_connection_changed.connect(_on_input_joy_connection_changed) + Debugger.add_event("mode_changed") mode_changed.connect( func(new_mode: Mode) -> void: Debugger.event_emitted("mode_changed", [Mode.keys()[new_mode]]) ) + Debugger.add_event("joy_connection_changed") + Input.joy_connection_changed.connect( + func(device: int, connected: bool) -> void: + Debugger.event_emitted("joy_connection_changed", [device, connected]) + ) + _get_controller_type() @@ -55,20 +63,6 @@ func _input(event: InputEvent) -> void: Debugger.text("input", _get_event_prompt_current_mode(event)) -func get_action_prompt(action: StringName) -> String: - var events := InputMap.action_get_events(action) - var bbcode: PackedStringArray = [] - for event in events: - var event_bbcode := _get_event_prompt_current_mode(event) - if event_bbcode: - bbcode.append(event_bbcode) - - if bbcode.size() != 0: - return " / ".join(bbcode) - - return _get_event_prompt(events[0]) if events.size() != 0 else "???" - - func get_vector_from_raw_strengths( negative_x: float, positive_x: float, @@ -95,6 +89,20 @@ func get_event_mode(event: InputEvent) -> Mode: return Mode.KB_MOUSE +func get_action_prompt(action: StringName) -> String: + var events := InputMap.action_get_events(action) + var bbcode: PackedStringArray = [] + for event in events: + var event_bbcode := _get_event_prompt_current_mode(event) + if event_bbcode: + bbcode.append(event_bbcode) + + if bbcode.size() != 0: + return " / ".join(bbcode) + + return _get_event_prompt(events[0]) if events.size() != 0 else "???" + + func _get_event_prompt_current_mode(event: InputEvent) -> String: var event_mode := get_event_mode(event) if mode == Mode.CONTROLLER and event_mode == Mode.CONTROLLER: @@ -174,8 +182,15 @@ func _get_prompt_sprite_region(index: int) -> Rect2i: ) -func _get_controller_type() -> void: - var controller_name := Input.get_joy_name(0).to_lower() +func _get_controller_type(id: int = 0) -> void: + if Settings.controller_button_icons != ControllerType.UNSET: + _controller = Settings.controller_button_icons + return + + var controller_name := Input.get_joy_name(id).to_lower() + if not controller_name: + return + if ( controller_name.begins_with("ps") or controller_name.contains("sony") @@ -189,6 +204,8 @@ func _get_controller_type() -> void: else: _controller = ControllerType.XBOX + Settings.controller_button_icons = _controller + func _set_current_prompts(type: ControllerType) -> void: match type: @@ -202,3 +219,8 @@ func _set_current_prompts(type: ControllerType) -> void: _current_prompts = _prompts_steam ControllerType.KNOCKOFF: _current_prompts = _prompts_knockoff + + +func _on_input_joy_connection_changed(device: int, connected: bool) -> void: + if connected: + _get_controller_type(device) diff --git a/scripts/globals/settings.gd b/scripts/globals/settings.gd index e22b810..1635ce0 100644 --- a/scripts/globals/settings.gd +++ b/scripts/globals/settings.gd @@ -110,6 +110,7 @@ const CONFIG_PATH := "user://settings.cfg" @export_subgroup("KB & Mouse") @export_subgroup("Controller") +@export var controller_button_icons: Inputer.ControllerType = Inputer.ControllerType.UNSET @export var movement_stick_deadzone: float = 0.5 @export var aiming_stick_deadzone: float = 0.5