use crate::internal::*;
use crate::prelude::*;
pub mod types;
#[derive(Copy, Clone, PartialEq, PartialOrd, Debug, Default, Serialize, Deserialize)]
pub struct Generator {}
impl Generator {
pub fn generate(settings: GenerationSettings) -> GeneratedUniverse {
let universe = Universe::generate(&settings);
let galactic_neighborhood = GalacticNeighborhood::generate(universe, &settings);
let galaxies: Vec<Galaxy> = generate_galaxies(galactic_neighborhood, settings);
GeneratedUniverse {
universe,
galactic_neighborhood,
galaxies,
}
}
}
fn generate_galaxies(
galactic_neighborhood: GalacticNeighborhood,
settings: GenerationSettings,
) -> Vec<Galaxy> {
let mut galaxies: Vec<Galaxy> = vec![];
let to_generate: u16;
match galactic_neighborhood.density {
GalacticNeighborhoodDensity::Void(g, m) | GalacticNeighborhoodDensity::Group(g, m) => {
to_generate = (g as u16) + m
}
GalacticNeighborhoodDensity::Cluster(d, g, m) => to_generate = (d as u16) + (g as u16) + m,
}
for i in 0..to_generate {
galaxies.push(Galaxy::generate(galactic_neighborhood, i, &settings));
}
galaxies
}