use bevy::asset::Asset;
use bevy::color::Color;
use crate::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Asset, TypePath, Component, Serialize, Clone, Debug)]
#[require(
RigidBody::Static,
Replicated,
)]
pub struct Planet {
pub name: String,
pub sprite: String,
pub indicator_sprite: Option<String>,
pub radius: f32,
pub mass: f32,
pub default_transform: [f32; 3],
pub special_sprite_properties: Option<SpecialSpriteProperties>,
pub orbit: Option<OrbitData>
}
#[derive(Deserialize, TypePath, Serialize, Clone, Debug)]
pub struct OrbitData {
pub orbiting: String,
pub eccentricity: f32,
}
#[derive(Deserialize, TypePath, Serialize, Clone, Debug)]
pub enum SpecialSpriteProperties {
ForceColor(Color),
}
#[derive(Bundle)]
pub struct PlanetBundle {
pub planet: Planet,
pub transform: Transform,
pub collider: Collider,
pub mass: Mass
}
#[derive(Deserialize, Asset, TypePath)]
pub struct PlanetConfigCollection {
pub planets: Vec<Planet>,
}