Refactor rhythm action architecture

This commit is contained in:
wxm
2026-07-02 09:47:52 -07:00
parent fc941cf08d
commit e62ed84518
124 changed files with 7516 additions and 2440 deletions

View File

@@ -8,34 +8,35 @@ func _init() -> void:
func _run() -> void:
var scene: PackedScene = load("res://scenes/main/main.tscn")
var scene: PackedScene = load("res://scenes/ui/rhythm_track.tscn")
if scene == null:
push_error("Could not load main.tscn")
push_error("Could not load rhythm_track.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)
var track := scene.instantiate() as Control
root.add_child(track)
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()
_expect_float(track.anchor_left, 0.5, "RhythmTrack should stay centered")
_expect_float(track.anchor_right, 0.5, "RhythmTrack should stay centered")
_expect_bool(track.has_node("JudgementLabel"), true, "RhythmTrack should own its judgement label")
track.free()
_finish()
func _expect_float(actual: float, expected: float, label: String) -> void:
if not is_equal_approx(actual, expected):
failures.append("%s: expected %.3f, got %.3f" % [label, expected, actual])
func _expect_bool(actual: bool, expected: bool, label: String) -> void:
if actual != expected:
failures.append("%s: expected %s, got %s" % [label, expected, actual])
func _finish() -> void:
if failures.is_empty():
print("PASS rhythm ui layout")
quit(0)
@@ -43,18 +44,3 @@ func _run() -> void:
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])