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 77-82)
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
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
Hide additional examples
examples/heart.rs (line 85)
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
117
118
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()
    }
}