Lots of localization setup, added controller BBCode stuff also.
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
@tool
|
||||
extends Panel
|
||||
|
||||
signal done
|
||||
|
||||
@onready var n_name_filter := %NameFilter
|
||||
@onready var n_builtin_action_button := %BuiltinActionButton
|
||||
@onready var n_tree := %Tree
|
||||
|
||||
class ControllerIcons_Item:
|
||||
func _init(tree: Tree, root: TreeItem, path: String, is_default: bool):
|
||||
self.is_default = is_default
|
||||
self.filtered = true
|
||||
tree_item = tree.create_item(root)
|
||||
tree_item.set_text(0, path)
|
||||
|
||||
controller_icon_key = ControllerIconTexture.new()
|
||||
controller_icon_key.path = path
|
||||
controller_icon_key.force_type = 1
|
||||
controller_icon_joy = ControllerIconTexture.new()
|
||||
controller_icon_joy.path = path
|
||||
controller_icon_joy.force_type = 2
|
||||
|
||||
tree_item.set_icon_max_width(1, 48 * controller_icon_key._textures.size())
|
||||
tree_item.set_icon_max_width(2, 48 * controller_icon_key._textures.size())
|
||||
tree_item.set_icon(1, controller_icon_key)
|
||||
tree_item.set_icon(2, controller_icon_joy)
|
||||
|
||||
var is_default : bool
|
||||
var tree_item : TreeItem
|
||||
var controller_icon_key : ControllerIconTexture
|
||||
var controller_icon_joy : ControllerIconTexture
|
||||
|
||||
var show_default : bool:
|
||||
set(_show_default):
|
||||
show_default = _show_default
|
||||
_query_visibility()
|
||||
|
||||
var filtered : bool:
|
||||
set(_filtered):
|
||||
filtered = _filtered
|
||||
_query_visibility()
|
||||
|
||||
func _query_visibility():
|
||||
if is_instance_valid(tree_item):
|
||||
tree_item.visible = show_default and filtered
|
||||
|
||||
var root : TreeItem
|
||||
var items : Array[ControllerIcons_Item]
|
||||
|
||||
func populate(editor_interface: EditorInterface) -> void:
|
||||
# Clear
|
||||
n_tree.clear()
|
||||
## Using clear() triggers a signal and uses freed nodes.
|
||||
## Setting the text directly does not.
|
||||
n_name_filter.text = ""
|
||||
items.clear()
|
||||
|
||||
n_name_filter.right_icon = editor_interface.get_base_control().get_theme_icon("Search", "EditorIcons")
|
||||
|
||||
# Setup tree columns
|
||||
n_tree.set_column_title(0, "Action")
|
||||
n_tree.set_column_title(1, "Preview")
|
||||
n_tree.set_column_expand(1, false)
|
||||
n_tree.set_column_expand(2, false)
|
||||
|
||||
# Force ControllerIcons to reload the input map
|
||||
ControllerIcons._parse_input_actions()
|
||||
|
||||
# List with all default input actions
|
||||
var default_actions := ControllerIcons._builtin_keys.map(
|
||||
func(value: String):
|
||||
return value.trim_prefix("input/")
|
||||
)
|
||||
|
||||
# Map with all input actions
|
||||
root = n_tree.create_item()
|
||||
for data in ControllerIcons._custom_input_actions:
|
||||
var child := ControllerIcons_Item.new(n_tree, root, data, data in default_actions)
|
||||
items.push_back(child)
|
||||
|
||||
set_default_actions_visibility(n_builtin_action_button.button_pressed)
|
||||
|
||||
func get_icon_path() -> String:
|
||||
var item : TreeItem = n_tree.get_selected()
|
||||
if is_instance_valid(item):
|
||||
return item.get_text(0)
|
||||
return ""
|
||||
|
||||
func set_default_actions_visibility(display: bool):
|
||||
# UPGRADE: In Godot 4.2, for-loop variables can be
|
||||
# statically typed:
|
||||
# for item:ControllerIcons_Item in items:
|
||||
for item in items:
|
||||
item.show_default = display or not item.is_default
|
||||
|
||||
func grab_focus() -> void:
|
||||
n_name_filter.grab_focus()
|
||||
|
||||
|
||||
func _on_builtin_action_button_toggled(toggled_on: bool) -> void:
|
||||
set_default_actions_visibility(toggled_on)
|
||||
|
||||
|
||||
func _on_tree_item_activated() -> void:
|
||||
done.emit()
|
||||
|
||||
|
||||
func _on_name_filter_text_changed(new_text: String):
|
||||
# UPGRADE: In Godot 4.2, for-loop variables can be
|
||||
# statically typed:
|
||||
# for item:ControllerIcons_Item in items:
|
||||
for item in items:
|
||||
var filtered := true if new_text.is_empty() else item.tree_item.get_text(0).findn(new_text) != -1
|
||||
item.filtered = filtered
|
@@ -0,0 +1 @@
|
||||
uid://bu8t48xqekc8o
|
@@ -0,0 +1,200 @@
|
||||
@tool
|
||||
extends Panel
|
||||
|
||||
signal done
|
||||
|
||||
@onready var n_button_label := %ButtonLabel
|
||||
@onready var button_nodes := [
|
||||
%LT, %RT,
|
||||
%LStick, %RStick,
|
||||
%LStickClick, %RStickClick,
|
||||
%LB, %RB, %A, %B, %X, %Y,
|
||||
%Select, %Start,
|
||||
%Home, %Share, %DPAD,
|
||||
%DPADDown, %DPADRight,
|
||||
%DPADLeft, %DPADUp
|
||||
]
|
||||
|
||||
var _last_pressed_button : Button
|
||||
var _last_pressed_timestamp : int
|
||||
|
||||
func populate(editor_interface: EditorInterface) -> void:
|
||||
# UPGRADE: In Godot 4.2, for-loop variables can be
|
||||
# statically typed:
|
||||
# for button:Button in button_nodes:
|
||||
for button in button_nodes:
|
||||
button.button_pressed = false
|
||||
|
||||
func get_icon_path() -> String:
|
||||
# UPGRADE: In Godot 4.2, for-loop variables can be
|
||||
# statically typed:
|
||||
# for button:Button in button_nodes:
|
||||
for button in button_nodes:
|
||||
if button.button_pressed:
|
||||
return button.icon.path
|
||||
return ""
|
||||
|
||||
func grab_focus() -> void:
|
||||
pass
|
||||
|
||||
func _input(event):
|
||||
if not visible: return
|
||||
|
||||
if event is InputEventJoypadMotion:
|
||||
_input_motion(event)
|
||||
elif event is InputEventJoypadButton:
|
||||
_input_button(event)
|
||||
|
||||
func _input_motion(event: InputEventJoypadMotion):
|
||||
if abs(event.axis_value) < 0.5: return
|
||||
match event.axis:
|
||||
JOY_AXIS_LEFT_X, JOY_AXIS_LEFT_Y:
|
||||
_simulate_button_press(%LStick)
|
||||
JOY_AXIS_RIGHT_X, JOY_AXIS_RIGHT_Y:
|
||||
_simulate_button_press(%RStick)
|
||||
JOY_AXIS_TRIGGER_LEFT:
|
||||
_simulate_button_press(%LT)
|
||||
JOY_AXIS_TRIGGER_RIGHT:
|
||||
_simulate_button_press(%RT)
|
||||
|
||||
func _input_button(event: InputEventJoypadButton):
|
||||
if not event.pressed: return
|
||||
match event.button_index:
|
||||
JOY_BUTTON_A:
|
||||
_simulate_button_press(%A)
|
||||
JOY_BUTTON_B:
|
||||
_simulate_button_press(%B)
|
||||
JOY_BUTTON_X:
|
||||
_simulate_button_press(%X)
|
||||
JOY_BUTTON_Y:
|
||||
_simulate_button_press(%Y)
|
||||
JOY_BUTTON_LEFT_SHOULDER:
|
||||
_simulate_button_press(%LB)
|
||||
JOY_BUTTON_RIGHT_SHOULDER:
|
||||
_simulate_button_press(%RB)
|
||||
JOY_BUTTON_LEFT_STICK:
|
||||
_simulate_button_press(%LStickClick)
|
||||
JOY_BUTTON_RIGHT_STICK:
|
||||
_simulate_button_press(%RStickClick)
|
||||
JOY_BUTTON_DPAD_DOWN:
|
||||
_simulate_button_press(%DPADDown)
|
||||
JOY_BUTTON_DPAD_RIGHT:
|
||||
_simulate_button_press(%DPADRight)
|
||||
JOY_BUTTON_DPAD_LEFT:
|
||||
_simulate_button_press(%DPADLeft)
|
||||
JOY_BUTTON_DPAD_UP:
|
||||
_simulate_button_press(%DPADUp)
|
||||
JOY_BUTTON_BACK:
|
||||
_simulate_button_press(%Select)
|
||||
JOY_BUTTON_START:
|
||||
_simulate_button_press(%Start)
|
||||
JOY_BUTTON_GUIDE:
|
||||
_simulate_button_press(%Home)
|
||||
JOY_BUTTON_MISC1:
|
||||
_simulate_button_press(%Share)
|
||||
|
||||
func _simulate_button_press(button: Button):
|
||||
button.grab_focus()
|
||||
button.button_pressed = true
|
||||
button.set_meta("from_ui", false)
|
||||
button.pressed.emit()
|
||||
button.set_meta("from_ui", true)
|
||||
|
||||
func _on_button_pressed():
|
||||
# UPGRADE: In Godot 4.2, for-loop variables can be
|
||||
# statically typed:
|
||||
# for button:Button in button_nodes:
|
||||
for button in button_nodes:
|
||||
if button.has_meta("from_ui") and not button.get_meta("from_ui", true): return
|
||||
if button.button_pressed:
|
||||
if _last_pressed_button == button:
|
||||
if Time.get_ticks_msec() < _last_pressed_timestamp:
|
||||
done.emit()
|
||||
else:
|
||||
_last_pressed_timestamp = Time.get_ticks_msec() + 1000
|
||||
else:
|
||||
_last_pressed_button = button
|
||||
_last_pressed_timestamp = Time.get_ticks_msec() + 1000
|
||||
|
||||
func _on_l_stick_pressed():
|
||||
n_button_label.text = "Axis 0/1\n(Left Stick, Joystick 0)\n[joypad/l_stick]"
|
||||
|
||||
|
||||
func _on_l_stick_click_pressed():
|
||||
n_button_label.text = "Button 7\n(Left Stick, Sony L3, Xbox L/LS)\n[joypad/l_stick_click]"
|
||||
|
||||
|
||||
func _on_r_stick_pressed():
|
||||
n_button_label.text = "Axis 2/3\n(Right Stick, Joystick 1)\n[joypad/r_stick]"
|
||||
|
||||
|
||||
func _on_r_stick_click_pressed():
|
||||
n_button_label.text = "Button 8\n(Right Stick, Sony R3, Xbox R/RS)\n[joypad/r_stick_click]"
|
||||
|
||||
|
||||
func _on_lb_pressed():
|
||||
n_button_label.text = "Button 9\n(Left Shoulder, Sony L1, Xbox LB)\n[joypad/lb]"
|
||||
|
||||
|
||||
func _on_lt_pressed():
|
||||
n_button_label.text = "Axis 4\n(Left Trigger, Sony L2, Xbox LT, Joystick 2 Right)\n[joypad/lt]"
|
||||
|
||||
|
||||
func _on_rb_pressed():
|
||||
n_button_label.text = "Button 10\n(Right Shoulder, Sony R1, Xbox RB)\n[joypad/rb]"
|
||||
|
||||
|
||||
func _on_rt_pressed():
|
||||
n_button_label.text = "Axis 5\n(Right Trigger, Sony R2, Xbox RT, Joystick 2 Down)\n[joypad/rt]"
|
||||
|
||||
|
||||
func _on_a_pressed():
|
||||
n_button_label.text = "Button 0\n(Bottom Action, Sony Cross, Xbox A, Nintendo B)\n[joypad/a]"
|
||||
|
||||
|
||||
func _on_b_pressed():
|
||||
n_button_label.text = "Button 1\n(Right Action, Sony Circle, Xbox B, Nintendo A)\n[joypad/b]"
|
||||
|
||||
|
||||
func _on_x_pressed():
|
||||
n_button_label.text = "Button 2\n(Left Action, Sony Square, Xbox X, Nintendo Y)\n[joypad/x]"
|
||||
|
||||
|
||||
func _on_y_pressed():
|
||||
n_button_label.text = "Button 3\n(Top Action, Sony Triangle, Xbox Y, Nintendo X)\n[joypad/y]"
|
||||
|
||||
|
||||
func _on_select_pressed():
|
||||
n_button_label.text = "Button 4\n(Back, Sony Select, Xbox Back, Nintendo -)\n[joypad/select]"
|
||||
|
||||
|
||||
func _on_start_pressed():
|
||||
n_button_label.text = "Button 6\n(Start, Xbox Menu, Nintendo +)\n[joypad/start]"
|
||||
|
||||
|
||||
func _on_home_pressed():
|
||||
n_button_label.text = "Button 5\n(Guide, Sony PS, Xbox Home)\n[joypad/home]"
|
||||
|
||||
|
||||
func _on_share_pressed():
|
||||
n_button_label.text = "Button 15\n(Xbox Share, PS5 Microphone, Nintendo Capture)\n[joypad/share]"
|
||||
|
||||
|
||||
func _on_dpad_pressed():
|
||||
n_button_label.text = "Button 11/12/13/14\n(D-pad)\n[joypad/dpad]"
|
||||
|
||||
|
||||
func _on_dpad_down_pressed():
|
||||
n_button_label.text = "Button 12\n(D-pad Down)\n[joypad/dpad_down]"
|
||||
|
||||
|
||||
func _on_dpad_right_pressed():
|
||||
n_button_label.text = "Button 14\n(D-pad Right)\n[joypad/dpad_right]"
|
||||
|
||||
|
||||
func _on_dpad_left_pressed():
|
||||
n_button_label.text = "Button 13\n(D-pad Left)\n[joypad/dpad_left]"
|
||||
|
||||
|
||||
func _on_dpad_up_pressed():
|
||||
n_button_label.text = "Button 11\n(D-pad Up)\n[joypad/dpad_up]"
|
@@ -0,0 +1 @@
|
||||
uid://da1ors8v36hv3
|
@@ -0,0 +1,185 @@
|
||||
@tool
|
||||
extends Panel
|
||||
|
||||
signal done
|
||||
|
||||
@onready var n_name_filter := %NameFilter
|
||||
@onready var n_base_asset_names := %BaseAssetNames
|
||||
@onready var n_assets_container := %AssetsContainer
|
||||
|
||||
var _last_pressed_icon : ControllerIcons_Icon
|
||||
var _last_pressed_timestamp : int
|
||||
|
||||
var color_text_enabled : Color
|
||||
var color_text_disabled : Color
|
||||
|
||||
class ControllerIcons_Icon:
|
||||
static var group := ButtonGroup.new()
|
||||
|
||||
func _init(category: String, path: String):
|
||||
self.category = category
|
||||
self.filtered = true
|
||||
self.path = path.get_slice("/", 1)
|
||||
|
||||
button = Button.new()
|
||||
button.custom_minimum_size = Vector2(100, 100)
|
||||
button.clip_text = true
|
||||
button.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS
|
||||
button.icon_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
button.vertical_icon_alignment = VERTICAL_ALIGNMENT_TOP
|
||||
button.expand_icon = true
|
||||
button.toggle_mode = true
|
||||
button.button_group = group
|
||||
button.text = self.path
|
||||
|
||||
var icon = ControllerIconTexture.new()
|
||||
icon.path = path
|
||||
button.icon = icon
|
||||
|
||||
var button : Button
|
||||
var category : String
|
||||
var path : String
|
||||
|
||||
var selected: bool:
|
||||
set(_selected):
|
||||
selected = _selected
|
||||
_query_visibility()
|
||||
|
||||
var filtered: bool:
|
||||
set(_filtered):
|
||||
filtered = _filtered
|
||||
_query_visibility()
|
||||
|
||||
func _query_visibility():
|
||||
if is_instance_valid(button):
|
||||
button.visible = selected and filtered
|
||||
|
||||
var button_nodes := {}
|
||||
var asset_names_root : TreeItem
|
||||
|
||||
func populate(editor_interface: EditorInterface) -> void:
|
||||
## Using clear() triggers a signal and uses freed nodes.
|
||||
## Setting the text directly does not.
|
||||
n_name_filter.text = ""
|
||||
n_base_asset_names.clear()
|
||||
button_nodes.clear()
|
||||
for child in n_assets_container.get_children():
|
||||
n_assets_container.remove_child(child)
|
||||
child.queue_free()
|
||||
|
||||
# UPGRADE: In Godot 4.2, there's no need to have an instance to
|
||||
# EditorInterface, since it's now a static call:
|
||||
# var editor_control := EditorInterface.get_base_control()
|
||||
var editor_control := editor_interface.get_base_control()
|
||||
color_text_enabled = editor_control.get_theme_color("font_color", "Editor")
|
||||
color_text_disabled = editor_control.get_theme_color("disabled_font_color", "Editor")
|
||||
n_name_filter.right_icon = editor_control.get_theme_icon("Search", "EditorIcons")
|
||||
|
||||
asset_names_root = n_base_asset_names.create_item()
|
||||
|
||||
var base_paths := [
|
||||
ControllerIcons._settings.custom_asset_dir,
|
||||
"res://addons/controller_icons/assets"
|
||||
]
|
||||
|
||||
# UPGRADE: In Godot 4.2, for-loop variables can be
|
||||
# statically typed:
|
||||
# for base_path:String in base_paths:
|
||||
for base_path in base_paths:
|
||||
if base_path.is_empty() or not base_path.begins_with("res://"):
|
||||
continue
|
||||
# Files first
|
||||
handle_files("", base_path)
|
||||
# Directories next
|
||||
for dir in DirAccess.get_directories_at(base_path):
|
||||
handle_files(dir, base_path.path_join(dir))
|
||||
|
||||
var child : TreeItem = asset_names_root.get_next_in_tree()
|
||||
if child:
|
||||
child.select(0)
|
||||
|
||||
func handle_files(category: String, base_path: String):
|
||||
for file in DirAccess.get_files_at(base_path):
|
||||
if file.get_extension() == ControllerIcons._base_extension:
|
||||
create_icon(category, base_path.path_join(file))
|
||||
|
||||
func create_icon(category: String, path: String):
|
||||
var map_category := "<no category>" if category.is_empty() else category
|
||||
if not button_nodes.has(map_category):
|
||||
button_nodes[map_category] = {}
|
||||
var item : TreeItem = n_base_asset_names.create_item(asset_names_root)
|
||||
item.set_text(0, map_category)
|
||||
|
||||
var filename := path.get_file()
|
||||
if button_nodes[map_category].has(filename): return
|
||||
|
||||
var icon_path = ("" if category.is_empty() else category + "/") + path.get_file().get_basename()
|
||||
var icon := ControllerIcons_Icon.new(map_category, icon_path)
|
||||
button_nodes[map_category][filename] = icon
|
||||
n_assets_container.add_child(icon.button)
|
||||
icon.button.pressed.connect(func():
|
||||
if _last_pressed_icon == icon:
|
||||
if Time.get_ticks_msec() < _last_pressed_timestamp:
|
||||
done.emit()
|
||||
else:
|
||||
_last_pressed_timestamp = Time.get_ticks_msec() + 1000
|
||||
else:
|
||||
_last_pressed_icon = icon
|
||||
_last_pressed_timestamp = Time.get_ticks_msec() + 1000
|
||||
)
|
||||
|
||||
func get_icon_path() -> String:
|
||||
var button := ControllerIcons_Icon.group.get_pressed_button()
|
||||
if button:
|
||||
return button.icon.path
|
||||
return ""
|
||||
|
||||
func grab_focus() -> void:
|
||||
n_name_filter.grab_focus()
|
||||
|
||||
|
||||
func _on_base_asset_names_item_selected():
|
||||
var selected : TreeItem = n_base_asset_names.get_selected()
|
||||
if not selected: return
|
||||
|
||||
var category := selected.get_text(0)
|
||||
if not button_nodes.has(category): return
|
||||
|
||||
# UPGRADE: In Godot 4.2, for-loop variables can be
|
||||
# statically typed:
|
||||
# for key:String in button_nodes.keys():
|
||||
# for icon:ControllerIcon_Icon in button_nodes[key].values():
|
||||
for key in button_nodes.keys():
|
||||
for icon in button_nodes[key].values():
|
||||
icon.selected = key == category
|
||||
|
||||
|
||||
func _on_name_filter_text_changed(new_text:String):
|
||||
var any_visible := {}
|
||||
var asset_name := asset_names_root.get_next_in_tree()
|
||||
while asset_name:
|
||||
any_visible[asset_name.get_text(0)] = false
|
||||
asset_name = asset_name.get_next_in_tree()
|
||||
|
||||
var selected_category : TreeItem = n_base_asset_names.get_selected()
|
||||
|
||||
# UPGRADE: In Godot 4.2, for-loop variables can be
|
||||
# statically typed:
|
||||
# for key:String in button_nodes.keys():
|
||||
# for icon:Icon in button_nodes[key].values():
|
||||
for key in button_nodes.keys():
|
||||
for icon in button_nodes[key].values():
|
||||
var filtered : bool = true if new_text.is_empty() else icon.path.findn(new_text) != -1
|
||||
icon.filtered = filtered
|
||||
any_visible[key] = any_visible[key] or filtered
|
||||
|
||||
asset_name = asset_names_root.get_next_in_tree()
|
||||
while asset_name:
|
||||
var category := asset_name.get_text(0)
|
||||
if any_visible.has(category):
|
||||
var selectable : bool = any_visible[category]
|
||||
asset_name.set_selectable(0, selectable)
|
||||
if not selectable:
|
||||
asset_name.deselect(0)
|
||||
asset_name.set_custom_color(0, color_text_enabled if selectable else color_text_disabled)
|
||||
asset_name = asset_name.get_next_in_tree()
|
@@ -0,0 +1 @@
|
||||
uid://dt82cmmp3uy7l
|
@@ -0,0 +1,59 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://bituity863qe4"]
|
||||
|
||||
[ext_resource type="Script" path="res://addons/controller_icons/objects/path_selection/InputActionSelector.gd" id="1_shxks"]
|
||||
|
||||
[node name="Input Action" type="Panel"]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_shxks")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "The icon will be tied to an input action, swapping between keyboard/mouse and controller automatically."
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="NameFilter" type="LineEdit" parent="VBoxContainer/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
placeholder_text = "Filter by name..."
|
||||
clear_button_enabled = true
|
||||
|
||||
[node name="BuiltinActionButton" type="CheckButton" parent="VBoxContainer/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
text = "Show Built-in Actions"
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="Tree" type="Tree" parent="VBoxContainer/ScrollContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
columns = 3
|
||||
column_titles_visible = true
|
||||
hide_folding = true
|
||||
hide_root = true
|
||||
select_mode = 1
|
||||
scroll_horizontal_enabled = false
|
||||
|
||||
[connection signal="text_changed" from="VBoxContainer/HBoxContainer/NameFilter" to="." method="_on_name_filter_text_changed"]
|
||||
[connection signal="toggled" from="VBoxContainer/HBoxContainer/BuiltinActionButton" to="." method="_on_builtin_action_button_toggled"]
|
||||
[connection signal="item_activated" from="VBoxContainer/ScrollContainer/Tree" to="." method="_on_tree_item_activated"]
|
678
addons/controller_icons/objects/path_selection/joypad_path.tscn
Normal file
678
addons/controller_icons/objects/path_selection/joypad_path.tscn
Normal file
@@ -0,0 +1,678 @@
|
||||
[gd_scene load_steps=25 format=3 uid="uid://b3lplrf2w6kh7"]
|
||||
|
||||
[ext_resource type="Script" path="res://addons/controller_icons/objects/path_selection/JoypadPathSelector.gd" id="1_4ryog"]
|
||||
[ext_resource type="Script" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="2_yxfq6"]
|
||||
|
||||
[sub_resource type="ButtonGroup" id="ButtonGroup_haylq"]
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_nls54"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/l_stick"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_6klsb"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/l_stick_click"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_bij8j"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/r_stick"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_2h0w3"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/r_stick_click"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_kvj2q"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/lb"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_wtcrq"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/lt"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_lfpf5"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/rb"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_b3bsp"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/rt"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_u40go"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/a"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_rnqww"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/b"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_1a2yv"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/x"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_hktfi"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/y"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_2ksy6"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/select"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_08sqi"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/start"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_tivgf"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/home"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_87fow"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/share"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_n4i6p"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/dpad"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_eoyuo"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/dpad_down"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_c660e"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/dpad_right"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_riwus"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/dpad_left"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[sub_resource type="Texture2D" id="Texture2D_onmvf"]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
script = ExtResource("2_yxfq6")
|
||||
_horizontal_repeat = 1
|
||||
path = "joypad/dpad_up"
|
||||
show_only = 0
|
||||
force_type = 0
|
||||
|
||||
[node name="Joypad Path" type="Panel"]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_4ryog")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "The icon will only display a controller icon, changing dynamically according to the connected controller brand."
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="Control" type="Control" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="ButtonLabel" type="Label" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(350, 0)
|
||||
layout_mode = 1
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -150.0
|
||||
offset_top = 18.0
|
||||
offset_right = 150.0
|
||||
offset_bottom = 41.0
|
||||
grow_horizontal = 2
|
||||
text = "Press or click on the desired button..."
|
||||
horizontal_alignment = 1
|
||||
autowrap_mode = 3
|
||||
|
||||
[node name="LStick" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -126.0
|
||||
offset_top = 47.0
|
||||
offset_right = -76.0
|
||||
offset_bottom = 97.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_nls54")
|
||||
expand_icon = true
|
||||
|
||||
[node name="LStickClick" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -101.0
|
||||
offset_top = 97.0
|
||||
offset_right = -51.0
|
||||
offset_bottom = 147.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_6klsb")
|
||||
expand_icon = true
|
||||
|
||||
[node name="RStick" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 74.0
|
||||
offset_top = 47.0
|
||||
offset_right = 124.0
|
||||
offset_bottom = 97.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_bij8j")
|
||||
expand_icon = true
|
||||
|
||||
[node name="RStickClick" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 49.0
|
||||
offset_top = 97.0
|
||||
offset_right = 99.0
|
||||
offset_bottom = 147.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_2h0w3")
|
||||
expand_icon = true
|
||||
|
||||
[node name="LB" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -276.0
|
||||
offset_top = -153.0
|
||||
offset_right = -226.0
|
||||
offset_bottom = -103.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_kvj2q")
|
||||
expand_icon = true
|
||||
|
||||
[node name="LT" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -326.0
|
||||
offset_top = -178.0
|
||||
offset_right = -276.0
|
||||
offset_bottom = -128.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_wtcrq")
|
||||
expand_icon = true
|
||||
|
||||
[node name="RB" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 224.0
|
||||
offset_top = -153.0
|
||||
offset_right = 274.0
|
||||
offset_bottom = -103.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_lfpf5")
|
||||
expand_icon = true
|
||||
|
||||
[node name="RT" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 274.0
|
||||
offset_top = -178.0
|
||||
offset_right = 324.0
|
||||
offset_bottom = -128.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_b3bsp")
|
||||
expand_icon = true
|
||||
|
||||
[node name="A" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 174.0
|
||||
offset_top = 22.0
|
||||
offset_right = 224.0
|
||||
offset_bottom = 72.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_u40go")
|
||||
expand_icon = true
|
||||
|
||||
[node name="B" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 224.0
|
||||
offset_top = -28.0
|
||||
offset_right = 274.0
|
||||
offset_bottom = 22.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_rnqww")
|
||||
expand_icon = true
|
||||
|
||||
[node name="X" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 124.0
|
||||
offset_top = -28.0
|
||||
offset_right = 174.0
|
||||
offset_bottom = 22.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_1a2yv")
|
||||
expand_icon = true
|
||||
|
||||
[node name="Y" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 174.0
|
||||
offset_top = -78.0
|
||||
offset_right = 224.0
|
||||
offset_bottom = -28.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_hktfi")
|
||||
expand_icon = true
|
||||
|
||||
[node name="Select" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -76.0
|
||||
offset_top = -53.0
|
||||
offset_right = -26.0
|
||||
offset_bottom = -3.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_2ksy6")
|
||||
expand_icon = true
|
||||
|
||||
[node name="Start" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = 24.0
|
||||
offset_top = -53.0
|
||||
offset_right = 74.0
|
||||
offset_bottom = -3.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_08sqi")
|
||||
expand_icon = true
|
||||
|
||||
[node name="Home" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -26.0
|
||||
offset_top = -78.0
|
||||
offset_right = 24.0
|
||||
offset_bottom = -28.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_tivgf")
|
||||
expand_icon = true
|
||||
|
||||
[node name="Share" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -26.0
|
||||
offset_top = -28.0
|
||||
offset_right = 24.0
|
||||
offset_bottom = 22.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_87fow")
|
||||
expand_icon = true
|
||||
|
||||
[node name="DPAD" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -226.0
|
||||
offset_top = -28.0
|
||||
offset_right = -176.0
|
||||
offset_bottom = 22.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_n4i6p")
|
||||
expand_icon = true
|
||||
|
||||
[node name="DPADDown" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -226.0
|
||||
offset_top = 22.0
|
||||
offset_right = -176.0
|
||||
offset_bottom = 72.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_eoyuo")
|
||||
expand_icon = true
|
||||
|
||||
[node name="DPADRight" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -176.0
|
||||
offset_top = -28.0
|
||||
offset_right = -126.0
|
||||
offset_bottom = 22.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_c660e")
|
||||
expand_icon = true
|
||||
|
||||
[node name="DPADLeft" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -276.0
|
||||
offset_top = -28.0
|
||||
offset_right = -226.0
|
||||
offset_bottom = 22.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_riwus")
|
||||
expand_icon = true
|
||||
|
||||
[node name="DPADUp" type="Button" parent="VBoxContainer/Control"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -226.0
|
||||
offset_top = -78.0
|
||||
offset_right = -176.0
|
||||
offset_bottom = -28.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_haylq")
|
||||
icon = SubResource("Texture2D_onmvf")
|
||||
expand_icon = true
|
||||
|
||||
[connection signal="pressed" from="VBoxContainer/Control/LStick" to="." method="_on_l_stick_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/LStick" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/LStickClick" to="." method="_on_l_stick_click_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/LStickClick" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/RStick" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/RStick" to="." method="_on_r_stick_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/RStickClick" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/RStickClick" to="." method="_on_r_stick_click_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/LB" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/LB" to="." method="_on_lb_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/LT" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/LT" to="." method="_on_lt_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/RB" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/RB" to="." method="_on_rb_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/RT" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/RT" to="." method="_on_rt_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/A" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/A" to="." method="_on_a_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/B" to="." method="_on_b_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/B" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/X" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/X" to="." method="_on_x_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/Y" to="." method="_on_y_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/Y" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/Select" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/Select" to="." method="_on_select_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/Start" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/Start" to="." method="_on_start_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/Home" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/Home" to="." method="_on_home_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/Share" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/Share" to="." method="_on_share_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/DPAD" to="." method="_on_dpad_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/DPAD" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/DPADDown" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/DPADDown" to="." method="_on_dpad_down_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/DPADRight" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/DPADRight" to="." method="_on_dpad_right_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/DPADLeft" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/DPADLeft" to="." method="_on_dpad_left_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/DPADUp" to="." method="_on_button_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Control/DPADUp" to="." method="_on_dpad_up_pressed"]
|
@@ -0,0 +1,67 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://d2ow6e2ba86b6"]
|
||||
|
||||
[ext_resource type="Script" path="res://addons/controller_icons/objects/path_selection/SpecificPathSelector.gd" id="1_iqwfd"]
|
||||
|
||||
[node name="Specific Path" type="Panel"]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_iqwfd")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Label" type="Label" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "The icon will be set to a specific asset, without any dynamic remapping."
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="NameFilter" type="LineEdit" parent="VBoxContainer/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
placeholder_text = "Filter by name..."
|
||||
clear_button_enabled = true
|
||||
|
||||
[node name="HSplitContainer" type="HSplitContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/HSplitContainer"]
|
||||
custom_minimum_size = Vector2(200, 0)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 0
|
||||
|
||||
[node name="BaseAssetNames" type="Tree" parent="VBoxContainer/HSplitContainer/ScrollContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
hide_folding = true
|
||||
hide_root = true
|
||||
|
||||
[node name="ScrollContainer2" type="ScrollContainer" parent="VBoxContainer/HSplitContainer"]
|
||||
custom_minimum_size = Vector2(200, 0)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
follow_focus = true
|
||||
horizontal_scroll_mode = 0
|
||||
|
||||
[node name="AssetsContainer" type="HFlowContainer" parent="VBoxContainer/HSplitContainer/ScrollContainer2"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[connection signal="text_changed" from="VBoxContainer/HBoxContainer/NameFilter" to="." method="_on_name_filter_text_changed"]
|
||||
[connection signal="item_selected" from="VBoxContainer/HSplitContainer/ScrollContainer/BaseAssetNames" to="." method="_on_base_asset_names_item_selected"]
|
Reference in New Issue
Block a user