43 lines
1.0 KiB
GDScript
43 lines
1.0 KiB
GDScript
class_name TerrainGeneration
|
|
extends Node
|
|
|
|
var mesh : MeshInstance3D
|
|
var planet_radius : float = 1
|
|
|
|
@export var noise : FastNoiseLite
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready():
|
|
generate()
|
|
|
|
func generate():
|
|
var sphere_mesh = SphereMesh.new()
|
|
sphere_mesh.material = preload("res://ProceduralGeneration/Materials/terrain.tres")
|
|
|
|
|
|
var surface = SurfaceTool.new()
|
|
var data = MeshDataTool.new()
|
|
surface.create_from(sphere_mesh, 0)
|
|
|
|
var plane_array = surface.commit()
|
|
data.create_from_surface(plane_array, 0)
|
|
|
|
for i in range(data.get_vertex_count()):
|
|
var vert = data.get_vertex(i)
|
|
data.set_vertex(i, vert)
|
|
|
|
plane_array.clear_surfaces()
|
|
data.commit_to_surface(plane_array)
|
|
|
|
surface.begin(Mesh.PRIMITIVE_TRIANGLES)
|
|
surface.create_from(plane_array, 0)
|
|
surface.generate_normals()
|
|
|
|
mesh = MeshInstance3D.new()
|
|
mesh.mesh = surface.commit()
|
|
mesh.create_trimesh_collision()
|
|
mesh.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
|
|
|
mesh.add_to_group("NavSource")
|
|
add_child(mesh)
|