Add new test file for phase 19 scenery with unique identifier

This commit is contained in:
2026-10-17 12:53:38 -04:00
parent 36032ebb1e
commit a0510e6405
74 changed files with 40948 additions and 149 deletions
+146
View File
@@ -0,0 +1,146 @@
extends SceneTree
const SANDBOX_STAGE: PackedScene = preload("res://scenes/stage/sandbox_stage.tscn")
const PROP_EDITOR_SCENE: PackedScene = preload("res://scenes/editors/prop/prop_editor.tscn")
const STAGE_WALL_PANEL: Script = preload("res://scripts/stage/scenery/stage_wall_panel.gd")
const STAGE_SCENERY_ARTWORK: Script = preload("res://scripts/stage/scenery/stage_scenery_artwork.gd")
func _initialize() -> void:
call_deferred("_capture_scenes")
func _capture_scenes() -> void:
root.size = Vector2i(1280, 720)
var stage: SandboxStage = SANDBOX_STAGE.instantiate() as SandboxStage
root.add_child(stage)
await _wait_for_render_frames(3)
var loaded: bool = stage.call("_load_scene_from_path", "res://content/stages/starters/town_street.scene", false)
print("VISUAL town_street_loaded=", loaded)
stage.call("_on_grid_toggled", false)
await _wait_for_render_frames(4)
await _save_viewport_image("res://tests/phase19_visual_town_street.png")
loaded = stage.call("_load_scene_from_path", "res://content/stages/starters/living_room.scene", false)
print("VISUAL living_room_loaded=", loaded)
stage.call("_on_grid_toggled", false)
await _wait_for_render_frames(4)
await _save_viewport_image("res://tests/phase19_visual_living_room.png")
loaded = stage.call("_load_scene_from_path", "res://content/stages/starters/blank.scene", false)
print("VISUAL blank_loaded=", loaded)
stage.call("_on_grid_toggled", false)
await _wait_for_render_frames(2)
var world: Node2D = stage.get_node("World") as Node2D
var camera: Camera2D = stage.get_node("Camera2D") as Camera2D
camera.position = Vector2(0.0, -180.0)
camera.zoom = Vector2(0.72, 0.72)
var sky_view: StageSkyView = stage.get("_sky_view") as StageSkyView
sky_view.set_sky(&"sky_sunset")
var brick_wall: StageWallPanel = STAGE_WALL_PANEL.new() as StageWallPanel
brick_wall.position = Vector2(-430.0, -220.0)
brick_wall.configure(Vector2(390.0, 290.0), &"finish_wall_brick", Color.WHITE)
world.add_child(brick_wall)
var spawner: StageSpawner = stage.get("_spawner") as StageSpawner
var grass: TerrainBlock = spawner.spawn_terrain_asset("ground", Vector2(120.0, 18.0))
grass.set_finish(&"finish_ground_grass")
var tree: StageSceneryArtwork = STAGE_SCENERY_ARTWORK.new() as StageSceneryArtwork
tree.name = "ApprovedTreeArtwork"
tree.position = Vector2(-140.0, -150.0)
tree.display_name = "Tree"
tree.set_depth(&"near")
var tree_loaded: bool = tree.load_visual("res://content/props/art_tree-v2.prop")
world.add_child(tree)
var missing: StageSceneryArtwork = STAGE_SCENERY_ARTWORK.new() as StageSceneryArtwork
missing.name = "MissingArtworkExample"
missing.position = Vector2(100.0, -145.0)
missing.configure_missing("res://content/props/phase19_missing_art_demo.prop", "Tree", Rect2(Vector2(-52.0, -72.0), Vector2(104.0, 144.0)), &"near")
world.add_child(missing)
print("VISUAL approved_tree_loaded=", tree_loaded, " missing_marker=", missing.missing)
stage.call("_enter_scenery_edit_mode")
(stage.get("_selection") as StageSelection).select_only(missing)
stage.call("_refresh_scenery_inspector")
await _wait_for_render_frames(5)
await _save_viewport_image("res://tests/phase19_visual_finishes_and_repair.png")
var scenery_controller: StageSceneryController = stage.get("_scenery_controller") as StageSceneryController
if scenery_controller.begin_single_transform(missing, &"move", missing.global_position):
stage.call("_refresh_scenery_capture_bar")
await _wait_for_render_frames(3)
await _save_viewport_image("res://tests/phase19_visual_scenery_drag_cancel.png")
scenery_controller.cancel_single_transform()
stage.call("_refresh_scenery_capture_bar")
missing.queue_free()
camera.position = Vector2(0.0, -270.0)
tree.position = Vector2(-140.0, -95.0)
(stage.get("_selection") as StageSelection).select_only(tree)
stage.call("_refresh_scenery_inspector")
await _wait_for_render_frames(4)
await _save_viewport_image("res://tests/phase19_visual_scenery_selected_size.png")
var tree_bounds: Rect2 = tree.get_visual_world_bounds()
if scenery_controller.begin_single_transform(tree, &"resize", tree_bounds.position, tree_bounds.position):
stage.call("_refresh_scenery_capture_bar")
await _wait_for_render_frames(3)
await _save_viewport_image("res://tests/phase19_visual_scenery_resize_cancel.png")
scenery_controller.cancel_single_transform()
stage.call("_refresh_scenery_capture_bar")
var browser: StageAssetBrowser = stage.get("_asset_browser") as StageAssetBrowser
stage.call("_load_scene_from_path", "res://content/stages/starters/blank.scene", false)
(stage.get("_selection") as StageSelection).clear_selection()
stage.call("_exit_scenery_edit_mode")
stage.call("_on_grid_toggled", true)
scenery_controller.begin_wall(&"finish_wall_brick", Vector2(-180.0, -100.0))
await _wait_for_render_frames(3)
await _save_viewport_image("res://tests/phase19_visual_wall_panel_preview.png")
scenery_controller.exit_tool()
stage.call("_on_grid_toggled", false)
await _wait_for_render_frames(3)
var background_entries: Array[Dictionary] = browser.call("_scenery_background_entries") as Array[Dictionary]
var selector: AssetSelector = browser.get_selector()
selector.open("scenery", background_entries, "sky_sunset")
selector.call("_set_gallery_tab", "backgrounds")
await _wait_for_render_frames(4)
await _save_viewport_image("res://tests/phase19_visual_background_gallery.png")
stage.queue_free()
await process_frame
await process_frame
var prop_editor: PropEditor = PROP_EDITOR_SCENE.instantiate() as PropEditor
root.add_child(prop_editor)
await _wait_for_render_frames(3)
var prop_canvas: PropCanvas = prop_editor.get("_canvas") as PropCanvas
var fireplace_file: FileAccess = FileAccess.open("res://content/props/art_fireplace_mantel-v2.prop", FileAccess.READ)
if fireplace_file != null:
prop_editor.call("_apply_json_data", fireplace_file.get_as_text())
await _wait_for_render_frames(3)
prop_editor.call("_on_size_for_stage_pressed")
await _wait_for_render_frames(3)
await _save_viewport_image("res://tests/phase19_visual_size_for_stage_entry.png")
prop_editor.call("_finish_stage_size_preview", false)
prop_canvas.set_shape_data([{
"shape_type": "polygon",
"points": PackedVector2Array([Vector2(-50.0, -200.0), Vector2(50.0, -200.0), Vector2(50.0, 0.0), Vector2(-50.0, 0.0)]),
"fill_color": "#9D6A4A",
"outline_color": "#2D2532",
"outline_width": 4.0,
"closed": true,
}])
prop_editor.call("_on_size_for_stage_pressed")
prop_editor.call("_choose_stage_size", 1.0)
await _wait_for_render_frames(4)
await _save_viewport_image("res://tests/phase19_visual_size_for_stage.png")
prop_editor.queue_free()
await process_frame
quit(0)
func _wait_for_render_frames(count: int) -> void:
for _frame: int in count:
await process_frame
await RenderingServer.frame_post_draw
func _save_viewport_image(path: String) -> void:
await RenderingServer.frame_post_draw
var image: Image = root.get_texture().get_image()
var error: Error = image.save_png(ProjectSettings.globalize_path(path))
print("VISUAL capture path=", path, " size=", image.get_size(), " error=", error)