scarlet_queen_initializer/
group.rs

1use rand::{
2    distr::{Distribution, StandardUniform},
3    rng,
4    rngs::ThreadRng,
5};
6use scarlet_queen_core::{
7    group::InitializerTrait,
8    pokemon_type::{PokemonTypeAll, PokemonTypeTrait},
9};
10
11#[derive(Debug, Clone, Default)]
12pub struct Initializer {
13    pub group: Vec<PokemonTypeAll>,
14}
15
16impl Initializer {
17    pub fn gen_random(&mut self, size: usize) {
18        let mut rng = rng();
19        self.group = StandardUniform.sample_iter(&mut rng).take(size).collect();
20    }
21}
22
23pub struct InitializerSample<const N: usize> {}
24
25impl<P, const N: usize> InitializerTrait<P, N> for InitializerSample<N>
26where
27    P: PokemonTypeTrait,
28{
29    fn initialize() -> [P; N] {
30        let mut rng: ThreadRng = rng();
31        [0; N].map(|_| <P as PokemonTypeTrait>::sample(&mut rng))
32    }
33}