fix clam surface spawn validation
This commit is contained in:
parent
135fd9110f
commit
046f5e0fdb
5 changed files with 208 additions and 27 deletions
|
|
@ -14,11 +14,11 @@ const Gatherables: GatherableCatalog = preload(
|
|||
class PrimaryTerrainProvider:
|
||||
extends Node3D
|
||||
|
||||
var primary_mesh: MeshInstance3D
|
||||
var primary_meshes: Array[MeshInstance3D] = []
|
||||
|
||||
|
||||
func get_primary_terrain_meshes() -> Array[MeshInstance3D]:
|
||||
return [primary_mesh] if primary_mesh != null else []
|
||||
return primary_meshes
|
||||
|
||||
|
||||
func _initialize() -> void:
|
||||
|
|
@ -98,9 +98,17 @@ func _validate_primary_terrain_provider() -> void:
|
|||
var provider := PrimaryTerrainProvider.new()
|
||||
provider.name = "Provider"
|
||||
fixture.add_child(provider)
|
||||
provider.primary_mesh = _flat_sand_triangle(0.0)
|
||||
provider.add_child(provider.primary_mesh)
|
||||
var buried_base := _flat_sand_triangle(10.0)
|
||||
var clear_sand := _flat_surface_triangle(0.0, 0.0, &"sand")
|
||||
var covered_sand := _flat_surface_triangle(10.0, 0.0, &"sand")
|
||||
var covering_grass := _flat_surface_triangle(10.0, 0.01, &"grass_lite")
|
||||
for mesh_instance: MeshInstance3D in [
|
||||
clear_sand,
|
||||
covered_sand,
|
||||
covering_grass,
|
||||
]:
|
||||
provider.add_child(mesh_instance)
|
||||
provider.primary_meshes.append(mesh_instance)
|
||||
var buried_base := _flat_surface_triangle(20.0, 0.0, &"sand")
|
||||
buried_base.name = "BuriedSandBase"
|
||||
provider.add_child(buried_base)
|
||||
var area := DiggableArea3D.new()
|
||||
|
|
@ -111,28 +119,34 @@ func _validate_primary_terrain_provider() -> void:
|
|||
area.generation_bounds = Rect2(-20.0, -20.0, 40.0, 40.0)
|
||||
fixture.add_child(area)
|
||||
var triangles := area.get_surface_triangles()
|
||||
assert(triangles.size() == 1)
|
||||
var center := (triangles[0][0] + triangles[0][1] + triangles[0][2]) / 3.0
|
||||
assert(center.x < 2.0)
|
||||
assert(triangles.size() == 2)
|
||||
var clear_center := Vector3(1.0 / 3.0, 0.0, 1.0 / 3.0)
|
||||
var covered_center := Vector3(10.0 + 1.0 / 3.0, 0.0, 1.0 / 3.0)
|
||||
assert(area.is_surface_point_valid(clear_center))
|
||||
assert(not area.is_surface_point_valid(covered_center))
|
||||
fixture.free()
|
||||
|
||||
|
||||
func _flat_sand_triangle(x_offset: float) -> MeshInstance3D:
|
||||
func _flat_surface_triangle(
|
||||
x_offset: float,
|
||||
height: float,
|
||||
material_name: StringName,
|
||||
) -> MeshInstance3D:
|
||||
var arrays: Array = []
|
||||
arrays.resize(Mesh.ARRAY_MAX)
|
||||
arrays[Mesh.ARRAY_VERTEX] = PackedVector3Array([
|
||||
Vector3(x_offset, 0.0, 0.0),
|
||||
Vector3(x_offset, 0.0, 1.0),
|
||||
Vector3(x_offset + 1.0, 0.0, 0.0),
|
||||
Vector3(x_offset, height, 0.0),
|
||||
Vector3(x_offset, height, 1.0),
|
||||
Vector3(x_offset + 1.0, height, 0.0),
|
||||
])
|
||||
arrays[Mesh.ARRAY_INDEX] = PackedInt32Array([0, 1, 2])
|
||||
var mesh := ArrayMesh.new()
|
||||
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
|
||||
var material := StandardMaterial3D.new()
|
||||
material.resource_name = "sand"
|
||||
material.resource_name = str(material_name)
|
||||
mesh.surface_set_material(0, material)
|
||||
var mesh_instance := MeshInstance3D.new()
|
||||
mesh_instance.name = "PrimarySand"
|
||||
mesh_instance.name = "Primary%s" % str(material_name).capitalize()
|
||||
mesh_instance.mesh = mesh
|
||||
return mesh_instance
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue