shader_type spatial;
render_mode unshaded;

// --- PARAMETRI ---
uniform float time_scale = 3.0;
uniform float wave_amplitude = 0.5; // Quanto curva a destra/sinistra
uniform float wave_frequency = 1.0; // Ogni quanto fa la curva

void vertex() {
    // Creiamo un offset unico per ogni particella in modo che non si muovano tutte uguali
    float random_seed_offset = INSTANCE_CUSTOM.x * 100.0; 
    float scaled_time = (TIME + random_seed_offset) * time_scale;
    
    // Applichiamo SOLO la curva morbida all'asse X (o Z, a seconda di come orienti la scena)
    // Usiamo VERTEX.y per far sì che la curva si propaghi lungo tutta la lunghezza della scia
    VERTEX.x += sin(VERTEX.y * wave_frequency + scaled_time) * wave_amplitude;
    
    // Niente più "VERTEX.y += t;", quindi niente più teletrasporti!
}

void fragment() {
    // Il colore e l'alpha (per lo spawn dolce e la morte lenta) 
    // vengono comandati dalla Color Ramp del GPUParticles3D!
    ALBEDO = COLOR.rgb;
    ALPHA = COLOR.a;
}