Add controller_icons addon

This commit is contained in:
TheThomaas 2026-09-01 15:28:04 +02:00
parent f08ba8a020
commit db3f281b82
816 changed files with 19689 additions and 0 deletions

View file

@ -0,0 +1,704 @@
@tool
extends Node
signal input_type_changed(input_type: InputType, controller: int)
enum InputType {
KEYBOARD_MOUSE, ## The input is from the keyboard and/or mouse.
CONTROLLER ## The input is from a controller.
}
enum PathType {
INPUT_ACTION, ## The path is an input action.
JOYPAD_PATH, ## The path is a generic joypad path.
SPECIFIC_PATH ## The path is a specific path.
}
var _cached_icons := {}
var _custom_input_actions := {}
var _cached_callables_lock := Mutex.new()
var _cached_callables : Array[Callable] = []
var _last_input_type : InputType
var _last_controller : int
var _settings : ControllerSettings
var _base_extension := "png"
# Custom mouse velocity calculation, because Godot
# doesn't implement it on some OSes apparently
const _MOUSE_VELOCITY_DELTA := 0.1
var _t : float
var _mouse_velocity : int
var Mapper = preload("res://addons/controller_icons/Mapper.gd").new()
# Default actions will be the builtin editor actions when
# the script is at editor ("tool") level. To pickup more
# actions available, these have to be queried manually
var _builtin_keys := [
"input/ui_accept", "input/ui_cancel", "input/ui_copy",
"input/ui_cut", "input/ui_down", "input/ui_end",
"input/ui_filedialog_refresh", "input/ui_filedialog_show_hidden",
"input/ui_filedialog_up_one_level", "input/ui_focus_next",
"input/ui_focus_prev", "input/ui_graph_delete",
"input/ui_graph_duplicate", "input/ui_home",
"input/ui_left", "input/ui_menu", "input/ui_page_down",
"input/ui_page_up", "input/ui_paste", "input/ui_redo",
"input/ui_right", "input/ui_select", "input/ui_swap_input_direction",
"input/ui_text_add_selection_for_next_occurrence",
"input/ui_text_backspace", "input/ui_text_backspace_all_to_left",
"input/ui_text_backspace_all_to_left.macos",
"input/ui_text_backspace_word", "input/ui_text_backspace_word.macos",
"input/ui_text_caret_add_above", "input/ui_text_caret_add_above.macos",
"input/ui_text_caret_add_below", "input/ui_text_caret_add_below.macos",
"input/ui_text_caret_document_end", "input/ui_text_caret_document_end.macos",
"input/ui_text_caret_document_start", "input/ui_text_caret_document_start.macos",
"input/ui_text_caret_down", "input/ui_text_caret_left",
"input/ui_text_caret_line_end", "input/ui_text_caret_line_end.macos",
"input/ui_text_caret_line_start", "input/ui_text_caret_line_start.macos",
"input/ui_text_caret_page_down", "input/ui_text_caret_page_up",
"input/ui_text_caret_right", "input/ui_text_caret_up",
"input/ui_text_caret_word_left", "input/ui_text_caret_word_left.macos",
"input/ui_text_caret_word_right", "input/ui_text_caret_word_right.macos",
"input/ui_text_clear_carets_and_selection", "input/ui_text_completion_accept",
"input/ui_text_completion_query", "input/ui_text_completion_replace",
"input/ui_text_dedent", "input/ui_text_delete",
"input/ui_text_delete_all_to_right", "input/ui_text_delete_all_to_right.macos",
"input/ui_text_delete_word", "input/ui_text_delete_word.macos",
"input/ui_text_indent", "input/ui_text_newline", "input/ui_text_newline_above",
"input/ui_text_newline_blank", "input/ui_text_scroll_down",
"input/ui_text_scroll_down.macos", "input/ui_text_scroll_up",
"input/ui_text_scroll_up.macos", "input/ui_text_select_all",
"input/ui_text_select_word_under_caret", "input/ui_text_select_word_under_caret.macos",
"input/ui_text_submit", "input/ui_text_toggle_insert_mode", "input/ui_undo",
"input/ui_up",
]
func _set_last_input_type(__last_input_type, __last_controller):
_last_input_type = __last_input_type
_last_controller = __last_controller
emit_signal("input_type_changed", _last_input_type, _last_controller)
func _enter_tree():
process_mode = Node.PROCESS_MODE_ALWAYS
if Engine.is_editor_hint():
_parse_input_actions()
func _exit_tree():
Mapper = null
func _parse_input_actions():
_custom_input_actions.clear()
for key in _builtin_keys:
var data : Dictionary = ProjectSettings.get_setting(key)
if not data.is_empty() and data.has("events") and data["events"] is Array:
_add_custom_input_action((key as String).trim_prefix("input/"), data)
# A script running at editor ("tool") level only has
# the default mappings. The way to get around this is
# manually parsing the project file and adding the
# new input actions to lookup.
var proj_file := ConfigFile.new()
if proj_file.load("res://project.godot"):
printerr("Failed to open \"project.godot\"! Custom input actions will not work on editor view!")
return
if proj_file.has_section("input"):
for input_action in proj_file.get_section_keys("input"):
var data : Dictionary = proj_file.get_value("input", input_action)
_add_custom_input_action(input_action, data)
func _ready():
Input.joy_connection_changed.connect(_on_joy_connection_changed)
_settings = load("res://addons/controller_icons/settings.tres")
if not _settings:
_settings = ControllerSettings.new()
if _settings.custom_mapper:
Mapper = _settings.custom_mapper.new()
if _settings.custom_file_extension and not _settings.custom_file_extension.is_empty():
_base_extension = _settings.custom_file_extension
# Wait a frame to give a chance for the app to initialize
await get_tree().process_frame
# Set input type to what's likely being used currently
if Input.get_connected_joypads().is_empty():
_set_last_input_type(InputType.KEYBOARD_MOUSE, -1)
else:
_set_last_input_type(InputType.CONTROLLER, Input.get_connected_joypads().front())
func _on_joy_connection_changed(device, connected):
if connected:
_set_last_input_type(InputType.CONTROLLER, device)
else:
if Input.get_connected_joypads().is_empty():
_set_last_input_type(InputType.KEYBOARD_MOUSE, -1)
else:
_set_last_input_type(InputType.CONTROLLER, Input.get_connected_joypads().front())
func _input(event: InputEvent):
var input_type = _last_input_type
var controller = _last_controller
match event.get_class():
"InputEventKey", "InputEventMouseButton":
input_type = InputType.KEYBOARD_MOUSE
"InputEventMouseMotion":
if _settings.allow_mouse_remap and _test_mouse_velocity(event.relative):
input_type = InputType.KEYBOARD_MOUSE
"InputEventJoypadButton":
input_type = InputType.CONTROLLER
controller = event.device
"InputEventJoypadMotion":
if abs(event.axis_value) > _settings.joypad_deadzone:
input_type = InputType.CONTROLLER
controller = event.device
if input_type != _last_input_type or controller != _last_controller:
_set_last_input_type(input_type, controller)
func _test_mouse_velocity(relative_vec: Vector2):
if _t > _MOUSE_VELOCITY_DELTA:
_t = 0
_mouse_velocity = 0
# We do a component sum instead of a length, to save on a
# sqrt operation, and because length_squared is negatively
# affected by low value vectors (<10).
# It is also good enough for this system, so reliability
# is sacrificed in favor of speed.
_mouse_velocity += abs(relative_vec.x) + abs(relative_vec.y)
return _mouse_velocity / _MOUSE_VELOCITY_DELTA > _settings.mouse_min_movement
func _process(delta: float) -> void:
_t += delta
if not _cached_callables.is_empty() and _cached_callables_lock.try_lock():
# UPGRADE: In Godot 4.2, for-loop variables can be
# statically typed:
# for f: Callable in _cached_callables:
for f in _cached_callables:
if f.is_valid(): f.call()
_cached_callables.clear()
_cached_callables_lock.unlock()
func _add_custom_input_action(input_action: String, data: Dictionary):
_custom_input_actions[input_action] = data["events"]
func refresh():
# All it takes is to signal icons to refresh paths
emit_signal("input_type_changed", _last_input_type, _last_controller)
func get_joypad_type(controller: int = _last_controller) -> ControllerSettings.Devices:
return Mapper._get_joypad_type(controller, _settings.joypad_fallback, ControllerSettings.Devices.NONE)
func get_last_input_type() -> InputType:
return _last_input_type
func parse_path(path: String, input_type = _last_input_type, last_controller = _last_controller, forced_controller_icon_style = ControllerSettings.Devices.NONE) -> Texture:
if typeof(input_type) == TYPE_NIL:
return null
var root_paths := _expand_path(path, input_type, last_controller, forced_controller_icon_style)
for root_path in root_paths:
if _load_icon(root_path):
continue
return _cached_icons[root_path]
return null
func parse_event_modifiers(event: InputEvent) -> Array[Texture]:
if not event or not event is InputEventWithModifiers:
return []
var icons : Array[Texture] = []
var modifiers : Array[String] = []
if event.command_or_control_autoremap:
match OS.get_name():
"macOS":
modifiers.push_back("key/command")
_:
modifiers.push_back("key/ctrl")
if event.ctrl_pressed and not event.command_or_control_autoremap:
modifiers.push_back("key/ctrl")
if event.shift_pressed:
modifiers.push_back("key/shift")
if event.alt_pressed:
modifiers.push_back("key/alt")
if event.meta_pressed and not event.command_or_control_autoremap:
match OS.get_name():
"macOS":
modifiers.push_back("key/command")
_:
modifiers.push_back("key/win")
for modifier in modifiers:
for icon_path in _expand_path(modifier, InputType.KEYBOARD_MOUSE, -1):
if _load_icon(icon_path) == OK:
icons.push_back(_cached_icons[icon_path])
break
return icons
func parse_path_to_tts(path: String, input_type: int = _last_input_type, controller: int = _last_controller) -> String:
if input_type == null:
return ""
var tts = _convert_path_to_asset_file(path, input_type, controller)
return _convert_asset_file_to_tts(tts.get_basename().get_file())
func parse_event(event: InputEvent) -> Texture:
var path = _convert_event_to_path(event)
if path.is_empty():
return null
var base_paths := [
_settings.custom_asset_dir,
"res://addons/controller_icons/assets"
]
for base_path in base_paths:
base_path = base_path.simplify_path()
if base_path.is_empty():
continue
base_path = base_path.path_join( "%s.%s" % [path, _base_extension] )
if _load_icon(base_path):
continue
return _cached_icons[base_path]
return null
func get_path_type(path: String) -> PathType:
if _custom_input_actions.has(path) or InputMap.has_action(path):
return PathType.INPUT_ACTION
elif path.get_slice("/", 0) == "joypad":
return PathType.JOYPAD_PATH
else:
return PathType.SPECIFIC_PATH
func get_matching_event(path: String, input_type: InputType = _last_input_type, controller: int = _last_controller) -> InputEvent:
var events : Array
if _custom_input_actions.has(path):
events = _custom_input_actions[path]
else:
events = InputMap.action_get_events(path)
var fallbacks = []
for event in events:
if not is_instance_valid(event): continue
match event.get_class():
"InputEventKey", "InputEventMouse", "InputEventMouseMotion", "InputEventMouseButton":
if input_type == InputType.KEYBOARD_MOUSE:
return event
"InputEventJoypadButton", "InputEventJoypadMotion":
if input_type == InputType.CONTROLLER:
# Use the first device specific mapping if there is one.
if event.device == controller:
return event
# Otherwise, we create a fallback prioritizing events with 'ALL_DEVICE'
if event.device < 0: # All-device event
fallbacks.push_front(event)
else:
fallbacks.push_back(event)
return fallbacks[0] if not fallbacks.is_empty() else null
func _expand_path(path: String, input_type: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE) -> Array:
var paths := []
var base_paths := [
_settings.custom_asset_dir + "/",
"res://addons/controller_icons/assets/"
]
for base_path in base_paths:
if base_path.is_empty():
continue
base_path += _convert_path_to_asset_file(path, input_type, controller, forced_controller_icon_style)
paths.push_back(base_path + "." + _base_extension)
return paths
func _convert_path_to_asset_file(path: String, input_type: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE) -> String:
match get_path_type(path):
PathType.INPUT_ACTION:
var event := get_matching_event(path, input_type, controller)
if event:
return _convert_event_to_path(event, controller, forced_controller_icon_style)
return path
PathType.JOYPAD_PATH:
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback, forced_controller_icon_style)
PathType.SPECIFIC_PATH, _:
return path
func _convert_asset_file_to_tts(path: String) -> String:
match path:
"shift_alt":
return "shift"
"esc":
return "escape"
"backspace_alt":
return "backspace"
"enter_alt":
return "enter"
"enter_tall":
return "keypad enter"
"arrow_left":
return "left arrow"
"arrow_right":
return "right arrow"
"del":
return "delete"
"arrow_up":
return "up arrow"
"arrow_down":
return "down arrow"
"shift_alt":
return "shift"
"ctrl":
return "control"
"kp_add":
return "keypad plus"
"mark_left":
return "left mark"
"mark_right":
return "right mark"
"bracket_left":
return "left bracket"
"bracket_right":
return "right bracket"
"tilda":
return "tilde"
"lb":
return "left bumper"
"rb":
return "right bumper"
"lt":
return "left trigger"
"rt":
return "right trigger"
"l_stick_click":
return "left stick click"
"r_stick_click":
return "right stick click"
"l_stick":
return "left stick"
"r_stick":
return "right stick"
_:
return path
func _convert_event_to_path(event: InputEvent, controller: int = _last_controller, forced_controller_icon_style = ControllerSettings.Devices.NONE):
if event is InputEventKey:
# If this is a physical key, convert to localized scancode
if event.keycode == 0:
return _convert_key_to_path(DisplayServer.keyboard_get_keycode_from_physical(event.physical_keycode))
return _convert_key_to_path(event.keycode)
elif event is InputEventMouseButton:
return _convert_mouse_button_to_path(event.button_index)
elif event is InputEventJoypadButton:
return _convert_joypad_button_to_path(event.button_index, controller, forced_controller_icon_style)
elif event is InputEventJoypadMotion:
return _convert_joypad_motion_to_path(event.axis, controller, forced_controller_icon_style)
func _convert_key_to_path(scancode: int):
match scancode:
KEY_ESCAPE:
return "key/esc"
KEY_TAB:
return "key/tab"
KEY_BACKSPACE:
return "key/backspace_alt"
KEY_ENTER:
return "key/enter_alt"
KEY_KP_ENTER:
return "key/enter_tall"
KEY_INSERT:
return "key/insert"
KEY_DELETE:
return "key/del"
KEY_PRINT:
return "key/print_screen"
KEY_HOME:
return "key/home"
KEY_END:
return "key/end"
KEY_LEFT:
return "key/arrow_left"
KEY_UP:
return "key/arrow_up"
KEY_RIGHT:
return "key/arrow_right"
KEY_DOWN:
return "key/arrow_down"
KEY_PAGEUP:
return "key/page_up"
KEY_PAGEDOWN:
return "key/page_down"
KEY_SHIFT:
return "key/shift_alt"
KEY_CTRL:
return "key/ctrl"
KEY_META:
match OS.get_name():
"macOS":
return "key/command"
_:
return "key/meta"
KEY_ALT:
return "key/alt"
KEY_CAPSLOCK:
return "key/caps_lock"
KEY_NUMLOCK:
return "key/num_lock"
KEY_F1:
return "key/f1"
KEY_F2:
return "key/f2"
KEY_F3:
return "key/f3"
KEY_F4:
return "key/f4"
KEY_F5:
return "key/f5"
KEY_F6:
return "key/f6"
KEY_F7:
return "key/f7"
KEY_F8:
return "key/f8"
KEY_F9:
return "key/f9"
KEY_F10:
return "key/f10"
KEY_F11:
return "key/f11"
KEY_F12:
return "key/f12"
KEY_KP_MULTIPLY, KEY_ASTERISK:
return "key/asterisk"
KEY_KP_SUBTRACT, KEY_MINUS:
return "key/minus"
KEY_KP_ADD:
return "key/plus_tall"
KEY_KP_0:
return "key/0"
KEY_KP_1:
return "key/1"
KEY_KP_2:
return "key/2"
KEY_KP_3:
return "key/3"
KEY_KP_4:
return "key/4"
KEY_KP_5:
return "key/5"
KEY_KP_6:
return "key/6"
KEY_KP_7:
return "key/7"
KEY_KP_8:
return "key/8"
KEY_KP_9:
return "key/9"
KEY_UNKNOWN:
return ""
KEY_SPACE:
return "key/space"
KEY_QUOTEDBL:
return "key/quote"
KEY_PLUS:
return "key/plus"
KEY_0:
return "key/0"
KEY_1:
return "key/1"
KEY_2:
return "key/2"
KEY_3:
return "key/3"
KEY_4:
return "key/4"
KEY_5:
return "key/5"
KEY_6:
return "key/6"
KEY_7:
return "key/7"
KEY_8:
return "key/8"
KEY_9:
return "key/9"
KEY_SEMICOLON:
return "key/semicolon"
KEY_LESS:
return "key/mark_left"
KEY_GREATER:
return "key/mark_right"
KEY_QUESTION:
return "key/question"
KEY_A:
return "key/a"
KEY_B:
return "key/b"
KEY_C:
return "key/c"
KEY_D:
return "key/d"
KEY_E:
return "key/e"
KEY_F:
return "key/f"
KEY_G:
return "key/g"
KEY_H:
return "key/h"
KEY_I:
return "key/i"
KEY_J:
return "key/j"
KEY_K:
return "key/k"
KEY_L:
return "key/l"
KEY_M:
return "key/m"
KEY_N:
return "key/n"
KEY_O:
return "key/o"
KEY_P:
return "key/p"
KEY_Q:
return "key/q"
KEY_R:
return "key/r"
KEY_S:
return "key/s"
KEY_T:
return "key/t"
KEY_U:
return "key/u"
KEY_V:
return "key/v"
KEY_W:
return "key/w"
KEY_X:
return "key/x"
KEY_Y:
return "key/y"
KEY_Z:
return "key/z"
KEY_BRACKETLEFT:
return "key/bracket_left"
KEY_BACKSLASH:
return "key/slash"
KEY_SLASH:
return "key/forward_slash"
KEY_BRACKETRIGHT:
return "key/bracket_right"
KEY_ASCIITILDE:
return "key/tilda"
KEY_QUOTELEFT:
return "key/backtick"
KEY_APOSTROPHE:
return "key/apostrophe"
KEY_COMMA:
return "key/comma"
KEY_EQUAL:
return "key/equals"
KEY_PERIOD, KEY_KP_PERIOD:
return "key/period"
_:
return ""
func _convert_mouse_button_to_path(button_index: int):
match button_index:
MOUSE_BUTTON_LEFT:
return "mouse/left"
MOUSE_BUTTON_RIGHT:
return "mouse/right"
MOUSE_BUTTON_MIDDLE:
return "mouse/middle"
MOUSE_BUTTON_WHEEL_UP:
return "mouse/wheel_up"
MOUSE_BUTTON_WHEEL_DOWN:
return "mouse/wheel_down"
MOUSE_BUTTON_XBUTTON1:
return "mouse/side_down"
MOUSE_BUTTON_XBUTTON2:
return "mouse/side_up"
_:
return "mouse/sample"
func _convert_joypad_button_to_path(button_index: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE):
var path
match button_index:
JOY_BUTTON_A:
path = "joypad/a"
JOY_BUTTON_B:
path = "joypad/b"
JOY_BUTTON_X:
path = "joypad/x"
JOY_BUTTON_Y:
path = "joypad/y"
JOY_BUTTON_LEFT_SHOULDER:
path = "joypad/lb"
JOY_BUTTON_RIGHT_SHOULDER:
path = "joypad/rb"
JOY_BUTTON_LEFT_STICK:
path = "joypad/l_stick_click"
JOY_BUTTON_RIGHT_STICK:
path = "joypad/r_stick_click"
JOY_BUTTON_BACK:
path = "joypad/select"
JOY_BUTTON_START:
path = "joypad/start"
JOY_BUTTON_DPAD_UP:
path = "joypad/dpad_up"
JOY_BUTTON_DPAD_DOWN:
path = "joypad/dpad_down"
JOY_BUTTON_DPAD_LEFT:
path = "joypad/dpad_left"
JOY_BUTTON_DPAD_RIGHT:
path = "joypad/dpad_right"
JOY_BUTTON_GUIDE:
path = "joypad/home"
JOY_BUTTON_MISC1:
path = "joypad/share"
_:
return ""
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback, forced_controller_icon_style)
func _convert_joypad_motion_to_path(axis: int, controller: int, forced_controller_icon_style = ControllerSettings.Devices.NONE):
var path : String
match axis:
JOY_AXIS_LEFT_X, JOY_AXIS_LEFT_Y:
path = "joypad/l_stick"
JOY_AXIS_RIGHT_X, JOY_AXIS_RIGHT_Y:
path = "joypad/r_stick"
JOY_AXIS_TRIGGER_LEFT:
path = "joypad/lt"
JOY_AXIS_TRIGGER_RIGHT:
path = "joypad/rt"
_:
return ""
return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback, forced_controller_icon_style)
func _load_icon(path: String) -> int:
if _cached_icons.has(path): return OK
var tex = null
if path.begins_with("res://"):
if ResourceLoader.exists(path):
tex = load(path)
if not tex:
return ERR_FILE_CORRUPT
else:
return ERR_FILE_NOT_FOUND
else:
if not FileAccess.file_exists(path):
return ERR_FILE_NOT_FOUND
var img := Image.new()
var err = img.load(path)
if err != OK:
return err
tex = ImageTexture.new()
tex.create_from_image(img)
_cached_icons[path] = tex
return OK
func _defer_texture_load(f: Callable) -> void:
_cached_callables_lock.lock()
_cached_callables.push_back(f)
_cached_callables_lock.unlock()

View file

@ -0,0 +1 @@
uid://b7ho1rjcpht1d

View file

@ -0,0 +1,56 @@
@tool
extends Resource
class_name ControllerSettings
enum Devices {
NONE = -1,
LUNA,
OUYA,
PS3,
PS4,
PS5,
STADIA,
STEAM,
SWITCH,
JOYCON,
XBOX360,
XBOXONE,
XBOXSERIES,
STEAM_DECK
}
## General addon settings
@export_subgroup("General")
## Controller type to fallback to if automatic
## controller detection fails
@export var joypad_fallback : Devices = Devices.XBOX360
## Controller deadzone for triggering an icon remap when input
## is analogic (movement sticks or triggers)
@export_range(0.0, 1.0) var joypad_deadzone : float = 0.5
## Allow mouse movement to trigger an icon remap
@export var allow_mouse_remap : bool = true
## Minimum mouse "instantaneous" movement for
## triggering an icon remap
@export_range(0, 10000) var mouse_min_movement : int = 200
## Settings related to advanced custom assets usage and remapping
@export_subgroup("Custom assets")
## Custom asset lookup folder for custom icons
@export_dir var custom_asset_dir : String = ""
## Custom generic joystick mapper script
@export var custom_mapper : Script
## Custom icon file extension
@export var custom_file_extension : String = ""
## Custom settings related to any text rendering required on prompts
@export_subgroup("Text Rendering")
## Custom LabelSettings. If unset, uses engine default settings.
@export var custom_label_settings : LabelSettings

View file

@ -0,0 +1 @@
uid://bb3hjxisuwh6d

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Ricardo Subtil
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,301 @@
extends RefCounted
class_name ControllerMapper
func _convert_joypad_path(path: String, device: int, fallback: ControllerSettings.Devices, force_controller_icon_style = ControllerSettings.Devices.NONE) -> String:
match _get_joypad_type(device, fallback, force_controller_icon_style):
ControllerSettings.Devices.LUNA:
return _convert_joypad_to_luna(path)
ControllerSettings.Devices.PS3:
return _convert_joypad_to_ps3(path)
ControllerSettings.Devices.PS4:
return _convert_joypad_to_ps4(path)
ControllerSettings.Devices.PS5:
return _convert_joypad_to_ps5(path)
ControllerSettings.Devices.STADIA:
return _convert_joypad_to_stadia(path)
ControllerSettings.Devices.STEAM:
return _convert_joypad_to_steam(path)
ControllerSettings.Devices.SWITCH:
return _convert_joypad_to_switch(path)
ControllerSettings.Devices.JOYCON:
return _convert_joypad_to_joycon(path)
ControllerSettings.Devices.XBOX360:
return _convert_joypad_to_xbox360(path)
ControllerSettings.Devices.XBOXONE:
return _convert_joypad_to_xboxone(path)
ControllerSettings.Devices.XBOXSERIES:
return _convert_joypad_to_xboxseries(path)
ControllerSettings.Devices.STEAM_DECK:
return _convert_joypad_to_steamdeck(path)
ControllerSettings.Devices.OUYA:
return _convert_joypad_to_ouya(path)
_:
return ""
func _get_joypad_type(device, fallback, force_controller_icon_style):
if force_controller_icon_style != ControllerSettings.Devices.NONE:
return force_controller_icon_style
var available = Input.get_connected_joypads()
if available.is_empty():
return fallback
# If the requested joypad is not on the connected joypad list, try using the last known connected joypad
if not device in available:
device = ControllerIcons._last_controller
# If that fails too, then use whatever joypad we have connected right now
if not device in available:
device = available.front()
var controller_name = Input.get_joy_name(device)
if "Luna Controller" in controller_name:
return ControllerSettings.Devices.LUNA
elif "PS3 Controller" in controller_name:
return ControllerSettings.Devices.PS3
elif "PS4 Controller" in controller_name or \
"DUALSHOCK 4" in controller_name:
return ControllerSettings.Devices.PS4
elif "PS5 Controller" in controller_name or \
"DualSense" in controller_name:
return ControllerSettings.Devices.PS5
elif "Stadia Controller" in controller_name:
return ControllerSettings.Devices.STADIA
elif "Steam Controller" in controller_name:
return ControllerSettings.Devices.STEAM
elif "Switch Controller" in controller_name or \
"Switch Pro Controller" in controller_name:
return ControllerSettings.Devices.SWITCH
elif "Joy-Con" in controller_name:
return ControllerSettings.Devices.JOYCON
elif "Xbox 360 Controller" in controller_name:
return ControllerSettings.Devices.XBOX360
elif "Xbox One" in controller_name or \
"X-Box One" in controller_name or \
"Xbox Wireless Controller" in controller_name:
return ControllerSettings.Devices.XBOXONE
elif "Xbox Series" in controller_name:
return ControllerSettings.Devices.XBOXSERIES
elif "Steam Deck" in controller_name or \
"Steam Virtual Gamepad" in controller_name:
return ControllerSettings.Devices.STEAM_DECK
elif "OUYA Controller" in controller_name:
return ControllerSettings.Devices.OUYA
else:
return fallback
func _convert_joypad_to_luna(path: String):
path = path.replace("joypad", "luna")
match path.substr(path.find("/") + 1):
"select":
return path.replace("/select", "/circle")
"start":
return path.replace("/start", "/menu")
"share":
return path.replace("/share", "/microphone")
_:
return path
func _convert_joypad_to_playstation(path: String):
match path.substr(path.find("/") + 1):
"a":
return path.replace("/a", "/cross")
"b":
return path.replace("/b", "/circle")
"x":
return path.replace("/x", "/square")
"y":
return path.replace("/y", "/triangle")
"lb":
return path.replace("/lb", "/l1")
"rb":
return path.replace("/rb", "/r1")
"lt":
return path.replace("/lt", "/l2")
"rt":
return path.replace("/rt", "/r2")
_:
return path
func _convert_joypad_to_ps3(path: String):
return _convert_joypad_to_playstation(path.replace("joypad", "ps3"))
func _convert_joypad_to_ps4(path: String):
path = _convert_joypad_to_playstation(path.replace("joypad", "ps4"))
match path.substr(path.find("/") + 1):
"select":
return path.replace("/select", "/share")
"start":
return path.replace("/start", "/options")
"share":
return path.replace("/share", "/")
_:
return path
func _convert_joypad_to_ps5(path: String):
path = _convert_joypad_to_playstation(path.replace("joypad", "ps5"))
match path.substr(path.find("/") + 1):
"select":
return path.replace("/select", "/share")
"start":
return path.replace("/start", "/options")
"home":
return path.replace("/home", "/assistant")
"share":
return path.replace("/share", "/microphone")
_:
return path
func _convert_joypad_to_stadia(path: String):
path = path.replace("joypad", "stadia")
match path.substr(path.find("/") + 1):
"lb":
return path.replace("/lb", "/l1")
"rb":
return path.replace("/rb", "/r1")
"lt":
return path.replace("/lt", "/l2")
"rt":
return path.replace("/rt", "/r2")
"select":
return path.replace("/select", "/dots")
"start":
return path.replace("/start", "/menu")
"share":
return path.replace("/share", "/select")
_:
return path
func _convert_joypad_to_steam(path: String):
path = path.replace("joypad", "steam")
match path.substr(path.find("/") + 1):
"r_stick_click":
return path.replace("/r_stick_click", "/right_track_center")
"select":
return path.replace("/select", "/back")
"home":
return path.replace("/home", "/system")
"dpad":
return path.replace("/dpad", "/left_track")
"dpad_up":
return path.replace("/dpad_up", "/left_track_up")
"dpad_down":
return path.replace("/dpad_down", "/left_track_down")
"dpad_left":
return path.replace("/dpad_left", "/left_track_left")
"dpad_right":
return path.replace("/dpad_right", "/left_track_right")
"l_stick":
return path.replace("/l_stick", "/stick")
"r_stick":
return path.replace("/r_stick", "/right_track")
_:
return path
func _convert_joypad_to_switch(path: String):
path = path.replace("joypad", "switch")
match path.substr(path.find("/") + 1):
"a":
return path.replace("/a", "/b")
"b":
return path.replace("/b", "/a")
"x":
return path.replace("/x", "/y")
"y":
return path.replace("/y", "/x")
"lb":
return path.replace("/lb", "/l")
"rb":
return path.replace("/rb", "/r")
"lt":
return path.replace("/lt", "/zl")
"rt":
return path.replace("/rt", "/zr")
"select":
return path.replace("/select", "/minus")
"start":
return path.replace("/start", "/plus")
"share":
return path.replace("/share", "/square")
_:
return path
func _convert_joypad_to_joycon(path: String):
path = _convert_joypad_to_switch(path)
match path.substr(path.find("/") + 1):
"dpad_up":
return path.replace("/dpad_up", "/up")
"dpad_down":
return path.replace("/dpad_down", "/down")
"dpad_left":
return path.replace("/dpad_left", "/left")
"dpad_right":
return path.replace("/dpad_right", "/right")
_:
return path
func _convert_joypad_to_xbox360(path: String):
path = path.replace("joypad", "xbox360")
match path.substr(path.find("/") + 1):
"select":
return path.replace("/select", "/back")
_:
return path
func _convert_joypad_to_xbox_modern(path: String):
match path.substr(path.find("/") + 1):
"select":
return path.replace("/select", "/view")
"start":
return path.replace("/start", "/menu")
_:
return path
func _convert_joypad_to_xboxone(path: String):
return _convert_joypad_to_xbox_modern(path.replace("joypad", "xboxone"))
func _convert_joypad_to_xboxseries(path: String):
return _convert_joypad_to_xbox_modern(path.replace("joypad", "xboxseries"))
func _convert_joypad_to_steamdeck(path: String):
path = path.replace("joypad", "steamdeck")
match path.substr(path.find("/") + 1):
"lb":
return path.replace("/lb", "/l1")
"rb":
return path.replace("/rb", "/r1")
"lt":
return path.replace("/lt", "/l2")
"rt":
return path.replace("/rt", "/r2")
"select":
return path.replace("/select", "/inventory")
"start":
return path.replace("/start", "/menu")
"home":
return path.replace("/home", "/steam")
"share":
return path.replace("/share", "/dots")
_:
return path
func _convert_joypad_to_ouya(path: String):
path = path.replace("joypad", "ouya")
match path.substr(path.find("/") + 1):
"a":
return path.replace("/a", "/o")
"x":
return path.replace("/x", "/u")
"b":
return path.replace("/b", "/a")
"lb":
return path.replace("/lb", "/l1")
"rb":
return path.replace("/rb", "/r1")
"lt":
return path.replace("/lt", "/l2")
"rt":
return path.replace("/rt", "/r2")
"start":
return path.replace("/start", "/menu")
"share":
return path.replace("/share", "/microphone")
_:
return path

View file

@ -0,0 +1 @@
uid://b1b43sl3ihyuu

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b5j0idk4yjkkj"
path="res://.godot/imported/disconnected.png-459773ea7f2a3f5eca9fe5104acb9105.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/disconnected.png"
dest_files=["res://.godot/imported/disconnected.png-459773ea7f2a3f5eca9fe5104acb9105.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhwug5n7wvn8b"
path="res://.godot/imported/0.png-5e4ef89ebfb88cf2281fb8519eae8326.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/0.png"
dest_files=["res://.godot/imported/0.png-5e4ef89ebfb88cf2281fb8519eae8326.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cyvt6g1pkcqfo"
path="res://.godot/imported/1.png-5e93042ff4733b49c5848a419f211dc0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/1.png"
dest_files=["res://.godot/imported/1.png-5e93042ff4733b49c5848a419f211dc0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cp0j8cw8o6wvu"
path="res://.godot/imported/2.png-cc45af4ba1a14d5c701d7eaf772cb60e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/2.png"
dest_files=["res://.godot/imported/2.png-cc45af4ba1a14d5c701d7eaf772cb60e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://tljp3e67878n"
path="res://.godot/imported/3.png-a28e3d1bcdb601b911e3d5e9aaaece29.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/3.png"
dest_files=["res://.godot/imported/3.png-a28e3d1bcdb601b911e3d5e9aaaece29.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dvv0nf2te2dy8"
path="res://.godot/imported/4.png-d6e77f4e27328a413d34506751d7e7d8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/4.png"
dest_files=["res://.godot/imported/4.png-d6e77f4e27328a413d34506751d7e7d8.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://co1b5kuqpipbi"
path="res://.godot/imported/5.png-e3a211f712f0ba23f0383e633d91b292.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/5.png"
dest_files=["res://.godot/imported/5.png-e3a211f712f0ba23f0383e633d91b292.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b2mcylnx72rnc"
path="res://.godot/imported/6.png-c94a4fdfe4780a6cd266a954fce863aa.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/6.png"
dest_files=["res://.godot/imported/6.png-c94a4fdfe4780a6cd266a954fce863aa.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://346orodxqrwr"
path="res://.godot/imported/7.png-2aed855c8db8718bbf613d3fe15e397f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/7.png"
dest_files=["res://.godot/imported/7.png-2aed855c8db8718bbf613d3fe15e397f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bb0namehypd0v"
path="res://.godot/imported/8.png-7347a4f63d0d4bf8e342c042e8a47b6a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/8.png"
dest_files=["res://.godot/imported/8.png-7347a4f63d0d4bf8e342c042e8a47b6a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b7hs1r61dhf8f"
path="res://.godot/imported/9.png-92a5ba8724ec75cb0650a7e43ee7de1a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/9.png"
dest_files=["res://.godot/imported/9.png-92a5ba8724ec75cb0650a7e43ee7de1a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bptg6u6b4y5no"
path="res://.godot/imported/a.png-02614b596e2702a221a87d93abcfaa61.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/a.png"
dest_files=["res://.godot/imported/a.png-02614b596e2702a221a87d93abcfaa61.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cpld7e28w4q1e"
path="res://.godot/imported/alt.png-2955b920d549ecae6d20f5b9d8b28316.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/alt.png"
dest_files=["res://.godot/imported/alt.png-2955b920d549ecae6d20f5b9d8b28316.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://8hets451bgxx"
path="res://.godot/imported/apostrophe.png-8f8272980f0f51de5195fea6a914a748.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/apostrophe.png"
dest_files=["res://.godot/imported/apostrophe.png-8f8272980f0f51de5195fea6a914a748.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cge2w6yy0r2cx"
path="res://.godot/imported/arrow_down.png-5893b4e3a78dea022e4220c8b377b562.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/arrow_down.png"
dest_files=["res://.godot/imported/arrow_down.png-5893b4e3a78dea022e4220c8b377b562.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://puc614rf26im"
path="res://.godot/imported/arrow_left.png-47644a17d01cec89c19b183ed0ee3e4f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/arrow_left.png"
dest_files=["res://.godot/imported/arrow_left.png-47644a17d01cec89c19b183ed0ee3e4f.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bbjc54bmpv3f8"
path="res://.godot/imported/arrow_right.png-d9645066e53f8382133c3d6066489082.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/arrow_right.png"
dest_files=["res://.godot/imported/arrow_right.png-d9645066e53f8382133c3d6066489082.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d04bqc5v3befo"
path="res://.godot/imported/arrow_up.png-332906f7ec320f7aacf747e92daffc49.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/arrow_up.png"
dest_files=["res://.godot/imported/arrow_up.png-332906f7ec320f7aacf747e92daffc49.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://crg486276l0ie"
path="res://.godot/imported/asterisk.png-f83bdb0b06735716dc152cef5ad1a65a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/asterisk.png"
dest_files=["res://.godot/imported/asterisk.png-f83bdb0b06735716dc152cef5ad1a65a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://canr2drixxw4k"
path="res://.godot/imported/b.png-85e60076ce4df311fd6ce062c3953570.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/b.png"
dest_files=["res://.godot/imported/b.png-85e60076ce4df311fd6ce062c3953570.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://fm4t6x1nefje"
path="res://.godot/imported/backspace.png-ca81128ca83f7830c8e33092a92b27bf.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/backspace.png"
dest_files=["res://.godot/imported/backspace.png-ca81128ca83f7830c8e33092a92b27bf.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://rhv2hov7acmp"
path="res://.godot/imported/backspace_alt.png-bc1abf5cd15987380ececb7b4192e96e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/backspace_alt.png"
dest_files=["res://.godot/imported/backspace_alt.png-bc1abf5cd15987380ececb7b4192e96e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dlknwm7g0tm3s"
path="res://.godot/imported/backtick.png-7eaa9a9989e965a67c1aedce73c9bf10.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/backtick.png"
dest_files=["res://.godot/imported/backtick.png-7eaa9a9989e965a67c1aedce73c9bf10.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cnk0mxv25m1bg"
path="res://.godot/imported/bracket_left.png-578afec4dd6c472e6a94a57c46997f4d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/bracket_left.png"
dest_files=["res://.godot/imported/bracket_left.png-578afec4dd6c472e6a94a57c46997f4d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cg2bqitp08keh"
path="res://.godot/imported/bracket_right.png-ba5f88773753e95ae7dc9570a2aff676.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/bracket_right.png"
dest_files=["res://.godot/imported/bracket_right.png-ba5f88773753e95ae7dc9570a2aff676.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dvki5kbcq7qow"
path="res://.godot/imported/c.png-60bc13862a491d6dad69b4db7006689e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/c.png"
dest_files=["res://.godot/imported/c.png-60bc13862a491d6dad69b4db7006689e.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bmu1dyma2ia1w"
path="res://.godot/imported/caps_lock.png-68be22558ed98886d7f0c42175a4f042.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/caps_lock.png"
dest_files=["res://.godot/imported/caps_lock.png-68be22558ed98886d7f0c42175a4f042.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cvdspc7muffjb"
path="res://.godot/imported/comma.png-c6a5b4ddb60c3aa4cfc77e26999940ed.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/comma.png"
dest_files=["res://.godot/imported/comma.png-c6a5b4ddb60c3aa4cfc77e26999940ed.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c75c1nu5vft30"
path="res://.godot/imported/command.png-64157e5f681303ae47d5fdbb6501706d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/command.png"
dest_files=["res://.godot/imported/command.png-64157e5f681303ae47d5fdbb6501706d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dxcfr4bhfw4lq"
path="res://.godot/imported/ctrl.png-482169e05fd7989d866aa04e18ed3455.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/ctrl.png"
dest_files=["res://.godot/imported/ctrl.png-482169e05fd7989d866aa04e18ed3455.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dlwamiuq1f5t6"
path="res://.godot/imported/d.png-b7721e67decc380fd57e07ee56e53953.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/d.png"
dest_files=["res://.godot/imported/d.png-b7721e67decc380fd57e07ee56e53953.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dp71lwv4vjptf"
path="res://.godot/imported/del.png-8ab1be2a4136e8f1ae7ec54f3a75f012.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/del.png"
dest_files=["res://.godot/imported/del.png-8ab1be2a4136e8f1ae7ec54f3a75f012.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://xe4n818le3p8"
path="res://.godot/imported/e.png-7ec0ba2ffb631b8cc6de42153f818779.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/e.png"
dest_files=["res://.godot/imported/e.png-7ec0ba2ffb631b8cc6de42153f818779.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dd57lxd8nftr4"
path="res://.godot/imported/end.png-19998f1c73319c0913db009ea41299f1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/end.png"
dest_files=["res://.godot/imported/end.png-19998f1c73319c0913db009ea41299f1.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dtgju2qbvxhqp"
path="res://.godot/imported/enter.png-d374047b990a0250a56e873b383a8b15.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/enter.png"
dest_files=["res://.godot/imported/enter.png-d374047b990a0250a56e873b383a8b15.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bp58drjdgvxsi"
path="res://.godot/imported/enter_alt.png-15ea435f9aa8699e8752649d5707d3f9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/enter_alt.png"
dest_files=["res://.godot/imported/enter_alt.png-15ea435f9aa8699e8752649d5707d3f9.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c5bw0xq3n6elx"
path="res://.godot/imported/enter_tall.png-9ea4821e424a6eb74b209466a47a0362.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/enter_tall.png"
dest_files=["res://.godot/imported/enter_tall.png-9ea4821e424a6eb74b209466a47a0362.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://mkessp4iud6i"
path="res://.godot/imported/equals.png-a0481e5eb9f7e8a2bd77af0d53ce5458.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/equals.png"
dest_files=["res://.godot/imported/equals.png-a0481e5eb9f7e8a2bd77af0d53ce5458.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cnghdqiitl0fu"
path="res://.godot/imported/esc.png-4b899d8648d525a54c45ed98a86ba3b4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/esc.png"
dest_files=["res://.godot/imported/esc.png-4b899d8648d525a54c45ed98a86ba3b4.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://broeuieppu0ni"
path="res://.godot/imported/f.png-4d9e36eeb537558291e4f3b623effc03.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/f.png"
dest_files=["res://.godot/imported/f.png-4d9e36eeb537558291e4f3b623effc03.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b8no45t86rrn6"
path="res://.godot/imported/f1.png-8f613f4af184fa81387a386622247ed5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/f1.png"
dest_files=["res://.godot/imported/f1.png-8f613f4af184fa81387a386622247ed5.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b76mxxjlj888w"
path="res://.godot/imported/f10.png-b1122098f3284856b04da935979c6ee0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/f10.png"
dest_files=["res://.godot/imported/f10.png-b1122098f3284856b04da935979c6ee0.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ddrasm5hfo84n"
path="res://.godot/imported/f11.png-4f8e9e1e7a5b11b030ecefea00294062.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/f11.png"
dest_files=["res://.godot/imported/f11.png-4f8e9e1e7a5b11b030ecefea00294062.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://x4212bmj350w"
path="res://.godot/imported/f12.png-bcb2c9ea989874bc6203645641457c2a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/f12.png"
dest_files=["res://.godot/imported/f12.png-bcb2c9ea989874bc6203645641457c2a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cebpb6c42ooem"
path="res://.godot/imported/f2.png-853f8d196971146dfe734d15d6a82681.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/f2.png"
dest_files=["res://.godot/imported/f2.png-853f8d196971146dfe734d15d6a82681.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://utdnqoybksrx"
path="res://.godot/imported/f3.png-affa1c0616438ee1071023d1606aafe9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/controller_icons/assets/key/f3.png"
dest_files=["res://.godot/imported/f3.png-affa1c0616438ee1071023d1606aafe9.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Some files were not shown because too many files have changed in this diff Show more