diff options
Diffstat (limited to 'client/map/tiles/grass.gd')
-rw-r--r-- | client/map/tiles/grass.gd | 22 |
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() |