From 9107dea6fff10fac00958e4eba7ad57b4d922eea Mon Sep 17 00:00:00 2001 From: simon Date: Thu, 28 May 2026 22:00:55 +0200 Subject: [PATCH] Fix WebSocket accel parsing for missing or nested JSON fields. Avoid crashes when x/y/z are absent or nested under accel/data keys. Co-authored-by: Cursor --- scripts/main.gd | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/scripts/main.gd b/scripts/main.gd index 02d95ac..1f2db2d 100644 --- a/scripts/main.gd +++ b/scripts/main.gd @@ -173,7 +173,42 @@ func _handle_accel_message(text: String) -> void: if data.get("type") != "accel" or not data.get("success", false): return - _accel = Vector3i(int(data["x"]), int(data["y"]), int(data["z"])) + var parsed: Variant = _parse_accel_vector(data) + if parsed == null: + return + _accel = parsed as Vector3i + + +func _parse_accel_vector(data: Dictionary) -> Variant: + var source: Variant = _accel_fields_dict(data) + if source == null: + return null + return Vector3i( + _to_int(source.get("x")), + _to_int(source.get("y")), + _to_int(source.get("z")) + ) + + +func _accel_fields_dict(data: Dictionary) -> Variant: + if data.has("x") and data.has("y") and data.has("z"): + return data + for key in ["accel", "values", "data", "payload"]: + var nested: Variant = data.get(key) + if nested is Dictionary and nested.has("x") and nested.has("y") and nested.has("z"): + return nested + return null + + +func _to_int(value: Variant) -> int: + match typeof(value): + TYPE_INT: + return value + TYPE_FLOAT: + return int(value) + TYPE_STRING: + return int(float(value)) + return 0 func _play_area() -> Rect2: