first commit
This commit is contained in:
47
Scripts/fuoco_d'artificio_root.gd
Normal file
47
Scripts/fuoco_d'artificio_root.gd
Normal file
@@ -0,0 +1,47 @@
|
||||
extends Node3D
|
||||
|
||||
# Funzione chiamata dal treno per iniettare il colore scelto
|
||||
func imposta_colore(colore_target: Color) -> void:
|
||||
# Cerchiamo i 3 nodi specifici per nome
|
||||
# Assicurati che i nomi nella tua scena siano ESATTAMENTE questi!
|
||||
var razzo = $"1_RazzoIniziale"
|
||||
var esplosione = $"2_EsplosionePrincipale"
|
||||
var scie = $"3_ScieCadenti"
|
||||
|
||||
# 1. Il Razzo iniziale lo vogliamo BIANCO BRILLANTE (la "testa")
|
||||
# Usiamo un bianco "sovraccarico" (valori > 1) per farlo brillare di più
|
||||
_colora_nodo_particellare(razzo, Color(1.5, 1.5, 1.5))
|
||||
|
||||
# 2. L'esplosione principale la vogliamo BIANCA (i punti centrali dello scoppio)
|
||||
_colora_nodo_particellare(esplosione, Color(1.2, 1.2, 1.2))
|
||||
|
||||
# 3. Le scie che cadono le vogliamo del COLORE SCELTO dal treno
|
||||
_colora_nodo_particellare(scie, colore_target)
|
||||
|
||||
# Funzione helper per duplicare e colorare il materiale in modo sicuro
|
||||
func _colora_nodo_particellare(nodo: GPUParticles3D, colore_da_applicare: Color) -> void:
|
||||
if nodo and nodo.draw_pass_1:
|
||||
var mesh = nodo.draw_pass_1 as QuadMesh
|
||||
if mesh and mesh.material:
|
||||
# --- IL SEGRETO E' QUI! ---
|
||||
# Duplichiamo il materiale. Ora questo nodo ha una sua copia privata
|
||||
# e non influenzerà gli altri fuochi d'artificio.
|
||||
var mat_unico = mesh.material.duplicate() as StandardMaterial3D
|
||||
|
||||
# Impostiamo il colore e ci assicuriamo che brilli
|
||||
mat_unico.albedo_color = colore_da_applicare
|
||||
mat_unico.blend_mode = BaseMaterial3D.BLEND_MODE_ADD # Fondamentale per l'effetto luce
|
||||
mat_unico.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
||||
|
||||
# Assegniamo il nuovo materiale unico alla mesh
|
||||
mesh.material = mat_unico
|
||||
|
||||
# Funzione per far partire l'effetto
|
||||
func accendi() -> void:
|
||||
var razzo = $"1_RazzoIniziale"
|
||||
if razzo:
|
||||
razzo.emitting = true # Accende solo la miccia iniziale
|
||||
|
||||
# Tempo di vita totale aumentato per dare tempo alle scie di cadere
|
||||
await get_tree().create_timer(6.0).timeout
|
||||
queue_free()
|
||||
Reference in New Issue
Block a user