add controller button icons setting

This commit is contained in:
Teatov 2025-03-01 19:22:11 +10:00
parent b2c69b31b8
commit 6ef29a8f0b
3 changed files with 43 additions and 20 deletions

View File

@ -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"

View File

@ -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)

View File

@ -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