Simple input manager for Godot

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 ```