netfishing/tests/terrain_projection_validation.gd

79 lines
2.1 KiB
GDScript3
Raw Normal View History

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)