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 <cursoragent@cursor.com>
This commit is contained in:
parent
84b1a89f75
commit
9107dea6ff
@ -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:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user