Skip to content

Conversation

wjt
Copy link

@wjt wjt commented Oct 13, 2025

The docstring for last_known_joypad_device claims that its value is "" if no joypad is detected, but previously its value in this case was "generic", because it is defined to be the result of get_simplified_device_name() on the 0th joypad's name. If there is no joypad connected, Input.get_joy_name(0) returns "", but get_simplified_device_name() returns "generic" in the case where it can't figure out what a joypad is (such as when it is passed "").

When initialising the variable, check whether any joypads are connected, and special-case the default as "" if not. This matches how the default value of last_known_joypad_index below it is set.

The docstring for last_known_joypad_device claims that its value is ""
if no joypad is detected, but previously its value in this case was
"generic", because it is defined to be the result of
get_simplified_device_name() on the 0th joypad's name. If there is no
joypad connected, Input.get_joy_name(0) returns "", but
get_simplified_device_name() returns "generic" in the case where it
can't figure out what a joypad is (such as when it is passed "").

When initialising the variable, check whether any joypads are connected,
and special-case the default as "" if not. This matches how the default
value of last_known_joypad_index below it is set.
wjt added a commit to endlessm/threadbare that referenced this pull request Oct 13, 2025
In commit 0a547d0 I simplified the way
that our input hint components choose a default device: rather than
reimplementing Input Helper's device detection, we use a pair of
properties from the helper.

Unfortunately I picked the wrong ones: I used last_known_joypad_device
and last_known_joypad_index. As the name suggests, the
last_known_joypad_device will never be "keyboard". Its docstring claims
it will be "" if no gamepad is connected; in fact it is currently
"generic", which I submitted
nathanhoad/godot_input_helper#87 to fix.

As a result, if you have no gamepad connected, then gamepad hints will
always be shown.

Instead, use InputHelper.device and InputHelper.device_index, which are
the type and index of the last device that the player used to control
the game. Before any input events have been received, these default to
joypad 0 if there is a joypad connected, and "keyboard" / -1 if not.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant