aboutsummaryrefslogtreecommitdiff
path: root/client/map/tiles/grass.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/map/tiles/grass.gd')
-rw-r--r--client/map/tiles/grass.gd22
1 files changed, 15 insertions, 7 deletions
diff --git a/client/map/tiles/grass.gd b/client/map/tiles/grass.gd
index 4bd3587c..446bea6b 100644
--- a/client/map/tiles/grass.gd
+++ b/client/map/tiles/grass.gd
@@ -16,8 +16,7 @@
class_name Grass
extends Tile
-const GRASS_SIDE: PackedScene = preload("res://map/tiles/grass_side.tscn")
-const GRASS_COUNT: int = 16
+const GRASS_MESH: Mesh = preload("res://map/tiles/grass_side.tres")
func _init(rename: String, _neighbors: Array):
super(rename, _neighbors)
@@ -25,11 +24,20 @@ func _init(rename: String, _neighbors: Array):
var random = RandomNumberGenerator.new()
random.seed = rename.hash()
- for _i in Global.get_setting("graphics.grass_amount"):
- var g: Node3D = GRASS_SIDE.instantiate()
- base_mesh.add_child(g)
- g.position = Vector3(random.randf_range(-.5, .5), 0, random.randf_range(-.5, .5))
- g.rotation = Vector3(0, random.randf_range(0, PI), 0)
+ var multimesh_instance := MultiMeshInstance3D.new()
+
+ var multimesh := MultiMesh.new()
+ multimesh.mesh = GRASS_MESH
+ multimesh.transform_format = MultiMesh.TRANSFORM_3D
+ multimesh.instance_count = Global.get_setting("graphics.grass_amount")
+
+ for i in multimesh.instance_count:
+ var origin := Vector3(random.randf_range(-.5, .5), 0.125, random.randf_range(-.5, .5))
+ var basis_ := Basis(Vector3(0, 1, 0), random.randf_range(0, PI)) * Basis(Vector3(1, 0, 0), PI/2) * 0.75
+ multimesh.set_instance_transform(i, Transform3D(basis_, origin))
+
+ base_mesh.add_child(multimesh_instance)
+ multimesh_instance.multimesh = multimesh
func get_base_mesh():
return preload("res://map/tiles/grass.tscn").instantiate()