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: