diff --git a/world/Chunk.gd b/world/Chunk.gd index 3db65f7..1286ee7 100644 --- a/world/Chunk.gd +++ b/world/Chunk.gd @@ -12,8 +12,44 @@ func _init(x, z): self.z = z func _ready(): - generate_chunk() + # generate_chunk() + generate_grass() pass + +func generate_grass(): + var poisson_disc_sampling: PoissonDiscSampling = PoissonDiscSampling.new() + var rng := RandomNumberGenerator.new() + rng.randomize() + var coords = [] + for center in Global.terrain.get_chunk(Vector2(x, z)): + if ( + not center.get_data("mountain") + and not center.get_data("water") + and not center.get_data("coast") + ): + var points = poisson_disc_sampling.generate_points(0.1, center.polygon(), 2) + var points3d = [] + for point in points: + points3d.append(Vector3(point.x, center.get_elevation() * 120, point.y)) + coords += points3d + # var multimesh = MultiMesh.new() + var multimesh = MultiMesh.new() + multimesh.mesh = load("res://world/grass.obj") + multimesh.mesh.surface_set_material(0, load("res://world/materials/wind_grass.tres")) + multimesh.transform_format = MultiMesh.TRANSFORM_3D + multimesh.instance_count = coords.size() + for instance_index in multimesh.instance_count: + + var transform := Transform().rotated(Vector3.UP, rng.randf_range(-PI / 2, PI / 2)) + transform.origin = Vector3(coords[instance_index].x, coords[instance_index].y, coords[instance_index].z) +# transform.scaled(Vector3()) + + multimesh.set_instance_transform(instance_index, transform) + var multimesh_instance = MultiMeshInstance.new() + multimesh_instance.multimesh = multimesh + add_child(multimesh_instance) + pass + func generate_chunk(): var file = File.new() file.open("res://world/materials/materials.json", File.READ) diff --git a/world/MultiMeshInstance.gd b/world/MultiMeshInstance.gd index c6b5366..22f955d 100644 --- a/world/MultiMeshInstance.gd +++ b/world/MultiMeshInstance.gd @@ -3,6 +3,7 @@ extends MultiMeshInstance var extents = Vector2(10, 10) func _ready(): + return var poisson_disc_sampling: PoissonDiscSampling = PoissonDiscSampling.new() var rng := RandomNumberGenerator.new() rng.randomize() diff --git a/world/World3d.gd b/world/World3d.gd index 46590be..e784912 100644 --- a/world/World3d.gd +++ b/world/World3d.gd @@ -2,15 +2,15 @@ extends Spatial var rng = RandomNumberGenerator.new() var chunk_size = 32 -var chunk_amount = 16 +var chunk_amount = 1 var chunks = {} var unready_chunks = {} var thread func _ready(): - # add_world() + add_world() thread = Thread.new() - # add_trees() + add_trees() func add_world(): var terrain_mesh = TerrainMesh.new() diff --git a/world/game.tscn b/world/game.tscn index c1de306..c67c1ed 100644 --- a/world/game.tscn +++ b/world/game.tscn @@ -220,6 +220,11 @@ material_override = ExtResource( 6 ) multimesh = SubResource( 11 ) script = ExtResource( 8 ) +[node name="grass" type="MeshInstance" parent="World3d/MultiMeshInstance"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 16.969, 18.8547, 49.3429 ) +mesh = ExtResource( 7 ) +material/0 = ExtResource( 6 ) + [connection signal="map_clicked" from="UI/Map" to="World3d/CamBase/Camera" method="_on_Map_map_clicked"] [connection signal="camera_moved" from="World3d/CamBase/Camera" to="UI/Map/Cursor" method="_on_Camera_camera_moved"]