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