Files
Fighting_Rthythm_game/tests/test_player_scale.gd
2026-07-02 05:46:33 -07:00

72 lines
2.7 KiB
GDScript

extends SceneTree
var failures: Array[String] = []
const PLAYER_SPRITE_ANCHOR := Vector2(-40, -48)
const WARRIOR_ANIMATIONS := [
"warrior_idle",
"warrior_w",
"warrior_wa",
"warrior_s",
"warrior_a",
"warrior_aa",
"warrior_aaa",
"warrior_charge_intro",
"warrior_charge_loop",
"warrior_charge_release",
"warrior_s_projectile",
"warrior_a_space_space",
"warrior_a_space",
]
func _init() -> void:
var scene: PackedScene = load("res://scenes/characters/player.tscn")
if scene == null:
push_error("Could not load player.tscn")
quit(1)
return
var player: Node = scene.instantiate()
var sprite: Sprite2D = player.get_node("CharacterSprite") as Sprite2D
var collision: CollisionShape2D = player.get_node("CollisionShape2D") as CollisionShape2D
var camera: Camera2D = player.get_node("Camera2D") as Camera2D
var animation_player: AnimationPlayer = player.get_node("AnimationPlayer") as AnimationPlayer
_expect_vector((player as Node2D).scale, Vector2(4, 4), "Player root scale")
_expect_vector(sprite.scale, Vector2.ONE, "CharacterSprite local scale should keep anchor")
_expect_vector(sprite.offset, PLAYER_SPRITE_ANCHOR, "CharacterSprite visible foot offset")
_expect_vector(collision.scale, Vector2.ONE, "CollisionShape2D local scale should keep anchor")
_expect_vector(collision.position, Vector2(0, -18), "CollisionShape2D local position should keep anchor")
_expect_vector(camera.position, Vector2(0, -37.5), "Camera2D position should compensate player scale")
_expect_vector(camera.scale, Vector2(0.25, 0.25), "Camera2D scale should compensate player scale")
for animation_name: String in WARRIOR_ANIMATIONS:
_expect_animation_offset(animation_player, animation_name, PLAYER_SPRITE_ANCHOR)
player.free()
if failures.is_empty():
print("PASS player scale")
quit(0)
else:
for failure: String in failures:
push_error(failure)
quit(1)
func _expect_vector(actual: Vector2, expected: Vector2, label: String) -> void:
if not actual.is_equal_approx(expected):
failures.append("%s: expected %s, got %s" % [label, expected, actual])
func _expect_animation_offset(animation_player: AnimationPlayer, animation_name: String, expected: Vector2) -> void:
var animation: Animation = animation_player.get_animation(animation_name)
if animation == null:
failures.append("Missing animation: %s" % animation_name)
return
for track_index: int in range(animation.get_track_count()):
if animation.track_get_path(track_index) == NodePath("CharacterSprite:offset"):
var actual: Vector2 = animation.track_get_key_value(track_index, 0)
_expect_vector(actual, expected, "%s CharacterSprite offset" % animation_name)
return
failures.append("Missing CharacterSprite offset track: %s" % animation_name)