48 lines
1.9 KiB
GDScript
48 lines
1.9 KiB
GDScript
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()
|