@tool
extends MultiMeshInstance3D

@export var mesh_volume: MeshInstance3D : # Trascina qui il tuo volume low poly
	set(val):
		mesh_volume = val
		generate_leaves()

@export var scale_multiplier: float = 1.5 # Per rendere i piani grandi come in foto

func generate_leaves():
	if not mesh_volume or not mesh_volume.mesh:
		return

	var mdt = MeshDataTool.new()
	mdt.create_from_surface(mesh_volume.mesh, 0)
	
	var face_count = mdt.get_face_count()
	
	# Inizializza il MultiMesh
	multimesh.instance_count = face_count
	
	for i in range(face_count):
		# 1. Trova il centro della faccia
		var v1 = mdt.get_vertex(mdt.get_face_vertex(i, 0))
		var v2 = mdt.get_vertex(mdt.get_face_vertex(i, 1))
		var v3 = mdt.get_vertex(mdt.get_face_vertex(i, 2))
		var center = (v1 + v2 + v3) / 3.0
		
		# 2. Ottieni la normale della faccia per orientare il piano
		var normal = mdt.get_face_normal(i)
		
		# 3. Crea la trasformazione
		# Usiamo 'look_at' per far sì che il piano sia parallelo alla faccia
		var pos = center
		var target = pos + normal
		var xform = Transform3D().looking_at(normal, Vector3.UP) 
		
		# Applichiamo posizione e scala
		xform.origin = pos
		xform = xform.scaled(Vector3.ONE * scale_multiplier)
		
		# 4. Applica al MultiMesh
		multimesh.set_instance_transform(i, xform)

	# Opzionale: nascondi il volume originale se vuoi vedere solo i piani
	# mesh_volume.visible = false
