2026-07-31 16:22:07 -04:00
|
|
|
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")
|
|
|
|
|
|
2026-08-04 22:34:52 -04:00
|
|
|
_validate_projected_material(
|
|
|
|
|
terrain.get_surface_override_material(0),
|
|
|
|
|
"res://art/exported/environment/textures/grass_lite.png"
|
|
|
|
|
)
|
|
|
|
|
_validate_projected_material(
|
|
|
|
|
terrain.get_surface_override_material(2),
|
|
|
|
|
"res://art/exported/environment/textures/sand.png"
|
|
|
|
|
)
|
2026-07-31 16:22:07 -04:00
|
|
|
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()
|
|
|
|
|
|
|
|
|
|
|
2026-08-04 22:34:52 -04:00
|
|
|
func _validate_projected_material(
|
|
|
|
|
material: Material,
|
|
|
|
|
expected_texture_path: String,
|
|
|
|
|
) -> void:
|
2026-07-31 16:22:07 -04:00
|
|
|
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
|
|
|
|
|
)
|
|
|
|
|
)
|
2026-08-04 22:34:52 -04:00
|
|
|
var texture: Texture2D = shader_material.get_shader_parameter(
|
|
|
|
|
"albedo_texture"
|
|
|
|
|
) as Texture2D
|
|
|
|
|
assert(texture != null)
|
|
|
|
|
assert(texture.resource_path == expected_texture_path)
|
|
|
|
|
var imported_image: Image = texture.get_image()
|
|
|
|
|
assert(imported_image != null)
|
|
|
|
|
assert(not imported_image.has_mipmaps())
|
|
|
|
|
assert(imported_image.get_format() == Image.FORMAT_RGBA8)
|