addon for remapping inputs
add modifier support (ctrl+shift+alt+meta+a)
bendn 2023-04-25
parent 01ff6c6 · commit b7435e1
-rw-r--r--addons/remap/PromptFont.ttf.import1
-rw-r--r--addons/remap/RemapButton.gd11
-rw-r--r--addons/remap/icons/action_icon.svg.import2
-rw-r--r--addons/remap/icons/action_icons.svg.import2
-rw-r--r--addons/remap/icons/action_label.svg.import2
-rw-r--r--addons/remap/icons/remap_button.svg.import2
-rw-r--r--addons/remap/package.json2
-rw-r--r--addons/remap/private/ActionIcons.gd2
-rw-r--r--addons/remap/private/IconMap.gd27
-rw-r--r--project.godot11
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)
]
}