172 lines
5.0 KiB
GDScript
172 lines
5.0 KiB
GDScript
@tool
|
|
extends GUIDEIconRenderer
|
|
|
|
@export var controller_name_matches:Array[String] = []
|
|
@export var a_button:Texture2D
|
|
@export var b_button:Texture2D
|
|
@export var x_button:Texture2D
|
|
@export var y_button:Texture2D
|
|
@export var left_stick:Texture2D
|
|
@export var left_stick_click:Texture2D
|
|
@export var right_stick:Texture2D
|
|
@export var right_stick_click:Texture2D
|
|
@export var left_bumper:Texture2D
|
|
@export var right_bumper:Texture2D
|
|
@export var left_trigger:Texture2D
|
|
@export var right_trigger:Texture2D
|
|
@export var dpad_up:Texture2D
|
|
@export var dpad_left:Texture2D
|
|
@export var dpad_right:Texture2D
|
|
@export var dpad_down:Texture2D
|
|
@export var start:Texture2D
|
|
@export var misc1:Texture2D
|
|
@export var back:Texture2D
|
|
|
|
|
|
@onready var _a_button:TextureRect = %AButton
|
|
@onready var _b_button:TextureRect = %BButton
|
|
@onready var _x_button:TextureRect = %XButton
|
|
@onready var _y_button:TextureRect = %YButton
|
|
@onready var _left_stick:TextureRect = %LeftStick
|
|
@onready var _left_stick_click:TextureRect = %LeftStickClick
|
|
@onready var _right_stick:TextureRect = %RightStick
|
|
@onready var _right_stick_click:TextureRect = %RightStickClick
|
|
@onready var _left_bumper:Control = %LeftBumper
|
|
@onready var _right_bumper:Control = %RightBumper
|
|
@onready var _left_trigger:Control = %LeftTrigger
|
|
@onready var _right_trigger:TextureRect = %RightTrigger
|
|
@onready var _dpad_up:TextureRect = %DpadUp
|
|
@onready var _dpad_left:TextureRect = %DpadLeft
|
|
@onready var _dpad_right:TextureRect = %DpadRight
|
|
@onready var _dpad_down:TextureRect = %DpadDown
|
|
@onready var _start:TextureRect = %Start
|
|
@onready var _misc1:TextureRect = %Misc1
|
|
@onready var _back:TextureRect = %Back
|
|
@onready var _left_right:Control = %LeftRight
|
|
@onready var _up_down:Control = %UpDown
|
|
@onready var _controls:Control = %Controls
|
|
@onready var _directions:Control = %Directions
|
|
|
|
|
|
func _ready():
|
|
super()
|
|
_a_button.texture = a_button
|
|
_b_button.texture = b_button
|
|
_x_button.texture = x_button
|
|
_y_button.texture = y_button
|
|
_left_stick.texture = left_stick
|
|
_left_stick_click.texture = left_stick_click
|
|
_right_stick.texture = right_stick
|
|
_right_stick_click.texture = right_stick_click
|
|
_left_bumper.texture = left_bumper
|
|
_right_bumper.texture = right_bumper
|
|
_left_trigger.texture = left_trigger
|
|
_right_trigger.texture = right_trigger
|
|
_dpad_up.texture = dpad_up
|
|
_dpad_left.texture = dpad_left
|
|
_dpad_right.texture = dpad_right
|
|
_dpad_down.texture = dpad_down
|
|
_start.texture = start
|
|
_misc1.texture = misc1
|
|
_back.texture = back
|
|
|
|
func supports(input:GUIDEInput) -> bool:
|
|
var joy_name = GUIDEInputFormatter._joy_name_for_input(input)
|
|
if joy_name == "":
|
|
return false
|
|
|
|
# Look if the controller name matches one of the supported ones
|
|
var haystack = joy_name.to_lower()
|
|
for needle in controller_name_matches:
|
|
if haystack.contains(needle.to_lower()):
|
|
return true
|
|
|
|
return false
|
|
|
|
func render(input:GUIDEInput) -> void:
|
|
for control in _controls.get_children():
|
|
control.visible = false
|
|
for direction in _directions.get_children():
|
|
direction.visible = false
|
|
_directions.visible = false
|
|
|
|
|
|
if input is GUIDEInputJoyAxis1D:
|
|
match input.axis:
|
|
JOY_AXIS_LEFT_X:
|
|
_left_stick.visible = true
|
|
_show_left_right()
|
|
JOY_AXIS_LEFT_Y:
|
|
_left_stick.visible = true
|
|
_show_up_down()
|
|
JOY_AXIS_RIGHT_X:
|
|
_right_stick.visible = true
|
|
_show_left_right()
|
|
JOY_AXIS_RIGHT_Y:
|
|
_right_stick.visible = true
|
|
_show_up_down()
|
|
JOY_AXIS_TRIGGER_LEFT:
|
|
_left_trigger.visible = true
|
|
JOY_AXIS_TRIGGER_RIGHT:
|
|
_right_trigger.visible = true
|
|
|
|
if input is GUIDEInputJoyAxis2D:
|
|
# We assume that there is no input mixing horizontal and vertical
|
|
# from different sticks into a 2D axis as this would confuse the
|
|
# players.
|
|
match input.x:
|
|
JOY_AXIS_LEFT_X, JOY_AXIS_LEFT_Y:
|
|
_left_stick.visible = true
|
|
JOY_AXIS_RIGHT_X, JOY_AXIS_RIGHT_Y:
|
|
_right_stick.visible = true
|
|
|
|
if input is GUIDEInputJoyButton:
|
|
match input.button:
|
|
JOY_BUTTON_A:
|
|
_a_button.visible = true
|
|
JOY_BUTTON_B:
|
|
_b_button.visible = true
|
|
JOY_BUTTON_X:
|
|
_x_button.visible = true
|
|
JOY_BUTTON_Y:
|
|
_y_button.visible = true
|
|
JOY_BUTTON_DPAD_LEFT:
|
|
_dpad_left.visible = true
|
|
JOY_BUTTON_DPAD_RIGHT:
|
|
_dpad_right.visible = true
|
|
JOY_BUTTON_DPAD_UP:
|
|
_dpad_up.visible = true
|
|
JOY_BUTTON_DPAD_DOWN:
|
|
_dpad_down.visible = true
|
|
JOY_BUTTON_LEFT_SHOULDER:
|
|
_left_bumper.visible = true
|
|
JOY_BUTTON_RIGHT_SHOULDER:
|
|
_right_bumper.visible = true
|
|
JOY_BUTTON_LEFT_STICK:
|
|
_left_stick_click.visible = true
|
|
JOY_BUTTON_RIGHT_STICK:
|
|
_right_stick_click.visible = true
|
|
JOY_BUTTON_RIGHT_STICK:
|
|
_right_stick_click.visible = true
|
|
JOY_BUTTON_START:
|
|
_start.visible = true
|
|
JOY_BUTTON_BACK:
|
|
_back.visible = true
|
|
JOY_BUTTON_MISC1:
|
|
_misc1.visible = true
|
|
|
|
call("queue_sort")
|
|
|
|
|
|
func _show_left_right():
|
|
_directions.visible = true
|
|
_left_right.visible = true
|
|
|
|
func _show_up_down():
|
|
_directions.visible = true
|
|
_up_down.visible = true
|
|
|
|
|
|
func cache_key(input:GUIDEInput) -> String:
|
|
return "7581f483-bc68-411f-98ad-dc246fd2593a" + input.to_string() + GUIDEInputFormatter._joy_name_for_input(input)
|