planet_generator 0.0.7-pre-alpha

[WIP] Generates data for galaxies, sectors, solar systems, planets and their inhabitants (Check README for features list).
Documentation
use crate::internal::*;
use crate::prelude::*;
use std::fmt::Display;

pub mod types;

/// Peculiarities a celestial body might have.
#[derive(
    Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Hash, SmartDefault, Serialize, Deserialize,
)]
pub enum CelestialBodySpecialTrait {
    /// This body has the exact traits that one might expect for a member of its type and subtype.
    #[default]
    NoPeculiarity,
    /// This Gas Giant was the first to arise from its star proto-planetary disk.
    ProtoGiant,
    RetrogradeOrbit,
    SpecificGeologicActivity(TelluricGeologicActivity),
    SpecificTerrainRelief(TelluricTerrainRelief),
    TideLocked(TideLockTarget),
    UnusualVolatileDensity(TelluricVolatileDensityDifference),
    UnusualMagneticField(TelluricMagneticFieldDifference),
    UnusualAxialTilt(TelluricAxialTiltDifference),
    UnusualRotation(TelluricRotationDifference),
    UnusualCore(TelluricCoreDifference),
    SubSurfaceOceans(ChemicalComponent),
    Oceans(ChemicalComponent),
    Lakes(ChemicalComponent),
    /// In this body, the element is more or less present by the amount
    UnusualElementPresence((ChemicalComponent, ElementPresenceOccurrence)),
}

impl Display for CelestialBodySpecialTrait {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            CelestialBodySpecialTrait::NoPeculiarity => write!(f, "No Peculiarity"),
            CelestialBodySpecialTrait::ProtoGiant => write!(f, "Proto-Giant"),
            CelestialBodySpecialTrait::RetrogradeOrbit => write!(f, "Retrograde Orbit"),
            CelestialBodySpecialTrait::SpecificGeologicActivity(s) => write!(f, "{}", s),
            CelestialBodySpecialTrait::SpecificTerrainRelief(s) => write!(f, "{}", s),
            CelestialBodySpecialTrait::UnusualVolatileDensity(s) => write!(f, "{}", s),
            CelestialBodySpecialTrait::UnusualMagneticField(s) => write!(f, "{}", s),
            CelestialBodySpecialTrait::UnusualAxialTilt(s) => write!(f, "{}", s),
            CelestialBodySpecialTrait::UnusualRotation(s) => write!(f, "{}", s),
            CelestialBodySpecialTrait::UnusualCore(s) => write!(f, "{}", s),
            CelestialBodySpecialTrait::TideLocked(s) => write!(f, "Tide-Locked {}", s),
            CelestialBodySpecialTrait::SubSurfaceOceans(s) => write!(f, "{} Sub-Surface Oceans", s),
            CelestialBodySpecialTrait::Oceans(s) => write!(f, "{} Oceans", s),
            CelestialBodySpecialTrait::Lakes(s) => write!(f, "{} Lakes", s),
            CelestialBodySpecialTrait::UnusualElementPresence(difference) => {
                write!(f, "{} of {}", difference.1, difference.0)
            }
        }
    }
}