mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'scott-c/fix-missing-firework-particles' into 'master'
fix missing firework/bomb particle rng & adjust firework colors Closes #713 See merge request veloren/veloren!1351
This commit is contained in:
commit
d8da10f1ff
@ -91,6 +91,15 @@ mat4 spin_in_axis(vec3 axis, float angle)
|
|||||||
0, 0, 0, 1);
|
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() {
|
void main() {
|
||||||
float rand0 = hash(vec4(inst_entropy + 0));
|
float rand0 = hash(vec4(inst_entropy + 0));
|
||||||
float rand1 = hash(vec4(inst_entropy + 1));
|
float rand1 = hash(vec4(inst_entropy + 1));
|
||||||
@ -108,7 +117,7 @@ void main() {
|
|||||||
if (inst_mode == SMOKE) {
|
if (inst_mode == SMOKE) {
|
||||||
attr = Attr(
|
attr = Attr(
|
||||||
linear_motion(
|
linear_motion(
|
||||||
vec3(0.0, 0.0, 0.0),
|
vec3(0),
|
||||||
vec3(rand2 * 0.02, rand3 * 0.02, 1.0 + rand4 * 0.1)
|
vec3(rand2 * 0.02, rand3 * 0.02, 1.0 + rand4 * 0.1)
|
||||||
),
|
),
|
||||||
linear_scale(0.5),
|
linear_scale(0.5),
|
||||||
@ -148,52 +157,52 @@ void main() {
|
|||||||
} else if (inst_mode == FIREWORK_BLUE) {
|
} else if (inst_mode == FIREWORK_BLUE) {
|
||||||
attr = Attr(
|
attr = Attr(
|
||||||
linear_motion(
|
linear_motion(
|
||||||
vec3(0.0, 1.0, 1.0),
|
vec3(0),
|
||||||
vec3(rand4, rand5, rand6) * 40.0 + grav_vel(earth_gravity)
|
vec3(rand1, rand2, rand3) * 40.0 + grav_vel(earth_gravity)
|
||||||
),
|
),
|
||||||
3.0 + rand0,
|
3.0 + rand0,
|
||||||
vec4(vec3(0.6 + rand7 * 0.4), 0.3),
|
vec4(0.15, 0.4, 1, 1),
|
||||||
spin_in_axis(vec3(1,0,0),0)
|
identity()
|
||||||
);
|
);
|
||||||
} else if (inst_mode == FIREWORK_GREEN) {
|
} else if (inst_mode == FIREWORK_GREEN) {
|
||||||
attr = Attr(
|
attr = Attr(
|
||||||
linear_motion(
|
linear_motion(
|
||||||
vec3(0.0, 1.0, 0.0),
|
vec3(0),
|
||||||
vec3(rand4, rand5, rand6) * 40.0 + grav_vel(earth_gravity)
|
vec3(rand1, rand2, rand3) * 40.0 + grav_vel(earth_gravity)
|
||||||
),
|
),
|
||||||
3.0 + rand0,
|
3.0 + rand0,
|
||||||
vec4(vec3(0.6 + rand7 * 0.4), 0.3),
|
vec4(0, 1, 0, 1),
|
||||||
spin_in_axis(vec3(1,0,0),0)
|
identity()
|
||||||
);
|
);
|
||||||
} else if (inst_mode == FIREWORK_PURPLE) {
|
} else if (inst_mode == FIREWORK_PURPLE) {
|
||||||
attr = Attr(
|
attr = Attr(
|
||||||
linear_motion(
|
linear_motion(
|
||||||
vec3(1.0, 0.0, 1.0),
|
vec3(0),
|
||||||
vec3(rand4, rand5, rand6) * 40.0 + grav_vel(earth_gravity)
|
vec3(rand1, rand2, rand3) * 40.0 + grav_vel(earth_gravity)
|
||||||
),
|
),
|
||||||
3.0 + rand0,
|
3.0 + rand0,
|
||||||
vec4(vec3(0.6 + rand7 * 0.4), 0.3),
|
vec4(0.7, 0.0, 1.0, 1.0),
|
||||||
spin_in_axis(vec3(1,0,0),0)
|
identity()
|
||||||
);
|
);
|
||||||
} else if (inst_mode == FIREWORK_RED) {
|
} else if (inst_mode == FIREWORK_RED) {
|
||||||
attr = Attr(
|
attr = Attr(
|
||||||
linear_motion(
|
linear_motion(
|
||||||
vec3(1.0, 0.0, 0.0),
|
vec3(0),
|
||||||
vec3(rand4, rand5, rand6) * 40.0 + grav_vel(earth_gravity)
|
vec3(rand1, rand2, rand3) * 40.0 + grav_vel(earth_gravity)
|
||||||
),
|
),
|
||||||
3.0 + rand0,
|
3.0 + rand0,
|
||||||
vec4(vec3(0.6 + rand7 * 0.4), 0.3),
|
vec4(1, 0, 0, 1),
|
||||||
spin_in_axis(vec3(1,0,0),0)
|
identity()
|
||||||
);
|
);
|
||||||
} else if (inst_mode == FIREWORK_YELLOW) {
|
} else if (inst_mode == FIREWORK_YELLOW) {
|
||||||
attr = Attr(
|
attr = Attr(
|
||||||
linear_motion(
|
linear_motion(
|
||||||
vec3(1.0, 1.0, 0.0),
|
vec3(0),
|
||||||
vec3(rand4, rand5, rand6) * 40.0 + grav_vel(earth_gravity)
|
vec3(rand1, rand2, rand3) * 40.0 + grav_vel(earth_gravity)
|
||||||
),
|
),
|
||||||
3.0 + rand0,
|
3.0 + rand0,
|
||||||
vec4(vec3(0.6 + rand7 * 0.4), 0.3),
|
vec4(1, 1, 0, 1),
|
||||||
spin_in_axis(vec3(1,0,0),0)
|
identity()
|
||||||
);
|
);
|
||||||
} else if (inst_mode == LEAF) {
|
} else if (inst_mode == LEAF) {
|
||||||
attr = Attr(
|
attr = Attr(
|
||||||
|
@ -391,9 +391,9 @@ impl Scene {
|
|||||||
light: Light::new(
|
light: Light::new(
|
||||||
*pos,
|
*pos,
|
||||||
match reagent {
|
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::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::Red) => Rgb::new(1.0, 0.0, 0.0),
|
||||||
Some(Reagent::Yellow) => Rgb::new(1.0, 1.0, 0.0),
|
Some(Reagent::Yellow) => Rgb::new(1.0, 1.0, 0.0),
|
||||||
None => Rgb::new(1.0, 0.5, 0.0),
|
None => Rgb::new(1.0, 0.5, 0.0),
|
||||||
|
@ -57,31 +57,36 @@ impl ParticleMgr {
|
|||||||
power,
|
power,
|
||||||
reagent,
|
reagent,
|
||||||
} => {
|
} => {
|
||||||
self.particles.resize(
|
self.particles.resize_with(
|
||||||
self.particles.len() + 150,
|
self.particles.len() + if reagent.is_some() { 300 } else { 150 },
|
||||||
Particle::new(
|
|| {
|
||||||
Duration::from_millis(if reagent.is_some() { 1000 } else { 250 }),
|
Particle::new(
|
||||||
time,
|
Duration::from_millis(if reagent.is_some() { 1000 } else { 250 }),
|
||||||
match reagent {
|
time,
|
||||||
Some(Reagent::Blue) => ParticleMode::FireworkBlue,
|
match reagent {
|
||||||
Some(Reagent::Green) => ParticleMode::FireworkGreen,
|
Some(Reagent::Blue) => ParticleMode::FireworkBlue,
|
||||||
Some(Reagent::Purple) => ParticleMode::FireworkPurple,
|
Some(Reagent::Green) => ParticleMode::FireworkGreen,
|
||||||
Some(Reagent::Red) => ParticleMode::FireworkRed,
|
Some(Reagent::Purple) => ParticleMode::FireworkPurple,
|
||||||
Some(Reagent::Yellow) => ParticleMode::FireworkYellow,
|
Some(Reagent::Red) => ParticleMode::FireworkRed,
|
||||||
None => ParticleMode::Shrapnel,
|
Some(Reagent::Yellow) => ParticleMode::FireworkYellow,
|
||||||
},
|
None => ParticleMode::Shrapnel,
|
||||||
*pos,
|
},
|
||||||
),
|
*pos,
|
||||||
|
)
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
self.particles.resize_with(self.particles.len() + 200, || {
|
self.particles.resize_with(
|
||||||
Particle::new(
|
self.particles.len() + if reagent.is_some() { 100 } else { 200 },
|
||||||
Duration::from_secs(4),
|
|| {
|
||||||
time,
|
Particle::new(
|
||||||
ParticleMode::CampfireSmoke,
|
Duration::from_secs(4),
|
||||||
*pos + Vec2::<f32>::zero().map(|_| rng.gen_range(-1.0, 1.0) * power),
|
time,
|
||||||
)
|
ParticleMode::CampfireSmoke,
|
||||||
});
|
*pos + Vec2::<f32>::zero().map(|_| rng.gen_range(-1.0, 1.0) * power),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
);
|
||||||
},
|
},
|
||||||
Outcome::ProjectileShot { .. } => {},
|
Outcome::ProjectileShot { .. } => {},
|
||||||
}
|
}
|
||||||
@ -185,25 +190,29 @@ impl ParticleMgr {
|
|||||||
let time = scene_data.state.get_time();
|
let time = scene_data.state.get_time();
|
||||||
|
|
||||||
// fire
|
// fire
|
||||||
self.particles.resize(
|
self.particles.resize_with(
|
||||||
self.particles.len() + usize::from(self.scheduler.heartbeats(Duration::from_millis(3))),
|
self.particles.len() + usize::from(self.scheduler.heartbeats(Duration::from_millis(3))),
|
||||||
Particle::new(
|
|| {
|
||||||
Duration::from_millis(250),
|
Particle::new(
|
||||||
time,
|
Duration::from_millis(250),
|
||||||
ParticleMode::CampfireFire,
|
time,
|
||||||
pos.0,
|
ParticleMode::CampfireFire,
|
||||||
),
|
pos.0,
|
||||||
|
)
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
// smoke
|
// smoke
|
||||||
self.particles.resize(
|
self.particles.resize_with(
|
||||||
self.particles.len() + usize::from(self.scheduler.heartbeats(Duration::from_millis(5))),
|
self.particles.len() + usize::from(self.scheduler.heartbeats(Duration::from_millis(5))),
|
||||||
Particle::new(
|
|| {
|
||||||
Duration::from_secs(2),
|
Particle::new(
|
||||||
time,
|
Duration::from_secs(2),
|
||||||
ParticleMode::CampfireSmoke,
|
time,
|
||||||
pos.0,
|
ParticleMode::CampfireSmoke,
|
||||||
),
|
pos.0,
|
||||||
|
)
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,15 +250,17 @@ impl ParticleMgr {
|
|||||||
.join()
|
.join()
|
||||||
{
|
{
|
||||||
if let CharacterState::Boost(_) = character_state {
|
if let CharacterState::Boost(_) = character_state {
|
||||||
self.particles.resize(
|
self.particles.resize_with(
|
||||||
self.particles.len()
|
self.particles.len()
|
||||||
+ usize::from(self.scheduler.heartbeats(Duration::from_millis(10))),
|
+ usize::from(self.scheduler.heartbeats(Duration::from_millis(10))),
|
||||||
Particle::new(
|
|| {
|
||||||
Duration::from_secs(15),
|
Particle::new(
|
||||||
time,
|
Duration::from_secs(15),
|
||||||
ParticleMode::CampfireSmoke,
|
time,
|
||||||
pos.0,
|
ParticleMode::CampfireSmoke,
|
||||||
),
|
pos.0,
|
||||||
|
)
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user