use serde::{Serialize, Deserialize};
use crate::{structs::dust::DustBands, Planetesimal, Ring, System};
pub type AccreteEvents = Vec<AccreteEvent>;
#[derive(Debug, Serialize, Deserialize, Clone)]
pub enum AccreteEvent {
None,
PlanetarySystemSetup(String, System),
PlanetesimalCreated(String, Planetesimal),
PlanetesimalUpdated(String, Planetesimal),
PlanetesimalToGasGiant(String, Planetesimal),
DustBandsUpdated(String, DustBands),
PlanetesimalsCoalesced(String, String, String, Planetesimal),
MoonsCoalesced(String, String, String, Planetesimal),
PlanetesimalCaptureMoon(String, String, String, Planetesimal),
PlanetesimalMoonToRing(String, String, String, Ring),
PostAccretionStarted(String),
OuterBodyInjected(String, Planetesimal),
PlanetaryEnvironmentGenerated(String, System),
PlanetarySystemComplete(String, System),
}
impl AccreteEvent {
pub fn name(&self) -> &str {
match self {
AccreteEvent::PlanetarySystemSetup(name, _) => name,
AccreteEvent::PlanetesimalCreated(name, _) => name,
AccreteEvent::PlanetesimalUpdated(name, _) => name,
AccreteEvent::PlanetesimalToGasGiant(name, _) => name,
AccreteEvent::DustBandsUpdated(name, _) => name,
AccreteEvent::PlanetesimalsCoalesced(name, _, _, _) => name,
AccreteEvent::MoonsCoalesced(name, _, _, _) => name,
AccreteEvent::PlanetesimalCaptureMoon(name, _, _, _) => name,
AccreteEvent::PlanetesimalMoonToRing(name, _, _, _) => name,
AccreteEvent::PostAccretionStarted(name) => name,
AccreteEvent::OuterBodyInjected(name, _) => name,
AccreteEvent::PlanetaryEnvironmentGenerated(name, _) => name,
AccreteEvent::PlanetarySystemComplete(name, _) => name,
AccreteEvent::None => "",
}
}
}