extends SceneTree const DEFAULT_OUTPUT_PATH := "res://assets/mockups/the-tree-runtime-ui-v6-actors.png" func _initialize() -> void: call_deferred("_capture") func _capture() -> void: var capture_size := Vector2i( maxi(int(OS.get_environment("THE_TREE_CAPTURE_WIDTH")), 1440), maxi(int(OS.get_environment("THE_TREE_CAPTURE_HEIGHT")), 810) ) var output_path := OS.get_environment("THE_TREE_CAPTURE_PATH") if output_path.is_empty(): output_path = DEFAULT_OUTPUT_PATH var capture_viewport := SubViewport.new() capture_viewport.size = capture_size capture_viewport.size_2d_override = Vector2i(1440, 810) capture_viewport.size_2d_override_stretch = true capture_viewport.render_target_update_mode = SubViewport.UPDATE_ALWAYS root.add_child(capture_viewport) var clock := root.get_node("GameClock") var state := root.get_node("GameState") var runtime := root.get_node("SimulationRuntime") clock.reset(1, 6, 0) state.reset() runtime.initialize(clock, state, 424242) clock.set_paused(true) var main := load("res://scenes/main/main.tscn").instantiate() as Control capture_viewport.add_child(main) main.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) for frame: int in 8: await process_frame main.call("_hire_staff_candidate", &"staff_akane") main.call("_select_build_definition", &"reception") main.call("_on_map_cell_clicked", Vector3i(-6, 0, WorldService.LAYER_FRONT)) clock.advance_minutes(120) main.call("_clear_active_tool") var facilities: Array[Dictionary] = runtime.construction_service.get_facilities() if not facilities.is_empty(): main.call("_on_facility_selected", StringName(facilities[0].get(&"instance_id", &""))) for frame: int in 4: await process_frame var image := capture_viewport.get_texture().get_image() if image == null: push_error("Could not read the capture viewport texture.") quit(ERR_CANT_ACQUIRE_RESOURCE) return var result := image.save_png(output_path) if result != OK: push_error("Could not save UI capture: %s" % error_string(result)) quit(result)