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()  |