extends SceneTree const REGION := preload("res://world/regions/starter_island_region.tscn") func _initialize() -> void: call_deferred("_run") func _run() -> void: var region := REGION.instantiate() root.add_child(region) await process_frame var terrain := region.get_node( "Terrain/Visual/starter_island" ) as MeshInstance3D assert(terrain != null) assert(terrain.mesh.get_surface_count() == 5) assert(terrain.mesh.surface_get_name(0) == "grass_lite") assert(terrain.mesh.surface_get_name(1) == "dirt") assert(terrain.mesh.surface_get_name(2) == "sand") assert(terrain.mesh.surface_get_name(3) == "cliff_wall") assert(terrain.mesh.surface_get_name(4) == "dirt_wall") _validate_projected_material(terrain.get_surface_override_material(0)) _validate_projected_material(terrain.get_surface_override_material(2)) for surface: int in [1, 3, 4]: assert(terrain.get_surface_override_material(surface) == null) assert(terrain.mesh.surface_get_material(surface) is StandardMaterial3D) print("Terrain projection validation: PASS") region.free() quit() func _validate_projected_material(material: Material) -> void: assert(material is ShaderMaterial) var shader_material := material as ShaderMaterial assert( shader_material.shader.resource_path == "res://world/materials/terrain_surface_projection.gdshader" ) assert( is_equal_approx( float(shader_material.get_shader_parameter("tile_world_size")), 2.5 ) ) assert( is_equal_approx( float(shader_material.get_shader_parameter("blend_sharpness")), 6.0 ) ) assert( is_equal_approx( float(shader_material.get_shader_parameter("top_projection_bias")), 2.0 ) )