firework-rs 0.3.1

A cross-platform ascii-art firework simulator in terminal
Documentation
use std::time::Duration;

use firework_rs::{config::Config, demo::demo_firework_0, fireworks::FireworkManager};
use glam::Vec2;
use rand::{seq::IteratorRandom, thread_rng, Rng};

pub fn dyn_gen(
    fm: &mut FireworkManager,
    width: u16,
    height: u16,
    enable_gradient: bool,
    cfg: &Config,
) {
    let colors = [
        vec![
            (255, 102, 75),
            (144, 56, 67),
            (255, 225, 124),
            (206, 32, 41),
        ],
        vec![
            (235, 39, 155),
            (250, 216, 68),
            (242, 52, 72),
            (63, 52, 200),
            (255, 139, 57),
        ],
        vec![
            (152, 186, 227),
            (89, 129, 177),
            (54, 84, 117),
            (240, 244, 254),
        ],
        vec![
            (34, 87, 122),
            (56, 163, 165),
            (87, 204, 153),
            (128, 237, 153),
            (199, 249, 204),
        ],
        vec![
            (205, 180, 219),
            (255, 200, 221),
            (255, 175, 204),
            (189, 224, 254),
            (162, 210, 255),
        ],
        vec![
            (79, 0, 11),
            (114, 0, 38),
            (206, 66, 87),
            (255, 127, 81),
            (255, 155, 84),
        ],
        vec![(0, 29, 61), (0, 53, 102), (255, 195, 0), (255, 214, 10)],
        vec![
            (61, 52, 139),
            (118, 120, 237),
            (247, 184, 1),
            (241, 135, 1),
            (243, 91, 4),
        ],
    ];
    let limit = if cfg.enable_cjk {
        (width as usize * height as usize) / 1800 + 3
    } else {
        (width as usize * height as usize) / 1300 + 3
    };
    if fm.fireworks.len() < limit {
        let x: isize = thread_rng().gen_range(-3..(width as isize + 3));
        let y: isize = thread_rng().gen_range(-1..(height as isize + 1));
        fm.add_firework(demo_firework_0(
            Vec2::new(x as f32, y as f32),
            Duration::from_secs_f32(thread_rng().gen_range(0.0..2.0)),
            enable_gradient,
            colors.iter().choose(&mut thread_rng()).unwrap().to_owned(),
            cfg,
        ));
    }
}