From 4041175337fcc00f9b0c31c6101963365c36528a Mon Sep 17 00:00:00 2001 From: extrawurst Date: Tue, 29 Apr 2025 20:22:50 +0200 Subject: [PATCH] trail gradient --- src/abilities/missile.rs | 6 +++++- src/utils/trail.rs | 20 +++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/abilities/missile.rs b/src/abilities/missile.rs index e0e905e..7cf4e93 100644 --- a/src/abilities/missile.rs +++ b/src/abilities/missile.rs @@ -136,7 +136,11 @@ fn on_trigger_missile( SceneRoot(asset.scenes[0].clone()), ), ( - Trail::new(t.translation, LinearRgba::rgb(0.9, 0.9, 0.)), + Trail::new( + t.translation, + LinearRgba::rgb(1., 0.0, 0.), + LinearRgba::rgb(0.9, 0.9, 0.) + ), Gizmo { handle: gizmo_assets.add(GizmoAsset::default()), line_config: GizmoLineConfig { diff --git a/src/utils/trail.rs b/src/utils/trail.rs index 7ca9890..8602b4d 100644 --- a/src/utils/trail.rs +++ b/src/utils/trail.rs @@ -5,14 +5,19 @@ use crate::GameState; #[derive(Component)] pub struct Trail { points: Vec, - col: LinearRgba, + col_start: LinearRgba, + col_end: LinearRgba, } impl Trail { - pub fn new(pos: Vec3, col: LinearRgba) -> Self { + pub fn new(pos: Vec3, col_start: LinearRgba, col_end: LinearRgba) -> Self { let mut v = Vec::with_capacity(12); v.push(pos); - Self { points: v, col } + Self { + points: v, + col_start, + col_end, + } } pub fn add(&mut self, pos: Vec3) { @@ -44,7 +49,8 @@ fn update_trail( continue; }; - for window in trail.points.windows(2) { + let lerp_denom = trail.points.len() as f32; + for (i, window) in trail.points.windows(2).enumerate() { let [a, b] = window else { continue; }; @@ -55,7 +61,11 @@ fn update_trail( .reparented_to(parent_transform) .translation; - gizmo.line(a, b, trail.col); + gizmo.line( + a, + b, + trail.col_start.mix(&trail.col_end, i as f32 / lerp_denom), + ); } }