Skip to content

Commit 6633d2c

Browse files
author
Joshua
committed
Validate joy axis binding axis parameter
1 parent 45a6519 commit 6633d2c

2 files changed

Lines changed: 32 additions & 2 deletions

File tree

plugin/addons/godot_ai/handlers/input_handler.gd

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,30 @@ func _create_event(event_type: String, params: Dictionary):
195195
ev.button_index = int(params.get("button", 0))
196196
return ev
197197
"joy_axis":
198-
if not params.has("axis"):
198+
var axis_param = params.get("axis", null)
199+
if axis_param == null:
199200
return ErrorCodes.make(ErrorCodes.MISSING_REQUIRED_PARAM,
200201
"event_type='joy_axis' requires axis (JoyAxis index, e.g. 0=left stick X, 1=left stick Y).")
202+
var axis: int
203+
match typeof(axis_param):
204+
TYPE_INT:
205+
axis = axis_param
206+
TYPE_FLOAT:
207+
if axis_param != floor(axis_param):
208+
return ErrorCodes.make(ErrorCodes.VALUE_OUT_OF_RANGE,
209+
"joy_axis axis must be an integer JoyAxis index (got %s)." % str(axis_param))
210+
axis = int(axis_param)
211+
TYPE_STRING:
212+
var axis_text := str(axis_param)
213+
if not axis_text.is_valid_int():
214+
return ErrorCodes.make(ErrorCodes.WRONG_TYPE,
215+
"joy_axis axis must be an integer JoyAxis index (got '%s')." % axis_text)
216+
axis = int(axis_text)
217+
_:
218+
return ErrorCodes.make(ErrorCodes.WRONG_TYPE,
219+
"joy_axis axis must be an integer JoyAxis index (got %s)." % type_string(typeof(axis_param)))
201220
var ev := InputEventJoypadMotion.new()
202-
ev.axis = int(params.get("axis", 0))
221+
ev.axis = axis
203222
ev.axis_value = float(params.get("axis_value", 1.0))
204223
return ev
205224
return ErrorCodes.make(ErrorCodes.VALUE_OUT_OF_RANGE,

test_project/tests/test_input.gd

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,17 @@ func test_bind_event_joy_axis_missing_axis() -> void:
219219
_handler.remove_action({"action": TEST_ACTION})
220220

221221

222+
func test_bind_event_joy_axis_null_axis() -> void:
223+
_handler.add_action({"action": TEST_ACTION})
224+
var result := _handler.bind_event({
225+
"action": TEST_ACTION,
226+
"event_type": "joy_axis",
227+
"axis": null,
228+
})
229+
assert_is_error(result, ErrorCodes.MISSING_REQUIRED_PARAM)
230+
_handler.remove_action({"action": TEST_ACTION})
231+
232+
222233
func test_bind_event_unknown_action_message_suggests_add_action() -> void:
223234
## The error string should point the caller at the fix so they don't loop.
224235
var result := _handler.bind_event({

0 commit comments

Comments
 (0)