HONK II has gamepad support, but I didn't manage to improve it during the jam. However, I have special input manager, which is very helpful when you need to switch between different input devices on the go and when some of your mechanics have different logic for different input method because of their specifics.
Make this script autoload and enjoy. Hope, this code will be helpful.
```
extends Node
enum InputDevice {
KEYBOARD,
GAMEPAD
}
const JOYDEADZONE : float = 0.3
const JOYID_DEFAULT : int = 0
var currentinputdevice : int = InputDevice.KEYBOARD
var joyidcurrent : int = JOYIDDEFAULT
func input(event: InputEvent) -> void:
if (event is InputEventKey or event is InputEventMouse or event is InputEventMouseMotion) and not iscurrentinputkeyboard():
currentinputdevice = InputDevice.KEYBOARD
Input.setmousemode(Input.MOUSEMODEVISIBLE)
Events.emitsignal("inputdevicechanged", currentinput_device)
return
if (event is InputEventJoypadButton or event is InputEventJoypadMotion) and not is_current_input_gamepad():
if event is InputEventJoypadMotion and (get_analog_right_direction(event.device) != Vector2.ZERO or get_analog_left_direction(event.device) != Vector2.ZERO):
return
joy_id_current = event.device
current_input_device = InputDevice.GAMEPAD
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
Events.emit_signal("input_device_changed", current_input_device)
return
static func getjoyanalogdirection(joyindex: int, axisx: int, axisy: int) -> Vector2:
if joyindex < 0:
pusherror("Gamepad with index %s not found" % joy_index)
return Vector2.ZERO
var joy_x = Input.get_joy_axis(joy_index, axis_x)
var joy_y = Input.get_joy_axis(joy_index, axis_y)
var joy_direction = Vector2(joy_x, joy_y)
if joy_direction.length() <= JOY_DEADZONE:
joy_direction = Vector2.ZERO
return joy_direction
static func getanalogrightdirection(joyindex: int = JOYIDDEFAULT) -> Vector2:
return getjoyanalogdirection(joyindex, JOYANALOGRX, JOYANALOGRY)
static func getanalogleftdirection(joyindex: int = JOYIDDEFAULT) -> Vector2:
return getjoyanalogdirection(joyindex, JOYANALOGLX, JOYANALOGLY)
func iscurrentinputkeyboard() -> bool:
return currentinput_device == InputDevice.KEYBOARD
func iscurrentinputgamepad() -> bool:
return currentinput_device == InputDevice.GAMEPAD
```