netfishing/tests/terrain_projection_validation.gd

60 lines
1.6 KiB
GDScript

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
)
)