From 13697a610408bcea6e2cd525b5d15a9e6b63df18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pascal=20Eng=C3=A9libert?= Date: Sat, 13 Jan 2024 13:51:08 +0100 Subject: [PATCH] Doc comments --- src/main.rs | 35 +++++++++++++++++++++++++++++++++++ src/quadtree.rs | 20 ++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/src/main.rs b/src/main.rs index 2ee5d7e..60465a6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,12 +7,15 @@ use bevy::{ sprite::{MaterialMesh2dBundle, Mesh2dHandle}, }; +/// Empêche les fuites mémoire, arrête tout à 1 Go #[global_allocator] static ALLOCATOR: cap::Cap = cap::Cap::new(std::alloc::System, 1024 * 1024 * 1024); +/// Ces deux points définissent le rectangle contenant tout l'univers static UNIVERSE_POS: (Vec2, Vec2) = (Vec2::new(-1e6, -1e6), Vec2::new(1e6, 1e6)); +/// Cette fonction est l'entrée du programme fn main() { App::new() .add_plugins(( @@ -33,11 +36,13 @@ fn main() { .run(); } +/// Cette fonction est appelée à l'initialisation du jeu, par main fn setup( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { + // Créer une caméra qui filme ce qu'on va afficher à l'écran commands .spawn(Camera2dBundle::default()) .insert(bevy_pancam::PanCam::default()); @@ -45,6 +50,7 @@ fn setup( let red = materials.add(ColorMaterial::from(Color::RED)); let circle_5: Mesh2dHandle = meshes.add(shape::Circle::new(5.).into()).into(); + // Créer des planètes commands .spawn(Planet { pos: TransformBundle::from(Transform::from_translation(Vec3::new(0., 0., 0.))), @@ -87,6 +93,7 @@ fn setup( ..default() }); }); + // Créer plein de planètes ! for i in 0..4000u32 { commands .spawn(Planet { @@ -109,36 +116,53 @@ fn setup( } } +/// Un set est un ensemble de systèmes. +/// Chaque système est dans un set, ici Force ou Apply. +/// Les sets sont exécutés dans un certain ordre (défini dans main) #[derive(Clone, Debug, Eq, Hash, PartialEq, SystemSet)] enum Set { + /// Systèmes modélisant des forces (poids, champ électrique, rebonds...), donc changeant la vitesse des objets Force, + /// Systèmes appliquant les forces, donc changeant la position des objets selon leur vitesse Apply, } +/// Une vitesse (x, y) en m/s #[derive(Component)] struct Speed(Vec2); +/// Une masse en kg #[derive(Component)] struct Mass(f32); +/// Une planète #[derive(Bundle)] struct Planet { + /// Position du centre de la planète pos: TransformBundle, + /// Masse de la planète mass: Mass, + /// Vitesse de la planète speed: Speed, visibility: InheritedVisibility, } +/// Constantes physiques #[derive(Resource)] struct Constants { + /// Constante gravitationnelle g: f32, } +/// Corps. Sert à utiliser le quadtree struct Body { mass: f32, pos: Vec2, } +/// On implémente le trait Body pour la struct Body. +/// C'est-à-dire qu'on ajoute à la struct Body l'information qu'elle se comporte comme un corps. +/// On lui ajoute les méthodes (fonctions) d'un corps. impl quadtree::Body for Body { fn mass(&self) -> f32 { self.mass @@ -151,6 +175,7 @@ impl quadtree::Body for Body { } } +// Ici l'ancien système de poids, mis en commentaire pour être ignoré. /*fn weight_system( constants: Res, query1: Query<(&Transform, &Mass)>, @@ -172,22 +197,29 @@ impl quadtree::Body for Body { } }*/ +/// Le système de poids. fn weight_system( constants: Res, mut query: Query<(&Transform, &Mass, &mut Speed)>, time: Res