Function firework_rs::utils::gen_points_fan
source · pub fn gen_points_fan(
radius: f32,
n: usize,
st_angle: f32,
ed_angle: f32
) -> Vec<Vec2>Expand description
Generate random Vec2 within a fan-shape range
Examples found in repository?
examples/fountain.rs (lines 75-80)
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
fn gen_fountain_firework(center: Vec2) -> Firework {
let colors = vec![(226, 196, 136), (255, 245, 253), (208, 58, 99)];
let mut particles = Vec::new();
for v in gen_points_fan(
300.,
45,
5 as f32 / 12 as f32 * PI,
7 as f32 / 12 as f32 * PI,
)
.iter()
{
particles.push(ParticleConfig::new(
center,
*v,
thread_rng().gen_range(28..38),
Duration::from_secs_f32(thread_rng().gen_range(2.5..3.8)),
*colors.iter().choose(&mut thread_rng()).unwrap(),
));
}
let mut config = FireworkConfig::default()
.with_ar_scale(0.15)
.with_gravity_scale(0.5)
.with_gradient_scale(gradient);
config.set_enable_gradient(true);
Firework {
init_time: SystemTime::now(),
spawn_after: Duration::ZERO,
center,
particles,
config,
form: ExplosionForm::Sustained {
lasts: Duration::from_secs(5),
time_interval: Duration::from_secs_f32(0.08),
timer: Duration::ZERO,
},
..Default::default()
}
}More examples
examples/heart.rs (line 83)
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
fn gen_heart_firework(center: Vec2) -> Firework {
let colors = vec![
(233, 232, 237),
(254, 142, 130),
(200, 27, 72),
(86, 18, 31),
];
let mut particles = Vec::new();
let trail_length = thread_rng().gen_range(100..105);
let life_time = Duration::from_secs_f32(thread_rng().gen_range(3.0..3.2));
let init_pos = center - Vec2::NEG_Y * 15.;
for v in gen_points_fan(300., 45, 0.2 * PI, 0.3 * PI).iter() {
particles.push(ParticleConfig::new(
init_pos,
*v,
trail_length,
life_time,
*colors.iter().choose(&mut thread_rng()).unwrap(),
));
}
for v in gen_points_fan(300., 45, 0.7 * PI, 0.8 * PI).iter() {
particles.push(ParticleConfig::new(
init_pos,
*v,
trail_length,
life_time,
*colors.iter().choose(&mut thread_rng()).unwrap(),
));
}
let mut config = FireworkConfig::default()
.with_ar_scale(0.1)
.with_gravity_scale(0.1)
.with_gradient_scale(gradient)
.with_additional_force(move |particle| (center - particle.pos) * 2.);
config.set_enable_gradient(true);
Firework {
init_time: SystemTime::now(),
spawn_after: Duration::ZERO,
center,
particles,
config,
form: ExplosionForm::Instant { used: false },
..Default::default()
}
}