mod gen; use bevy::{ecs::query::BatchingStrategy, prelude::*, sprite::MaterialMesh2dBundle}; fn main() { App::new() .add_plugins(DefaultPlugins) .insert_resource(Constants { g: 6.674e-11 }) .add_systems(Startup, setup) .configure_sets(Update, (Set::Force, Set::Apply).chain()) .add_systems( Update, ( weight_system.in_set(Set::Force), apply_system.in_set(Set::Apply), ), ) .run(); } fn setup( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { commands.spawn(Camera2dBundle { camera: Camera { ..default() }, ..default() }); commands.spawn(Planet { mass: Mass(1.9885e18), speed: Speed { x: 0., y: 0. }, mesh: MaterialMesh2dBundle { mesh: meshes.add(gen::planet()).into(), material: materials.add(ColorMaterial::from(Color::YELLOW)), transform: Transform::from_translation(Vec3::new(0., 0., 0.)), ..default() }, }); commands.spawn(Planet { mass: Mass(5.9736e14), speed: Speed { x: 0., y: 500. }, mesh: MaterialMesh2dBundle { mesh: meshes.add(shape::Circle::new(10.).into()).into(), material: materials.add(ColorMaterial::from(Color::BLUE)), transform: Transform::from_translation(Vec3::new(400., 0., 0.)), ..default() }, }); commands.spawn(Planet { mass: Mass(5.9736e14), speed: Speed { x: 0., y: -500. }, mesh: MaterialMesh2dBundle { mesh: meshes.add(shape::Circle::new(10.).into()).into(), material: materials.add(ColorMaterial::from(Color::BLUE)), transform: Transform::from_translation(Vec3::new(-400., 0., 0.)), ..default() }, }); for i in 0..100u32 { commands.spawn(Planet { mass: Mass(1.), speed: Speed { x: 0., y: -500. }, mesh: MaterialMesh2dBundle { mesh: meshes.add(shape::Circle::new(5.).into()).into(), material: materials.add(ColorMaterial::from(Color::RED)), transform: Transform::from_translation(Vec3::new(-450. - i as f32 / 4., 0., 0.)), ..default() }, }); } } #[derive(Clone, Debug, Eq, Hash, PartialEq, SystemSet)] enum Set { Force, Apply, } #[derive(Component)] struct Speed { x: f32, y: f32, } #[derive(Component)] struct Mass(f32); #[derive(Bundle)] struct Planet { mass: Mass, speed: Speed, mesh: MaterialMesh2dBundle, } #[derive(Resource)] struct Constants { g: f32, } /*fn weight_system( constants: Res, query1: Query<(&Transform, &Mass)>, mut query2: Query<(&Transform, &mut Speed)>, time: Res