if *duration > Duration::ZERO { let mut text = texts.single_mut(); let total_sections = text.sections.len(); *duration = duration.saturating_sub(time.delta()); for (idx, section) in text.sections.iter_mut().enumerate() { let ratio = ((idx + 1) as f32) / (total_sections as f32); let cursor = 1.0 - ((*duration).as_secs_f32() / 30.0); let alpha = if cursor > ratio { 1.0 } else { 0.0 }; section.style.color.set_a(alpha); } }