diff --git a/scenes/worlds/test_level.tscn b/scenes/worlds/test_level.tscn index f9ab25b..2112bf9 100644 --- a/scenes/worlds/test_level.tscn +++ b/scenes/worlds/test_level.tscn @@ -1,7 +1,32 @@ -[gd_scene load_steps=2 format=3] +[gd_scene load_steps=9 format=3] [ext_resource type="PackedScene" path="res://scenes/player.tscn" id="1_player"] +[sub_resource type="BoxMesh" id="mesh_ground"] +size = Vector3(40, 1, 40) + +[sub_resource type="BoxMesh" id="mesh_box1"] +size = Vector3(1.5, 2.0, 1.5) + +[sub_resource type="CylinderMesh" id="mesh_cylinder"] +top_radius = 0.5 +bottom_radius = 0.5 +height = 2.0 + +[sub_resource type="SphereMesh" id="mesh_sphere"] +radius = 0.75 + +[sub_resource type="BoxMesh" id="mesh_box2"] +size = Vector3(1.0, 3.0, 1.0) + +[sub_resource type="BoxMesh" id="mesh_box3"] +size = Vector3(2.0, 1.0, 2.0) + +[sub_resource type="Environment" id="env_bg"] +background_mode = 1 +background_color = Color(0.4, 0.6, 0.9, 1) +ambient_light_energy = 0.6 + [node name="TestLevel" type="Node3D"] [node name="Ground" type="StaticBody3D" parent="."] @@ -46,31 +71,5 @@ environment = SubResource("env_bg") [node name="PlayerSpawn" type="Marker3D" parent="."] position = Vector3(0, 1.0, 0) -[node name="Player" type="CharacterBody3D" parent="."] +[node name="Player" parent="." instance=ExtResource("1_player")] position = Vector3(0, 1.0, 0) -script = ExtResource("1_player") - -[sub_resource type="BoxMesh" id="mesh_ground"] -size = Vector3(40, 1, 40) - -[sub_resource type="BoxMesh" id="mesh_box1"] -size = Vector3(1.5, 2.0, 1.5) - -[sub_resource type="CylinderMesh" id="mesh_cylinder"] -top_radius = 0.5 -bottom_radius = 0.5 -height = 2.0 - -[sub_resource type="SphereMesh" id="mesh_sphere"] -radius = 0.75 - -[sub_resource type="BoxMesh" id="mesh_box2"] -size = Vector3(1.0, 3.0, 1.0) - -[sub_resource type="BoxMesh" id="mesh_box3"] -size = Vector3(2.0, 1.0, 2.0) - -[sub_resource type="Environment" id="env_bg"] -background_mode = 1 -background_color = Color(0.4, 0.6, 0.9, 1) -ambient_light_energy = 0.6 diff --git a/scripts/smoke_test_player.gd b/scripts/smoke_test_player.gd index fc1c5e9..20826d0 100644 --- a/scripts/smoke_test_player.gd +++ b/scripts/smoke_test_player.gd @@ -12,34 +12,38 @@ var failed := 0 func _initialize() -> void: + print("SMOKE: starting player smoke test") _run() func _run() -> void: await process_frame + print("SMOKE: loading test level scene") # Load the test level scene (which now includes the player). var packed: PackedScene = load("res://scenes/worlds/test_level.tscn") var level: Node3D = packed.instantiate() root.add_child(level) - await process_frame + print("SMOKE: level instantiated, waiting for ready") + await level.ready + print("SMOKE: level ready") # 1. Verify the player node exists in the scene tree. - var player: CharacterBody3D = level.get_node("Player") as CharacterBody3D + var player := level.get_node("Player") _check("Player node exists in test level", player != null) _check("Player is a CharacterBody3D", player is CharacterBody3D) # 2. Verify the player has the expected child structure. - var collision: CollisionShape3D = player.get_node("CollisionShape3D") as CollisionShape3D + var collision := player.get_node("CollisionShape3D") _check("Player has CollisionShape3D", collision != null) _check("CollisionShape3D has a shape", collision.shape != null) - var mesh: MeshInstance3D = player.get_node("CapsuleMesh") as MeshInstance3D + var mesh := player.get_node("CapsuleMesh") _check("Player has CapsuleMesh", mesh != null) _check("CapsuleMesh has a mesh", mesh.mesh != null) # 3. Verify the player spawned at the PlayerSpawn marker position. - var spawn_marker: Marker3D = level.get_node("PlayerSpawn") as Marker3D + var spawn_marker: Marker3D = level.get_node("PlayerSpawn") _check("PlayerSpawn marker exists", spawn_marker != null) # The player's _ready() should have moved it to the spawn marker's @@ -50,7 +54,7 @@ func _run() -> void: player.global_position == expected_pos) # 4. Verify the player script class_name is correct. - var script: GDScript = player.get_script() as GDScript + var script := player.get_script() _check("Player has a script attached", script != null) _check("Player script is Player class", script is GDScript)