57 lines
2.4 KiB
GDScript
57 lines
2.4 KiB
GDScript
extends SceneTree
|
|
|
|
var failures: Array[String] = []
|
|
|
|
|
|
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, Vector2(-24, -40), "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")
|
|
_expect_animation_offset(animation_player, "idle", Vector2(-24, -40))
|
|
_expect_animation_offset(animation_player, "jump", Vector2(-24, -44))
|
|
_expect_animation_offset(animation_player, "挥砍", Vector2(-40, -48))
|
|
|
|
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)
|