From a0d7f109c535ace10f5d45240294beddf66c9fd4 Mon Sep 17 00:00:00 2001 From: ToasterPanic Date: Tue, 2 Dec 2025 23:56:00 -0500 Subject: [PATCH] Input icon mouse support --- .../classes/InputIconTextureRect.gd | 44 ------------ .../classes/input_icon_texture_rect.gd | 63 ++++++++++++++++++ ....gd.uid => input_icon_texture_rect.gd.uid} | 0 .../super_awesome_input_icons/input_icon.gd | 8 +++ .../textures/InputIconSprite3D.gd | 17 ----- .../textures/InputIconSprite3D.gd.uid | 1 - .../mouse/{mouse_left.png => left.png} | Bin ...{mouse_left.png.import => left.png.import} | 6 +- .../mouse/{mouse_scroll.png => middle.png} | Bin ...se_scroll.png.import => middle.png.import} | 6 +- .../mouse/{mouse_right.png => right.png} | Bin ...ouse_right.png.import => right.png.import} | 6 +- ...{mouse_scroll_down.png => scroll_down.png} | Bin ...down.png.import => scroll_down.png.import} | 6 +- .../{mouse_scroll_up.png => scroll_up.png} | Bin ...oll_up.png.import => scroll_up.png.import} | 6 +- scenes/ground.tscn | 6 +- 17 files changed, 89 insertions(+), 80 deletions(-) delete mode 100644 addons/super_awesome_input_icons/classes/InputIconTextureRect.gd create mode 100644 addons/super_awesome_input_icons/classes/input_icon_texture_rect.gd rename addons/super_awesome_input_icons/classes/{InputIconTextureRect.gd.uid => input_icon_texture_rect.gd.uid} (100%) delete mode 100644 addons/super_awesome_input_icons/textures/InputIconSprite3D.gd delete mode 100644 addons/super_awesome_input_icons/textures/InputIconSprite3D.gd.uid rename addons/super_awesome_input_icons/textures/mouse/{mouse_left.png => left.png} (100%) rename addons/super_awesome_input_icons/textures/mouse/{mouse_left.png.import => left.png.import} (80%) rename addons/super_awesome_input_icons/textures/mouse/{mouse_scroll.png => middle.png} (100%) rename addons/super_awesome_input_icons/textures/mouse/{mouse_scroll.png.import => middle.png.import} (80%) rename addons/super_awesome_input_icons/textures/mouse/{mouse_right.png => right.png} (100%) rename addons/super_awesome_input_icons/textures/mouse/{mouse_right.png.import => right.png.import} (80%) rename addons/super_awesome_input_icons/textures/mouse/{mouse_scroll_down.png => scroll_down.png} (100%) rename addons/super_awesome_input_icons/textures/mouse/{mouse_scroll_down.png.import => scroll_down.png.import} (78%) rename addons/super_awesome_input_icons/textures/mouse/{mouse_scroll_up.png => scroll_up.png} (100%) rename addons/super_awesome_input_icons/textures/mouse/{mouse_scroll_up.png.import => scroll_up.png.import} (79%) diff --git a/addons/super_awesome_input_icons/classes/InputIconTextureRect.gd b/addons/super_awesome_input_icons/classes/InputIconTextureRect.gd deleted file mode 100644 index b25cad9..0000000 --- a/addons/super_awesome_input_icons/classes/InputIconTextureRect.gd +++ /dev/null @@ -1,44 +0,0 @@ -## Like a [TextureRect], but automatically updates as an input icon based on the provided [param action_name]. -extends TextureRect -class_name InputIconTextureRect - -@export var action_name = &"": - set(value): - action_name = value - _update_icon() - -var known_using_gamepad = null -var known_gamepad_name = null - -var time_until_next_check = 0 - -## Updates the current icon. -func _update_icon(): - var events = InputMap.action_get_events(action_name) - - for n in events: - if ("keycode" in n) and !input_icon.using_gamepad: - var keycode = n.keycode if n.keycode else n.physical_keycode - - texture = load("res://addons/super_awesome_input_icons/textures/keyboard/" + OS.get_keycode_string(keycode).to_lower() + ".png") - - break - - elif ("button_index" in n) and input_icon.using_gamepad: - if input_icon.gamepad_type: - texture = load("res://addons/super_awesome_input_icons/textures/" + input_icon.gamepad_type + "/" + input_icon.button_dictionary[n.button_index] + ".png") - break - -func _process(delta: float) -> void: - time_until_next_check -= delta - - if time_until_next_check < 0: - time_until_next_check = 0.2 - - if known_gamepad_name != input_icon.gamepad_name: - _update_icon() - known_gamepad_name = input_icon.gamepad_name - - elif known_using_gamepad != input_icon.using_gamepad: - _update_icon() - known_using_gamepad = input_icon.using_gamepad diff --git a/addons/super_awesome_input_icons/classes/input_icon_texture_rect.gd b/addons/super_awesome_input_icons/classes/input_icon_texture_rect.gd new file mode 100644 index 0000000..9c70d9a --- /dev/null +++ b/addons/super_awesome_input_icons/classes/input_icon_texture_rect.gd @@ -0,0 +1,63 @@ +## Like a [TextureRect], but automatically updates as an input icon based on the provided [param action_name]. +extends TextureRect +class_name InputIconTextureRect + +## The action used for the input icon. +@export var action_name: String = &"": + set(value): + action_name = value + _update_icon() + +var _known_using_gamepad = null +var _known_gamepad_name = null + +var _time_until_next_check = 0 + +## Updates the current icon. +func _update_icon(): + + # Loop through all events in an action: + + var events = InputMap.action_get_events(action_name) + + for n in events: + print(n) + + # If it's a keyboard input and we're not using a gamepad, use a keyboard input icon + + if n.is_class("InputEventKey") and !input_icon.using_gamepad: + var keycode = n.keycode if n.keycode else n.physical_keycode + + texture = load("res://addons/super_awesome_input_icons/textures/keyboard/" + OS.get_keycode_string(keycode).to_lower() + ".png") + + break + + + # If it's a mouse input and we're using a gamepad, use the corresponding gamepad input icon + + elif n.is_class("InputEventMouseButton") and !input_icon.using_gamepad: + texture = load("res://addons/super_awesome_input_icons/textures/mouse/" + input_icon.mouse_button_dictionary[n.button_index] + ".png") + + break + + # If it's a gamepad input and we're using a gamepad, use the corresponding gamepad input icon + + elif n.is_class("InputEventMouseButton") and input_icon.using_gamepad: + if input_icon.gamepad_type: + texture = load("res://addons/super_awesome_input_icons/textures/" + input_icon.gamepad_type + "/" + input_icon.button_dictionary[n.button_index] + ".png") + + break + +func _process(delta: float) -> void: + _time_until_next_check -= delta + + if _time_until_next_check < 0: + _time_until_next_check = 0.2 + + if _known_gamepad_name != input_icon.gamepad_name: + _update_icon() + _known_gamepad_name = input_icon.gamepad_name + + elif _known_using_gamepad != input_icon.using_gamepad: + _update_icon() + _known_using_gamepad = input_icon.using_gamepad diff --git a/addons/super_awesome_input_icons/classes/InputIconTextureRect.gd.uid b/addons/super_awesome_input_icons/classes/input_icon_texture_rect.gd.uid similarity index 100% rename from addons/super_awesome_input_icons/classes/InputIconTextureRect.gd.uid rename to addons/super_awesome_input_icons/classes/input_icon_texture_rect.gd.uid diff --git a/addons/super_awesome_input_icons/input_icon.gd b/addons/super_awesome_input_icons/input_icon.gd index 8794546..5450871 100644 --- a/addons/super_awesome_input_icons/input_icon.gd +++ b/addons/super_awesome_input_icons/input_icon.gd @@ -24,6 +24,14 @@ static var button_dictionary = { JOY_BUTTON_PADDLE1: "left_shoulder", } +static var mouse_button_dictionary = { + MOUSE_BUTTON_LEFT: "left", + MOUSE_BUTTON_MIDDLE: "left", + MOUSE_BUTTON_RIGHT: "left", + MOUSE_BUTTON_WHEEL_DOWN: "scroll_down", + MOUSE_BUTTON_WHEEL_UP: "scroll_up", +} + ## A dictionary where each JoyAxis key corresponds to a string pair. Used for textures. static var axis_dictionary = { JOY_AXIS_TRIGGER_LEFT: "left_trigger", diff --git a/addons/super_awesome_input_icons/textures/InputIconSprite3D.gd b/addons/super_awesome_input_icons/textures/InputIconSprite3D.gd deleted file mode 100644 index 449f985..0000000 --- a/addons/super_awesome_input_icons/textures/InputIconSprite3D.gd +++ /dev/null @@ -1,17 +0,0 @@ -## This is a Sprite3D that takes an action name and automatically loads the proper icon -class_name InputIconSprite3D extends Sprite3D -## The name of the action in your InputMap, it has to be an existing action -@export var action_name: StringName = &"": - set(value): - action_name = value - _update() - -## The Index of the event, if you have more than one event in the same action. -## You can use negative numbers but not a number bigger than the number of events -@export var event_index: int = 0: - set(value): - event_index = value - _update() - -func _update(): - texture = InputIcon.get_icon(action_name, event_index) diff --git a/addons/super_awesome_input_icons/textures/InputIconSprite3D.gd.uid b/addons/super_awesome_input_icons/textures/InputIconSprite3D.gd.uid deleted file mode 100644 index ddc5168..0000000 --- a/addons/super_awesome_input_icons/textures/InputIconSprite3D.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bb0jpw478pdd0 diff --git a/addons/super_awesome_input_icons/textures/mouse/mouse_left.png b/addons/super_awesome_input_icons/textures/mouse/left.png similarity index 100% rename from addons/super_awesome_input_icons/textures/mouse/mouse_left.png rename to addons/super_awesome_input_icons/textures/mouse/left.png diff --git a/addons/super_awesome_input_icons/textures/mouse/mouse_left.png.import b/addons/super_awesome_input_icons/textures/mouse/left.png.import similarity index 80% rename from addons/super_awesome_input_icons/textures/mouse/mouse_left.png.import rename to addons/super_awesome_input_icons/textures/mouse/left.png.import index e1a3304..12fe71f 100644 --- a/addons/super_awesome_input_icons/textures/mouse/mouse_left.png.import +++ b/addons/super_awesome_input_icons/textures/mouse/left.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://cy711ee2m3eq0" -path="res://.godot/imported/mouse_left.png-e3230d4e53ec25138f4d43c7842dc825.ctex" +path="res://.godot/imported/left.png-d85e45f831a06d2ba5c83824c36b51bf.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://addons/super_awesome_input_icons/textures/mouse/mouse_left.png" -dest_files=["res://.godot/imported/mouse_left.png-e3230d4e53ec25138f4d43c7842dc825.ctex"] +source_file="res://addons/super_awesome_input_icons/textures/mouse/left.png" +dest_files=["res://.godot/imported/left.png-d85e45f831a06d2ba5c83824c36b51bf.ctex"] [params] diff --git a/addons/super_awesome_input_icons/textures/mouse/mouse_scroll.png b/addons/super_awesome_input_icons/textures/mouse/middle.png similarity index 100% rename from addons/super_awesome_input_icons/textures/mouse/mouse_scroll.png rename to addons/super_awesome_input_icons/textures/mouse/middle.png diff --git a/addons/super_awesome_input_icons/textures/mouse/mouse_scroll.png.import b/addons/super_awesome_input_icons/textures/mouse/middle.png.import similarity index 80% rename from addons/super_awesome_input_icons/textures/mouse/mouse_scroll.png.import rename to addons/super_awesome_input_icons/textures/mouse/middle.png.import index 521083a..598426a 100644 --- a/addons/super_awesome_input_icons/textures/mouse/mouse_scroll.png.import +++ b/addons/super_awesome_input_icons/textures/mouse/middle.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://be0ek7arnv0ri" -path="res://.godot/imported/mouse_scroll.png-a425582d277f4ff22967a9c86711da56.ctex" +path="res://.godot/imported/middle.png-0d1dccd65dfca3ee7bb71c11b38bc297.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://addons/super_awesome_input_icons/textures/mouse/mouse_scroll.png" -dest_files=["res://.godot/imported/mouse_scroll.png-a425582d277f4ff22967a9c86711da56.ctex"] +source_file="res://addons/super_awesome_input_icons/textures/mouse/middle.png" +dest_files=["res://.godot/imported/middle.png-0d1dccd65dfca3ee7bb71c11b38bc297.ctex"] [params] diff --git a/addons/super_awesome_input_icons/textures/mouse/mouse_right.png b/addons/super_awesome_input_icons/textures/mouse/right.png similarity index 100% rename from addons/super_awesome_input_icons/textures/mouse/mouse_right.png rename to addons/super_awesome_input_icons/textures/mouse/right.png diff --git a/addons/super_awesome_input_icons/textures/mouse/mouse_right.png.import b/addons/super_awesome_input_icons/textures/mouse/right.png.import similarity index 80% rename from addons/super_awesome_input_icons/textures/mouse/mouse_right.png.import rename to addons/super_awesome_input_icons/textures/mouse/right.png.import index e8545b8..6f95788 100644 --- a/addons/super_awesome_input_icons/textures/mouse/mouse_right.png.import +++ b/addons/super_awesome_input_icons/textures/mouse/right.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://c0ds7retiljhr" -path="res://.godot/imported/mouse_right.png-43ec3200245560770baa71c0e562af8c.ctex" +path="res://.godot/imported/right.png-9a5e70b6547aea9d5aa704648da23df5.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://addons/super_awesome_input_icons/textures/mouse/mouse_right.png" -dest_files=["res://.godot/imported/mouse_right.png-43ec3200245560770baa71c0e562af8c.ctex"] +source_file="res://addons/super_awesome_input_icons/textures/mouse/right.png" +dest_files=["res://.godot/imported/right.png-9a5e70b6547aea9d5aa704648da23df5.ctex"] [params] diff --git a/addons/super_awesome_input_icons/textures/mouse/mouse_scroll_down.png b/addons/super_awesome_input_icons/textures/mouse/scroll_down.png similarity index 100% rename from addons/super_awesome_input_icons/textures/mouse/mouse_scroll_down.png rename to addons/super_awesome_input_icons/textures/mouse/scroll_down.png diff --git a/addons/super_awesome_input_icons/textures/mouse/mouse_scroll_down.png.import b/addons/super_awesome_input_icons/textures/mouse/scroll_down.png.import similarity index 78% rename from addons/super_awesome_input_icons/textures/mouse/mouse_scroll_down.png.import rename to addons/super_awesome_input_icons/textures/mouse/scroll_down.png.import index f0a76e5..f62fafc 100644 --- a/addons/super_awesome_input_icons/textures/mouse/mouse_scroll_down.png.import +++ b/addons/super_awesome_input_icons/textures/mouse/scroll_down.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://c0hxhuywr30wn" -path="res://.godot/imported/mouse_scroll_down.png-839a2e0c0dcf822e8f49943054050b87.ctex" +path="res://.godot/imported/scroll_down.png-56f571acb78a8d4c70c4a7fa97c3e2a8.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://addons/super_awesome_input_icons/textures/mouse/mouse_scroll_down.png" -dest_files=["res://.godot/imported/mouse_scroll_down.png-839a2e0c0dcf822e8f49943054050b87.ctex"] +source_file="res://addons/super_awesome_input_icons/textures/mouse/scroll_down.png" +dest_files=["res://.godot/imported/scroll_down.png-56f571acb78a8d4c70c4a7fa97c3e2a8.ctex"] [params] diff --git a/addons/super_awesome_input_icons/textures/mouse/mouse_scroll_up.png b/addons/super_awesome_input_icons/textures/mouse/scroll_up.png similarity index 100% rename from addons/super_awesome_input_icons/textures/mouse/mouse_scroll_up.png rename to addons/super_awesome_input_icons/textures/mouse/scroll_up.png diff --git a/addons/super_awesome_input_icons/textures/mouse/mouse_scroll_up.png.import b/addons/super_awesome_input_icons/textures/mouse/scroll_up.png.import similarity index 79% rename from addons/super_awesome_input_icons/textures/mouse/mouse_scroll_up.png.import rename to addons/super_awesome_input_icons/textures/mouse/scroll_up.png.import index 11b2728..400dd39 100644 --- a/addons/super_awesome_input_icons/textures/mouse/mouse_scroll_up.png.import +++ b/addons/super_awesome_input_icons/textures/mouse/scroll_up.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://gkojfej7jdhl" -path="res://.godot/imported/mouse_scroll_up.png-d3eb669687c8d8b150a86c0dd0d2d82c.ctex" +path="res://.godot/imported/scroll_up.png-7e850decbbb4ef2ea13641229b3fbfbf.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://addons/super_awesome_input_icons/textures/mouse/mouse_scroll_up.png" -dest_files=["res://.godot/imported/mouse_scroll_up.png-d3eb669687c8d8b150a86c0dd0d2d82c.ctex"] +source_file="res://addons/super_awesome_input_icons/textures/mouse/scroll_up.png" +dest_files=["res://.godot/imported/scroll_up.png-7e850decbbb4ef2ea13641229b3fbfbf.ctex"] [params] diff --git a/scenes/ground.tscn b/scenes/ground.tscn index f1a4799..06bf8f6 100644 --- a/scenes/ground.tscn +++ b/scenes/ground.tscn @@ -17,7 +17,7 @@ [ext_resource type="Script" uid="uid://khas1kkt2t3k" path="res://scripts/exit_ship.gd" id="14_257nh"] [ext_resource type="Texture2D" uid="uid://b047lku56vtve" path="res://textures/galacta_counter.png" id="15_vuhkc"] [ext_resource type="Texture2D" uid="uid://dauoebs801ngm" path="res://addons/super_awesome_input_icons/textures/keyboard/question.png" id="16_e3s4u"] -[ext_resource type="Script" uid="uid://b2maxk5g6yb0i" path="res://addons/super_awesome_input_icons/classes/InputIconTextureRect.gd" id="16_hby33"] +[ext_resource type="Script" uid="uid://b2maxk5g6yb0i" path="res://addons/super_awesome_input_icons/classes/input_icon_texture_rect.gd" id="16_hby33"] [sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_gysiw"] light_mode = 1 @@ -322,14 +322,14 @@ layout_mode = 2 text = "PRESS" label_settings = SubResource("LabelSettings_c2suo") -[node name="InputIcon2" type="TextureRect" parent="UI/Control/Interact"] +[node name="InputIcon" type="TextureRect" parent="UI/Control/Interact"] material = SubResource("ShaderMaterial_jo68p") custom_minimum_size = Vector2(64, 64) layout_mode = 2 texture = ExtResource("16_e3s4u") expand_mode = 2 script = ExtResource("16_hby33") -action_name = &"interact" +action_name = "interact" [node name="End" type="Label" parent="UI/Control/Interact"] layout_mode = 2