extends SceneTree var failures: Array[String] = [] func _init() -> void: _run.call_deferred() func _run() -> void: var scene: PackedScene = load("res://scenes/main/main.tscn") if scene == null: push_error("Could not load main.tscn") quit(1) return var main: Node = scene.instantiate() var initial_left_mover: Control = main.get_node("RhythmFeedback/RhythmTrack/LeftMover") var initial_right_mover: Control = main.get_node("RhythmFeedback/RhythmTrack/RightMover") var initial_center_base: Control = main.get_node("RhythmFeedback/RhythmTrack/CenterBase") var initial_center_flash: Control = main.get_node("RhythmFeedback/RhythmTrack/CenterFlash") var expected_left_start := _control_center(initial_left_mover) var expected_right_start := _control_center(initial_right_mover) var expected_track_center := _control_center(initial_center_base) var expected_mover_size := initial_left_mover.size var expected_center_flash_size := initial_center_flash.size root.add_child(main) await process_frame _expect_vector("left_mover_start", main.get("left_mover_start"), expected_left_start) _expect_vector("right_mover_start", main.get("right_mover_start"), expected_right_start) _expect_vector("track_center", main.get("track_center"), expected_track_center) _expect_vector("mover_size", main.get("mover_size"), expected_mover_size) _expect_vector("center_flash_size", main.get("center_flash_size"), expected_center_flash_size) main.free() if failures.is_empty(): print("PASS rhythm ui layout") quit(0) else: for failure: String in failures: push_error(failure) quit(1) func _control_center(control: Control) -> Vector2: return Vector2( (control.offset_left + control.offset_right) * 0.5, (control.offset_top + control.offset_bottom) * 0.5 ) func _expect_vector(label: String, actual: Variant, expected: Vector2) -> void: if not actual is Vector2: failures.append("%s should be cached as Vector2, got %s" % [label, typeof(actual)]) return if not (actual as Vector2).is_equal_approx(expected): failures.append("%s should match scene layout: expected %s got %s" % [label, expected, actual])