From 69e0bf2023751bc83d212472323cbe5da8aa260a Mon Sep 17 00:00:00 2001 From: scott-c Date: Tue, 1 Sep 2020 20:13:33 +0800 Subject: [PATCH] fix missing firework particle rng & adjust firework colors --- assets/voxygen/shaders/particle-vert.glsl | 51 +++++++----- voxygen/src/scene/mod.rs | 4 +- voxygen/src/scene/particle.rs | 99 +++++++++++++---------- 3 files changed, 87 insertions(+), 67 deletions(-) diff --git a/assets/voxygen/shaders/particle-vert.glsl b/assets/voxygen/shaders/particle-vert.glsl index 7170fbc6f8..d2dcb4dde7 100644 --- a/assets/voxygen/shaders/particle-vert.glsl +++ b/assets/voxygen/shaders/particle-vert.glsl @@ -91,6 +91,15 @@ mat4 spin_in_axis(vec3 axis, float angle) 0, 0, 0, 1); } +mat4 identity() { + return mat4( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + ); +} + void main() { float rand0 = hash(vec4(inst_entropy + 0)); float rand1 = hash(vec4(inst_entropy + 1)); @@ -108,7 +117,7 @@ void main() { if (inst_mode == SMOKE) { attr = Attr( linear_motion( - vec3(0.0, 0.0, 0.0), + vec3(0), vec3(rand2 * 0.02, rand3 * 0.02, 1.0 + rand4 * 0.1) ), linear_scale(0.5), @@ -148,52 +157,52 @@ void main() { } else if (inst_mode == FIREWORK_BLUE) { attr = Attr( linear_motion( - vec3(0.0, 1.0, 1.0), - vec3(rand4, rand5, rand6) * 40.0 + grav_vel(earth_gravity) + vec3(0), + vec3(rand1, rand2, rand3) * 40.0 + grav_vel(earth_gravity) ), 3.0 + rand0, - vec4(vec3(0.6 + rand7 * 0.4), 0.3), - spin_in_axis(vec3(1,0,0),0) + vec4(0.15, 0.4, 1, 1), + identity() ); } else if (inst_mode == FIREWORK_GREEN) { attr = Attr( linear_motion( - vec3(0.0, 1.0, 0.0), - vec3(rand4, rand5, rand6) * 40.0 + grav_vel(earth_gravity) + vec3(0), + vec3(rand1, rand2, rand3) * 40.0 + grav_vel(earth_gravity) ), 3.0 + rand0, - vec4(vec3(0.6 + rand7 * 0.4), 0.3), - spin_in_axis(vec3(1,0,0),0) + vec4(0, 1, 0, 1), + identity() ); } else if (inst_mode == FIREWORK_PURPLE) { attr = Attr( linear_motion( - vec3(1.0, 0.0, 1.0), - vec3(rand4, rand5, rand6) * 40.0 + grav_vel(earth_gravity) + vec3(0), + vec3(rand1, rand2, rand3) * 40.0 + grav_vel(earth_gravity) ), 3.0 + rand0, - vec4(vec3(0.6 + rand7 * 0.4), 0.3), - spin_in_axis(vec3(1,0,0),0) + vec4(0.7, 0.0, 1.0, 1.0), + identity() ); } else if (inst_mode == FIREWORK_RED) { attr = Attr( linear_motion( - vec3(1.0, 0.0, 0.0), - vec3(rand4, rand5, rand6) * 40.0 + grav_vel(earth_gravity) + vec3(0), + vec3(rand1, rand2, rand3) * 40.0 + grav_vel(earth_gravity) ), 3.0 + rand0, - vec4(vec3(0.6 + rand7 * 0.4), 0.3), - spin_in_axis(vec3(1,0,0),0) + vec4(1, 0, 0, 1), + identity() ); } else if (inst_mode == FIREWORK_YELLOW) { attr = Attr( linear_motion( - vec3(1.0, 1.0, 0.0), - vec3(rand4, rand5, rand6) * 40.0 + grav_vel(earth_gravity) + vec3(0), + vec3(rand1, rand2, rand3) * 40.0 + grav_vel(earth_gravity) ), 3.0 + rand0, - vec4(vec3(0.6 + rand7 * 0.4), 0.3), - spin_in_axis(vec3(1,0,0),0) + vec4(1, 1, 0, 1), + identity() ); } else if (inst_mode == LEAF) { attr = Attr( diff --git a/voxygen/src/scene/mod.rs b/voxygen/src/scene/mod.rs index 5d4d85192f..8eda9080de 100644 --- a/voxygen/src/scene/mod.rs +++ b/voxygen/src/scene/mod.rs @@ -391,9 +391,9 @@ impl Scene { light: Light::new( *pos, match reagent { - Some(Reagent::Blue) => Rgb::new(0.0, 0.0, 1.0), + Some(Reagent::Blue) => Rgb::new(0.15, 0.4, 1.0), Some(Reagent::Green) => Rgb::new(0.0, 1.0, 0.0), - Some(Reagent::Purple) => Rgb::new(1.0, 0.0, 1.0), + Some(Reagent::Purple) => Rgb::new(0.7, 0.0, 1.0), Some(Reagent::Red) => Rgb::new(1.0, 0.0, 0.0), Some(Reagent::Yellow) => Rgb::new(1.0, 1.0, 0.0), None => Rgb::new(1.0, 0.5, 0.0), diff --git a/voxygen/src/scene/particle.rs b/voxygen/src/scene/particle.rs index ead5aeadc7..bec9b00fb2 100644 --- a/voxygen/src/scene/particle.rs +++ b/voxygen/src/scene/particle.rs @@ -57,31 +57,36 @@ impl ParticleMgr { power, reagent, } => { - self.particles.resize( - self.particles.len() + 150, - Particle::new( - Duration::from_millis(if reagent.is_some() { 1000 } else { 250 }), - time, - match reagent { - Some(Reagent::Blue) => ParticleMode::FireworkBlue, - Some(Reagent::Green) => ParticleMode::FireworkGreen, - Some(Reagent::Purple) => ParticleMode::FireworkPurple, - Some(Reagent::Red) => ParticleMode::FireworkRed, - Some(Reagent::Yellow) => ParticleMode::FireworkYellow, - None => ParticleMode::Shrapnel, - }, - *pos, - ), + self.particles.resize_with( + self.particles.len() + if reagent.is_some() { 300 } else { 150 }, + || { + Particle::new( + Duration::from_millis(if reagent.is_some() { 1000 } else { 250 }), + time, + match reagent { + Some(Reagent::Blue) => ParticleMode::FireworkBlue, + Some(Reagent::Green) => ParticleMode::FireworkGreen, + Some(Reagent::Purple) => ParticleMode::FireworkPurple, + Some(Reagent::Red) => ParticleMode::FireworkRed, + Some(Reagent::Yellow) => ParticleMode::FireworkYellow, + None => ParticleMode::Shrapnel, + }, + *pos, + ) + }, ); - self.particles.resize_with(self.particles.len() + 200, || { - Particle::new( - Duration::from_secs(4), - time, - ParticleMode::CampfireSmoke, - *pos + Vec2::::zero().map(|_| rng.gen_range(-1.0, 1.0) * power), - ) - }); + self.particles.resize_with( + self.particles.len() + if reagent.is_some() { 100 } else { 200 }, + || { + Particle::new( + Duration::from_secs(4), + time, + ParticleMode::CampfireSmoke, + *pos + Vec2::::zero().map(|_| rng.gen_range(-1.0, 1.0) * power), + ) + }, + ); }, Outcome::ProjectileShot { .. } => {}, } @@ -185,25 +190,29 @@ impl ParticleMgr { let time = scene_data.state.get_time(); // fire - self.particles.resize( + self.particles.resize_with( self.particles.len() + usize::from(self.scheduler.heartbeats(Duration::from_millis(3))), - Particle::new( - Duration::from_millis(250), - time, - ParticleMode::CampfireFire, - pos.0, - ), + || { + Particle::new( + Duration::from_millis(250), + time, + ParticleMode::CampfireFire, + pos.0, + ) + }, ); // smoke - self.particles.resize( + self.particles.resize_with( self.particles.len() + usize::from(self.scheduler.heartbeats(Duration::from_millis(5))), - Particle::new( - Duration::from_secs(2), - time, - ParticleMode::CampfireSmoke, - pos.0, - ), + || { + Particle::new( + Duration::from_secs(2), + time, + ParticleMode::CampfireSmoke, + pos.0, + ) + }, ); } @@ -241,15 +250,17 @@ impl ParticleMgr { .join() { if let CharacterState::Boost(_) = character_state { - self.particles.resize( + self.particles.resize_with( self.particles.len() + usize::from(self.scheduler.heartbeats(Duration::from_millis(10))), - Particle::new( - Duration::from_secs(15), - time, - ParticleMode::CampfireSmoke, - pos.0, - ), + || { + Particle::new( + Duration::from_secs(15), + time, + ParticleMode::CampfireSmoke, + pos.0, + ) + }, ); } }