use bevy::prelude::*;
use bevy_rapier2d::prelude::*;
use serde::{Deserialize, Serialize};
use crate::planet;
#[derive(Component, Clone, Copy, Serialize, Deserialize, Debug, PartialEq, Eq, Hash)]
pub enum PlanetType {
Earth,
Moon,
Mars,
}
#[derive(Bundle)]
pub struct PlanetBundle {
pub planet_type: PlanetType,
pub transform: TransformBundle,
}
pub fn spawn_planets(mut commands: Commands) {
info!("Spawning planets");
let earth_pos = Transform::from_xyz(0.0, 0.0, 0.0);
commands
.spawn(PlanetBundle {
planet_type: PlanetType::Earth,
transform: TransformBundle::from(earth_pos),
})
.insert(Collider::ball(planet!(PlanetType::Earth).size))
.insert(AdditionalMassProperties::Mass(
planet!(PlanetType::Earth).mass,
))
.insert(ReadMassProperties::default())
.with_children(|children| {
children
.spawn(Collider::ball(planet!(PlanetType::Earth).size + 0.3))
.insert(ActiveEvents::COLLISION_EVENTS)
.insert(Sensor);
})
.insert(RigidBody::Fixed);
let moon_pos = Transform::from_xyz(50.0, 20.0, 0.0);
commands
.spawn(PlanetBundle {
planet_type: PlanetType::Moon,
transform: TransformBundle::from(moon_pos),
})
.insert(Collider::ball(planet!(PlanetType::Moon).size))
.insert(AdditionalMassProperties::Mass(
planet!(PlanetType::Moon).mass,
))
.insert(ReadMassProperties::default())
.with_children(|children| {
children
.spawn(Collider::ball(planet!(PlanetType::Moon).size + 0.1))
.insert(ActiveEvents::COLLISION_EVENTS)
.insert(Sensor);
})
.insert(RigidBody::Fixed);
let mars_pos = Transform::from_xyz(-50.0, 300.0, 0.0);
commands
.spawn(PlanetBundle {
planet_type: PlanetType::Mars,
transform: TransformBundle::from(mars_pos),
})
.insert(Collider::ball(planet!(PlanetType::Mars).size))
.insert(AdditionalMassProperties::Mass(
planet!(PlanetType::Mars).mass,
))
.insert(ReadMassProperties::default())
.with_children(|children| {
children
.spawn(Collider::ball(planet!(PlanetType::Mars).size + 0.1))
.insert(ActiveEvents::COLLISION_EVENTS)
.insert(Sensor);
})
.insert(RigidBody::Fixed);
}