addon for remapping inputs
add modifier support (ctrl+shift+alt+meta+a)
| -rw-r--r-- | addons/remap/PromptFont.ttf.import | 1 | ||||
| -rw-r--r-- | addons/remap/RemapButton.gd | 11 | ||||
| -rw-r--r-- | addons/remap/icons/action_icon.svg.import | 2 | ||||
| -rw-r--r-- | addons/remap/icons/action_icons.svg.import | 2 | ||||
| -rw-r--r-- | addons/remap/icons/action_label.svg.import | 2 | ||||
| -rw-r--r-- | addons/remap/icons/remap_button.svg.import | 2 | ||||
| -rw-r--r-- | addons/remap/package.json | 2 | ||||
| -rw-r--r-- | addons/remap/private/ActionIcons.gd | 2 | ||||
| -rw-r--r-- | addons/remap/private/IconMap.gd | 27 | ||||
| -rw-r--r-- | project.godot | 11 |
10 files changed, 38 insertions, 24 deletions
diff --git a/addons/remap/PromptFont.ttf.import b/addons/remap/PromptFont.ttf.import index dd70868..04a2fe6 100644 --- a/addons/remap/PromptFont.ttf.import +++ b/addons/remap/PromptFont.ttf.import @@ -18,6 +18,7 @@ generate_mipmaps=false multichannel_signed_distance_field=false msdf_pixel_range=8 msdf_size=48 +allow_system_fallback=true force_autohinter=false hinting=2 subpixel_positioning=1 diff --git a/addons/remap/RemapButton.gd b/addons/remap/RemapButton.gd index f80df47..79aeb88 100644 --- a/addons/remap/RemapButton.gd +++ b/addons/remap/RemapButton.gd @@ -87,16 +87,9 @@ func _pressed(): set_process_input(true) func _input(event: InputEvent) -> void: - if ( - not event.is_pressed() - or ( - (event is InputEventJoypadMotion or event is InputEventJoypadButton) and - Input.get_joy_name(event.device) == "HTIX5288:00 0911:5288 Touchpad" # work around https://github.com/godotengine/godot/issues/69153 - ) - ): + if event.is_pressed() or not RemapUtilities.is_valid_action(event): # wait for release return - - if event is InputEventKey and event.physical_keycode == KEY_ESCAPE or not RemapUtilities.is_valid_action(event): + if event is InputEventKey and event.physical_keycode == KEY_ESCAPE: get_viewport().set_input_as_handled() button.text = _name set_process_input(false) diff --git a/addons/remap/icons/action_icon.svg.import b/addons/remap/icons/action_icon.svg.import index 7b93f6c..b091166 100644 --- a/addons/remap/icons/action_icon.svg.import +++ b/addons/remap/icons/action_icon.svg.import @@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/action_icon.svg-d3a92058e49a58847b5682749062f [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 -compress/bptc_ldr=0 compress/normal_map=0 compress/channel_pack=0 mipmaps/generate=false diff --git a/addons/remap/icons/action_icons.svg.import b/addons/remap/icons/action_icons.svg.import index ad11b85..f4a363b 100644 --- a/addons/remap/icons/action_icons.svg.import +++ b/addons/remap/icons/action_icons.svg.import @@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/action_icons.svg-3932be3a3b1cd8f58e4071f6b1c0 [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 -compress/bptc_ldr=0 compress/normal_map=0 compress/channel_pack=0 mipmaps/generate=false diff --git a/addons/remap/icons/action_label.svg.import b/addons/remap/icons/action_label.svg.import index 743550b..862a068 100644 --- a/addons/remap/icons/action_label.svg.import +++ b/addons/remap/icons/action_label.svg.import @@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/action_label.svg-95462f1979e6b228dc8e5c5c198a [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 -compress/bptc_ldr=0 compress/normal_map=0 compress/channel_pack=0 mipmaps/generate=false diff --git a/addons/remap/icons/remap_button.svg.import b/addons/remap/icons/remap_button.svg.import index 8defbe5..5518c51 100644 --- a/addons/remap/icons/remap_button.svg.import +++ b/addons/remap/icons/remap_button.svg.import @@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/remap_button.svg-8932cf4f00007d2b2e1f55aeb010 [params] compress/mode=0 +compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 -compress/bptc_ldr=0 compress/normal_map=0 compress/channel_pack=0 mipmaps/generate=false diff --git a/addons/remap/package.json b/addons/remap/package.json index 0fd52a6..254ffbe 100644 --- a/addons/remap/package.json +++ b/addons/remap/package.json @@ -1,6 +1,6 @@ { "name": "@bendn/remap", - "version": "5.0.9", + "version": "5.1.0", "description": "godot input remapping", "main": "InteractiveActionLabel.gd", "scripts": { diff --git a/addons/remap/private/ActionIcons.gd b/addons/remap/private/ActionIcons.gd index 7d2b61c..219b113 100644 --- a/addons/remap/private/ActionIcons.gd +++ b/addons/remap/private/ActionIcons.gd @@ -64,4 +64,4 @@ func update(force := false): # set the children for i in acts.size(): - get_child(i).set_text(IconMap.get_icon(acts[i], current_connected_joypads_type)) + get_child(i).set_text(IconMap.string_action_with_mods(acts[i])) diff --git a/addons/remap/private/IconMap.gd b/addons/remap/private/IconMap.gd index 6bb6310..c2687a9 100644 --- a/addons/remap/private/IconMap.gd +++ b/addons/remap/private/IconMap.gd @@ -55,7 +55,8 @@ const KEY_MAP := { KEY_BRACERIGHT: "}", KEY_APOSTROPHE: "'", KEY_MENU: "⇻", - KEY_END: "" + KEY_END: "", + KEY_AT: "@", } ## Pad enum. Used to decide which button set to use. @@ -233,3 +234,27 @@ static func get_icon(e: InputEvent, connected_joypads_type := get_connected_joyp return mouse_button_map[e.button_index] push_error("Unable to map ", e) return "❓" + +## Stringifies the modifiers. +## Order: ctrl, shift, alt, meta +static func get_modifiers(e: InputEventWithModifiers) -> PackedStringArray: + var mods: PackedStringArray = [] + var mask := e.get_modifiers_mask() + # ignore key_modifier_mask, key_mask_kpad, and key_mask_group_swtich + if mask & KEY_MASK_CTRL: + mods.append(KEY_MAP[KEY_CTRL]) + if mask & KEY_MASK_SHIFT: + mods.append(KEY_MAP[KEY_SHIFT]) + if mask & KEY_MASK_ALT: + mods.append(KEY_MAP[KEY_ALT]) + if mask & KEY_MASK_META: + mods.append(KEY_MAP[KEY_META]) + return mods + +static func string_action_with_mods(e: InputEvent, connected_joypads_type := get_connected_joypads_type()) -> String: + var icon := IconMap.get_icon(e, connected_joypads_type) + if e is InputEventWithModifiers: + var mods := IconMap.get_modifiers(e) + if not mods.is_empty(): + return " + ".join(mods) + " + " + icon + return icon diff --git a/project.godot b/project.godot index 6f24e8d..36a5274 100644 --- a/project.godot +++ b/project.godot @@ -33,14 +33,9 @@ window/size/test_height=720 input={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194317,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194319,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":7,"pressure":0.0,"pressed":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":false,"script":null) +"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":65,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":true,"shift_pressed":true,"pressed":false,"keycode":0,"physical_keycode":64,"key_label":0,"unicode":0,"echo":false,"script":null) ] } |