From 4ab8a6aae4c4988c1c7ba20cde5f0dd7f27a0dee Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 21 May 2023 16:32:15 +0200 Subject: [PATCH 01/11] init fichier --- src/{main.rs => bin/client.rs} | 2 +- src/map/mod.rs | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) rename src/{main.rs => bin/client.rs} (88%) create mode 100644 src/map/mod.rs diff --git a/src/main.rs b/src/bin/client.rs similarity index 88% rename from src/main.rs rename to src/bin/client.rs index 41d4fbd..90d6504 100644 --- a/src/main.rs +++ b/src/bin/client.rs @@ -1,4 +1,4 @@ -//! Permet de lancer le jeu. +//! Permet de lancer le jeu du client. #![deny(clippy::missing_docs_in_private_items)] #![deny(clippy::unwrap_in_result)] diff --git a/src/map/mod.rs b/src/map/mod.rs new file mode 100644 index 0000000..bde5bfe --- /dev/null +++ b/src/map/mod.rs @@ -0,0 +1,3 @@ +//! les fonction et struct de la map + +pub enum TypeBlock {} From 2afbb13a0e81128a0cdf19f388f9385f6d8bc6ea Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 21 May 2023 16:36:56 +0200 Subject: [PATCH 02/11] type block --- src/map/block.rs | 98 ++++++++++++++++++++++++++++++++++++++++++++++++ src/map/mod.rs | 3 -- 2 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 src/map/block.rs delete mode 100644 src/map/mod.rs diff --git a/src/map/block.rs b/src/map/block.rs new file mode 100644 index 0000000..46646e3 --- /dev/null +++ b/src/map/block.rs @@ -0,0 +1,98 @@ +//! on stocke les données des blocks (fonction, enum et struct) + +use bevy::prelude::*; + +#[derive(Component, Debug, PartialEq, Clone, Copy, Eq, Hash)] +/// tout les blocks du jeu c'est un Component +pub enum BlockType { + /// Un avant post + Outpost, + /// Un caserne + Caserne, + /// un chateau + Castle, + /// une ferme + Farm, + /// une block d'herbe + Grass, + /// une forêt + GrassForest, + /// une montagne + GrassHill, + /// une mine + Mine, + /// une tower + Tower, + /// un ameliorateur + Upgradeur, + /// un mur + Wall, + /// une ferme a animaux + Sheep, +} + +impl BlockType { + /// permet de récupérer les images des blocks pour les afficher + pub fn get_image(&self, asset_server: &AssetServer) -> Handle { + match self { + Self::Outpost => asset_server.load("map/Outpost.png"), + Self::Caserne => asset_server.load("map/Caserne.png"), + Self::Castle => asset_server.load("map/Castle.png"), + Self::Farm => asset_server.load("map/Farm.png"), + Self::Grass => asset_server.load("map/Grass.png"), + Self::GrassForest => asset_server.load("map/GrassForest.png"), + Self::GrassHill => asset_server.load("map/GrassHill.png"), + Self::Mine => asset_server.load("map/Mine.png"), + Self::Tower => asset_server.load("map/Tower.png"), + Self::Upgradeur => asset_server.load("map/Upgradeur.png"), + Self::Wall => asset_server.load("map/Wall.png"), + Self::Sheep => asset_server.load("map/Sheep.png"), + } + } + + /// permet de récupérer les textes des blocks + pub const fn get_text(&self) -> &str { + match self { + Self::Caserne => "a barracks, it allows you to create troops", + Self::Castle => "a castle, it's a base", + Self::Grass => "a block of grass, it's useless", + Self::GrassForest => "a forest, if you break it you can collect resources", + Self::GrassHill => "a mountain, if you break it you can collect resources", + Self::Mine => "a mine, it allows you to collect resources", + Self::Farm => "a farm, it allows you to collect resources", + Self::Outpost => "an outpost, it allows you to teleport your troops", + Self::Tower => "a defense tower, it allows you to defend your troops", + Self::Upgradeur => "an upgrader", + Self::Wall => "a wall", + Self::Sheep => "a food reseve wich permit create an army", + } + } + + /// permet de récupérer les prix des blocks sous forme de texte + pub fn get_text_price(&self) -> String { + format!( + "{:?}\n\n{} Wood,\n{} Stone", + self, + self.get_price()[1], + self.get_price()[0] + ) + } + + /// permet de récupérer les prix des blocks + pub fn get_price(&self) -> [u32; 2] { + match self { + Self::Outpost => [2300, 3000], + Self::Caserne => [600, 400], + Self::Castle => todo!(), + Self::Farm => [200, 300], + Self::Grass => todo!(), + Self::GrassForest => todo!(), + Self::GrassHill => todo!(), + Self::Mine => [300, 200], + Self::Tower => [1500, 1500], + Self::Upgradeur => [1000, 1000], + Self::Wall => [4000, 4000], + Self::Sheep => [400, 500], + } + } +} diff --git a/src/map/mod.rs b/src/map/mod.rs deleted file mode 100644 index bde5bfe..0000000 --- a/src/map/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -//! les fonction et struct de la map - -pub enum TypeBlock {} From eca3e6d504035e0ed5c07318cba48c0cb8568688 Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 21 May 2023 16:38:35 +0200 Subject: [PATCH 03/11] position --- src/map/identity.rs | 0 src/map/position.rs | 31 +++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/map/identity.rs create mode 100644 src/map/position.rs diff --git a/src/map/identity.rs b/src/map/identity.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/map/position.rs b/src/map/position.rs new file mode 100644 index 0000000..aef2939 --- /dev/null +++ b/src/map/position.rs @@ -0,0 +1,31 @@ +//! on stocke les données des position (fonction, enum et struct) + +use bevy::prelude::*; +use map::identity::*; + +#[derive(Component)] +/// position du block +pub struct BlockPosition { + /// la position en x + pub x: u8, + /// la position en y + pub y: u8, +} + +impl BlockPosition { + /// retourne la position en x et y dans la map en foction de la position abstraite + pub fn to_transform(&self, identity: Identity) -> Transform { + let max_y: u8 = 9; + let max_x = 10.; + let new_y = max_y - 1 - self.y; + let offset_x = new_y % 2; + + let mut new_x = (offset_x as f32).mul_add(0.5, self.x as f32); + if identity == Identity::Joueur2 { + new_x = max_x - new_x; + }; + + Transform::from_xyz(new_x, new_y as f32 * 0.42, self.y as f32) + .with_scale(Vec3::splat(1.0 / 185.0)) + } +} From f5c1b347d63090351fcd626162838d916b61c08f Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 21 May 2023 16:52:27 +0200 Subject: [PATCH 04/11] identity --- src/map/identity.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/map/identity.rs b/src/map/identity.rs index e69de29..d3bf86c 100644 --- a/src/map/identity.rs +++ b/src/map/identity.rs @@ -0,0 +1,25 @@ +//! on stocke les données des identity (fonction, enum et struct) + +use bevy::prelude::*; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] +/// permet de situer le joueur dans le jeu +pub enum Identity { + /// represente le joueur 1 + Joueur1, + /// represente le joueur 2 + Joueur2, + /// represente le spectateur + Spectateur, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] +/// permet de donné la posetion d'un block au joueur dans le jeu +pub enum BlockApartenance { + /// represente le joueur 1 + Joueur1, + /// represente le joueur 2 + Joueur2, + /// represente les blocks neutres + Neutre, +} From e22804b71f3a5d10bdb7b60d5e5792f107515a45 Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 21 May 2023 17:10:30 +0200 Subject: [PATCH 05/11] points et majuscules au commentaire --- src/map/block.rs | 36 ++++++++++++++++++------------------ src/map/identity.rs | 18 +++++++++--------- src/map/position.rs | 10 +++++----- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/map/block.rs b/src/map/block.rs index 46646e3..0eb5eec 100644 --- a/src/map/block.rs +++ b/src/map/block.rs @@ -1,38 +1,38 @@ -//! on stocke les données des blocks (fonction, enum et struct) +//! On stocke les données des blocks (fonction, enum et struct). use bevy::prelude::*; #[derive(Component, Debug, PartialEq, Clone, Copy, Eq, Hash)] -/// tout les blocks du jeu c'est un Component +/// Tout les blocks du jeu c'est un Component. pub enum BlockType { - /// Un avant post + /// Un avant post. Outpost, - /// Un caserne + /// Un caserne. Caserne, - /// un chateau + /// un chateau. Castle, - /// une ferme + /// Une ferme. Farm, - /// une block d'herbe + /// Une block d'herbe. Grass, - /// une forêt + /// Une forêt. GrassForest, - /// une montagne + /// une montagne. GrassHill, - /// une mine + /// Une mine. Mine, - /// une tower + /// Une tower. Tower, - /// un ameliorateur + /// Un ameliorateur. Upgradeur, - /// un mur + /// Un mur. Wall, - /// une ferme a animaux + /// Une ferme a animaux. Sheep, } impl BlockType { - /// permet de récupérer les images des blocks pour les afficher + /// Permet de récupérer les images des blocks pour les afficher. pub fn get_image(&self, asset_server: &AssetServer) -> Handle { match self { Self::Outpost => asset_server.load("map/Outpost.png"), @@ -50,7 +50,7 @@ impl BlockType { } } - /// permet de récupérer les textes des blocks + /// Permet de récupérer les textes des blocks. pub const fn get_text(&self) -> &str { match self { Self::Caserne => "a barracks, it allows you to create troops", @@ -68,7 +68,7 @@ impl BlockType { } } - /// permet de récupérer les prix des blocks sous forme de texte + /// Permet de récupérer les prix des blocks sous forme de texte. pub fn get_text_price(&self) -> String { format!( "{:?}\n\n{} Wood,\n{} Stone", @@ -78,7 +78,7 @@ impl BlockType { ) } - /// permet de récupérer les prix des blocks + /// Permet de récupérer les prix des blocks. pub fn get_price(&self) -> [u32; 2] { match self { Self::Outpost => [2300, 3000], diff --git a/src/map/identity.rs b/src/map/identity.rs index d3bf86c..4defcf6 100644 --- a/src/map/identity.rs +++ b/src/map/identity.rs @@ -1,25 +1,25 @@ -//! on stocke les données des identity (fonction, enum et struct) +//! On stocke les données des identity (fonction, enum et struct). use bevy::prelude::*; #[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] -/// permet de situer le joueur dans le jeu +/// Permet de situer le joueur dans le jeu. pub enum Identity { - /// represente le joueur 1 + /// Represente le joueur 1. Joueur1, - /// represente le joueur 2 + /// Represente le joueur 2. Joueur2, - /// represente le spectateur + /// Represente le spectateur. Spectateur, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] -/// permet de donné la posetion d'un block au joueur dans le jeu +/// Permet de donné la posetion d'un block au joueur dans le jeu. pub enum BlockApartenance { - /// represente le joueur 1 + /// Represente le joueur 1. Joueur1, - /// represente le joueur 2 + /// Represente le joueur 2. Joueur2, - /// represente les blocks neutres + /// Represente les blocks neutres. Neutre, } diff --git a/src/map/position.rs b/src/map/position.rs index aef2939..7d0c06a 100644 --- a/src/map/position.rs +++ b/src/map/position.rs @@ -1,19 +1,19 @@ -//! on stocke les données des position (fonction, enum et struct) +//! On stocke les données des position (fonction, enum et struct). use bevy::prelude::*; use map::identity::*; #[derive(Component)] -/// position du block +/// Position du block. pub struct BlockPosition { - /// la position en x + /// La position en x. pub x: u8, - /// la position en y + /// La position en y. pub y: u8, } impl BlockPosition { - /// retourne la position en x et y dans la map en foction de la position abstraite + /// Retourne la position en x et y dans la map en foction de la position abstraite. pub fn to_transform(&self, identity: Identity) -> Transform { let max_y: u8 = 9; let max_x = 10.; From ebf4b39b3989fd92064f3068436533b538a12254 Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 21 May 2023 19:04:36 +0200 Subject: [PATCH 06/11] fmt --- src/map/block.rs | 15 +++++++++++++-- src/map/identity.rs | 4 ++++ src/map/position.rs | 1 + 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/map/block.rs b/src/map/block.rs index 0eb5eec..0ab3f5f 100644 --- a/src/map/block.rs +++ b/src/map/block.rs @@ -1,32 +1,43 @@ -//! On stocke les données des blocks (fonction, enum et struct). +//! Stockage des données des blocks (fonction, enum et struct). use bevy::prelude::*; #[derive(Component, Debug, PartialEq, Clone, Copy, Eq, Hash)] -/// Tout les blocks du jeu c'est un Component. +/// Le type d'un block. pub enum BlockType { /// Un avant post. Outpost, + /// Un caserne. Caserne, + /// un chateau. Castle, + /// Une ferme. Farm, + /// Une block d'herbe. Grass, + /// Une forêt. GrassForest, + /// une montagne. GrassHill, + /// Une mine. Mine, + /// Une tower. Tower, + /// Un ameliorateur. Upgradeur, + /// Un mur. Wall, + /// Une ferme a animaux. Sheep, } diff --git a/src/map/identity.rs b/src/map/identity.rs index 4defcf6..6315c59 100644 --- a/src/map/identity.rs +++ b/src/map/identity.rs @@ -7,8 +7,10 @@ use bevy::prelude::*; pub enum Identity { /// Represente le joueur 1. Joueur1, + /// Represente le joueur 2. Joueur2, + /// Represente le spectateur. Spectateur, } @@ -18,8 +20,10 @@ pub enum Identity { pub enum BlockApartenance { /// Represente le joueur 1. Joueur1, + /// Represente le joueur 2. Joueur2, + /// Represente les blocks neutres. Neutre, } diff --git a/src/map/position.rs b/src/map/position.rs index 7d0c06a..d89d898 100644 --- a/src/map/position.rs +++ b/src/map/position.rs @@ -8,6 +8,7 @@ use map::identity::*; pub struct BlockPosition { /// La position en x. pub x: u8, + /// La position en y. pub y: u8, } From 83aec80597b7429ee55e38561a9d17329871bdb3 Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 21 May 2023 19:06:10 +0200 Subject: [PATCH 07/11] changement documentation --- src/map/identity.rs | 2 +- src/map/position.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/map/identity.rs b/src/map/identity.rs index 6315c59..3221cb8 100644 --- a/src/map/identity.rs +++ b/src/map/identity.rs @@ -1,4 +1,4 @@ -//! On stocke les données des identity (fonction, enum et struct). +//! Stockage des données des identity (fonction, enum et struct). use bevy::prelude::*; diff --git a/src/map/position.rs b/src/map/position.rs index d89d898..87288a2 100644 --- a/src/map/position.rs +++ b/src/map/position.rs @@ -1,4 +1,4 @@ -//! On stocke les données des position (fonction, enum et struct). +//! Stockage des données des position (fonction, enum et struct). use bevy::prelude::*; use map::identity::*; From 03a3870e7083d31518df70f7cda78c2dd70dec2d Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 21 May 2023 20:21:36 +0200 Subject: [PATCH 08/11] nouvelle mecanique d'ID --- src/map/identity.rs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/map/identity.rs b/src/map/identity.rs index 3221cb8..5c8d6d6 100644 --- a/src/map/identity.rs +++ b/src/map/identity.rs @@ -3,16 +3,21 @@ use bevy::prelude::*; #[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] -/// Permet de situer le joueur dans le jeu. -pub enum Identity { - /// Represente le joueur 1. - Joueur1, +/// Permet de donné un idée a un joueur ou un block pour lui donné une identité. +pub struct Id { + /// L'Id du joueur ou du component + id: u32, +} - /// Represente le joueur 2. - Joueur2, - - /// Represente le spectateur. - Spectateur, +impl Id { + /// Permet de verifier l'Id du joueur avec une Id donné + pub fn verifi_id(&self, id_a_verifie: &Id) -> bool { + if self.id == id_a_verifie.id { + true + } else { + false + } + } } #[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] From 788fe413ef4b856c38456f4cae184c6f94450965 Mon Sep 17 00:00:00 2001 From: Corentin Bajamadi Date: Mon, 22 May 2023 13:33:38 +0200 Subject: [PATCH 09/11] en un fichier --- src/{map/block.rs => data_block.rs} | 71 ++++++++++++++++++++++++++++- src/map/identity.rs | 34 -------------- src/map/position.rs | 32 ------------- 3 files changed, 70 insertions(+), 67 deletions(-) rename src/{map/block.rs => data_block.rs} (66%) delete mode 100644 src/map/identity.rs delete mode 100644 src/map/position.rs diff --git a/src/map/block.rs b/src/data_block.rs similarity index 66% rename from src/map/block.rs rename to src/data_block.rs index 0ab3f5f..f9dc2cb 100644 --- a/src/map/block.rs +++ b/src/data_block.rs @@ -1,4 +1,12 @@ -//! Stockage des données des blocks (fonction, enum et struct). +//! Stockage des données des blocks. + +#![deny(clippy::missing_docs_in_private_items)] +#![deny(clippy::unwrap_in_result)] +#![deny(clippy::unwrap_used)] +#![deny(clippy::nursery)] +#![deny(missing_docs)] +#![deny(clippy::all)] +#![deny(warnings)] use bevy::prelude::*; @@ -107,3 +115,64 @@ impl BlockType { } } } + + +#[derive(Component)] +/// Position du block. +pub struct BlockPosition { + /// La position en x. + pub x: u8, + + /// La position en y. + pub y: u8, +} + +impl BlockPosition { + /// Retourne la position en x et y dans la map en foction de la position abstraite. + pub fn to_transform(&self, identity: Identity) -> Transform { + let max_y: u8 = 9; + let max_x = 10.; + let new_y = max_y - 1 - self.y; + let offset_x = new_y % 2; + + let mut new_x = (offset_x as f32).mul_add(0.5, self.x as f32); + if identity == Identity::Joueur2 { + new_x = max_x - new_x; + }; + + Transform::from_xyz(new_x, new_y as f32 * 0.42, self.y as f32) + .with_scale(Vec3::splat(1.0 / 185.0)) + } +} + + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] +/// Permet de donné un idée a un joueur ou un block pour lui donné une identité. +pub struct Id { + /// L'Id du joueur ou du component + id: u32, +} + +impl Id { + /// Permet de verifier l'Id du joueur avec une Id donné + pub fn verifi_id(&self, id_a_verifie: &Id) -> bool { + if self.id == id_a_verifie.id { + true + } else { + false + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] +/// Permet de donné la posetion d'un block au joueur dans le jeu. +pub enum BlockApartenance { + /// Represente le joueur 1. + Joueur1, + + /// Represente le joueur 2. + Joueur2, + + /// Represente les blocks neutres. + Neutre, +} diff --git a/src/map/identity.rs b/src/map/identity.rs deleted file mode 100644 index 5c8d6d6..0000000 --- a/src/map/identity.rs +++ /dev/null @@ -1,34 +0,0 @@ -//! Stockage des données des identity (fonction, enum et struct). - -use bevy::prelude::*; - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] -/// Permet de donné un idée a un joueur ou un block pour lui donné une identité. -pub struct Id { - /// L'Id du joueur ou du component - id: u32, -} - -impl Id { - /// Permet de verifier l'Id du joueur avec une Id donné - pub fn verifi_id(&self, id_a_verifie: &Id) -> bool { - if self.id == id_a_verifie.id { - true - } else { - false - } - } -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] -/// Permet de donné la posetion d'un block au joueur dans le jeu. -pub enum BlockApartenance { - /// Represente le joueur 1. - Joueur1, - - /// Represente le joueur 2. - Joueur2, - - /// Represente les blocks neutres. - Neutre, -} diff --git a/src/map/position.rs b/src/map/position.rs deleted file mode 100644 index 87288a2..0000000 --- a/src/map/position.rs +++ /dev/null @@ -1,32 +0,0 @@ -//! Stockage des données des position (fonction, enum et struct). - -use bevy::prelude::*; -use map::identity::*; - -#[derive(Component)] -/// Position du block. -pub struct BlockPosition { - /// La position en x. - pub x: u8, - - /// La position en y. - pub y: u8, -} - -impl BlockPosition { - /// Retourne la position en x et y dans la map en foction de la position abstraite. - pub fn to_transform(&self, identity: Identity) -> Transform { - let max_y: u8 = 9; - let max_x = 10.; - let new_y = max_y - 1 - self.y; - let offset_x = new_y % 2; - - let mut new_x = (offset_x as f32).mul_add(0.5, self.x as f32); - if identity == Identity::Joueur2 { - new_x = max_x - new_x; - }; - - Transform::from_xyz(new_x, new_y as f32 * 0.42, self.y as f32) - .with_scale(Vec3::splat(1.0 / 185.0)) - } -} From 29327b959a4d391c6165843941e6b60669d20747 Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Mon, 22 May 2023 20:47:44 +0200 Subject: [PATCH 10/11] fix error --- src/data_block.rs | 28 ++-------------------------- src/lib.rs | 1 + 2 files changed, 3 insertions(+), 26 deletions(-) diff --git a/src/data_block.rs b/src/data_block.rs index f9dc2cb..82387c4 100644 --- a/src/data_block.rs +++ b/src/data_block.rs @@ -116,7 +116,6 @@ impl BlockType { } } - #[derive(Component)] /// Position du block. pub struct BlockPosition { @@ -127,25 +126,6 @@ pub struct BlockPosition { pub y: u8, } -impl BlockPosition { - /// Retourne la position en x et y dans la map en foction de la position abstraite. - pub fn to_transform(&self, identity: Identity) -> Transform { - let max_y: u8 = 9; - let max_x = 10.; - let new_y = max_y - 1 - self.y; - let offset_x = new_y % 2; - - let mut new_x = (offset_x as f32).mul_add(0.5, self.x as f32); - if identity == Identity::Joueur2 { - new_x = max_x - new_x; - }; - - Transform::from_xyz(new_x, new_y as f32 * 0.42, self.y as f32) - .with_scale(Vec3::splat(1.0 / 185.0)) - } -} - - #[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] /// Permet de donné un idée a un joueur ou un block pour lui donné une identité. pub struct Id { @@ -155,12 +135,8 @@ pub struct Id { impl Id { /// Permet de verifier l'Id du joueur avec une Id donné - pub fn verifi_id(&self, id_a_verifie: &Id) -> bool { - if self.id == id_a_verifie.id { - true - } else { - false - } + pub const fn verifi_id(&self, id_a_verifie: &Self) -> bool { + self.id == id_a_verifie.id } } diff --git a/src/lib.rs b/src/lib.rs index b307c1c..5015cdd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,3 +9,4 @@ #![deny(warnings)] // TODO +pub mod data_block; From 7888ccabe64b20527e0a515bf1be8ad270569965 Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Mon, 22 May 2023 22:13:53 +0200 Subject: [PATCH 11/11] Refactorisation du code avec Tipragot --- Cargo.lock | 1 + Cargo.toml | 1 + src/data_block.rs | 154 --------------------------------- src/lib.rs | 20 ++++- src/{bin/client.rs => main.rs} | 2 +- src/map.rs | 72 +++++++++++++++ 6 files changed, 92 insertions(+), 158 deletions(-) delete mode 100644 src/data_block.rs rename src/{bin/client.rs => main.rs} (88%) create mode 100644 src/map.rs diff --git a/Cargo.lock b/Cargo.lock index 7d071f8..a3b016e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1024,6 +1024,7 @@ name = "border-wars" version = "0.1.0" dependencies = [ "bevy", + "slotmap", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index d273036..f6994e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,3 +5,4 @@ edition = "2021" [dependencies] bevy = "0.10.1" +slotmap = "1.0.6" diff --git a/src/data_block.rs b/src/data_block.rs deleted file mode 100644 index 82387c4..0000000 --- a/src/data_block.rs +++ /dev/null @@ -1,154 +0,0 @@ -//! Stockage des données des blocks. - -#![deny(clippy::missing_docs_in_private_items)] -#![deny(clippy::unwrap_in_result)] -#![deny(clippy::unwrap_used)] -#![deny(clippy::nursery)] -#![deny(missing_docs)] -#![deny(clippy::all)] -#![deny(warnings)] - -use bevy::prelude::*; - -#[derive(Component, Debug, PartialEq, Clone, Copy, Eq, Hash)] -/// Le type d'un block. -pub enum BlockType { - /// Un avant post. - Outpost, - - /// Un caserne. - Caserne, - - /// un chateau. - Castle, - - /// Une ferme. - Farm, - - /// Une block d'herbe. - Grass, - - /// Une forêt. - GrassForest, - - /// une montagne. - GrassHill, - - /// Une mine. - Mine, - - /// Une tower. - Tower, - - /// Un ameliorateur. - Upgradeur, - - /// Un mur. - Wall, - - /// Une ferme a animaux. - Sheep, -} - -impl BlockType { - /// Permet de récupérer les images des blocks pour les afficher. - pub fn get_image(&self, asset_server: &AssetServer) -> Handle { - match self { - Self::Outpost => asset_server.load("map/Outpost.png"), - Self::Caserne => asset_server.load("map/Caserne.png"), - Self::Castle => asset_server.load("map/Castle.png"), - Self::Farm => asset_server.load("map/Farm.png"), - Self::Grass => asset_server.load("map/Grass.png"), - Self::GrassForest => asset_server.load("map/GrassForest.png"), - Self::GrassHill => asset_server.load("map/GrassHill.png"), - Self::Mine => asset_server.load("map/Mine.png"), - Self::Tower => asset_server.load("map/Tower.png"), - Self::Upgradeur => asset_server.load("map/Upgradeur.png"), - Self::Wall => asset_server.load("map/Wall.png"), - Self::Sheep => asset_server.load("map/Sheep.png"), - } - } - - /// Permet de récupérer les textes des blocks. - pub const fn get_text(&self) -> &str { - match self { - Self::Caserne => "a barracks, it allows you to create troops", - Self::Castle => "a castle, it's a base", - Self::Grass => "a block of grass, it's useless", - Self::GrassForest => "a forest, if you break it you can collect resources", - Self::GrassHill => "a mountain, if you break it you can collect resources", - Self::Mine => "a mine, it allows you to collect resources", - Self::Farm => "a farm, it allows you to collect resources", - Self::Outpost => "an outpost, it allows you to teleport your troops", - Self::Tower => "a defense tower, it allows you to defend your troops", - Self::Upgradeur => "an upgrader", - Self::Wall => "a wall", - Self::Sheep => "a food reseve wich permit create an army", - } - } - - /// Permet de récupérer les prix des blocks sous forme de texte. - pub fn get_text_price(&self) -> String { - format!( - "{:?}\n\n{} Wood,\n{} Stone", - self, - self.get_price()[1], - self.get_price()[0] - ) - } - - /// Permet de récupérer les prix des blocks. - pub fn get_price(&self) -> [u32; 2] { - match self { - Self::Outpost => [2300, 3000], - Self::Caserne => [600, 400], - Self::Castle => todo!(), - Self::Farm => [200, 300], - Self::Grass => todo!(), - Self::GrassForest => todo!(), - Self::GrassHill => todo!(), - Self::Mine => [300, 200], - Self::Tower => [1500, 1500], - Self::Upgradeur => [1000, 1000], - Self::Wall => [4000, 4000], - Self::Sheep => [400, 500], - } - } -} - -#[derive(Component)] -/// Position du block. -pub struct BlockPosition { - /// La position en x. - pub x: u8, - - /// La position en y. - pub y: u8, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] -/// Permet de donné un idée a un joueur ou un block pour lui donné une identité. -pub struct Id { - /// L'Id du joueur ou du component - id: u32, -} - -impl Id { - /// Permet de verifier l'Id du joueur avec une Id donné - pub const fn verifi_id(&self, id_a_verifie: &Self) -> bool { - self.id == id_a_verifie.id - } -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Component)] -/// Permet de donné la posetion d'un block au joueur dans le jeu. -pub enum BlockApartenance { - /// Represente le joueur 1. - Joueur1, - - /// Represente le joueur 2. - Joueur2, - - /// Represente les blocks neutres. - Neutre, -} diff --git a/src/lib.rs b/src/lib.rs index 5015cdd..dfde36f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,4 @@ -//! Contient les fonctions utilisées dans le jeu. +//! Contient les structures de données permettant le bon fonctionnement du jeu. #![deny(clippy::missing_docs_in_private_items)] #![deny(clippy::unwrap_in_result)] @@ -8,5 +8,19 @@ #![deny(clippy::all)] #![deny(warnings)] -// TODO -pub mod data_block; +pub mod map; + +/// Position d'un object sur la carte du jeu. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Position { + /// La position en x. + pub x: u8, + + /// La position en y. + pub y: u8, +} + +slotmap::new_key_type! { + /// Peut être utiliser pour identifier n'importe quel objet appartenant a un joueur (le joueur compris). + pub struct PlayerId; +} diff --git a/src/bin/client.rs b/src/main.rs similarity index 88% rename from src/bin/client.rs rename to src/main.rs index 90d6504..41d4fbd 100644 --- a/src/bin/client.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -//! Permet de lancer le jeu du client. +//! Permet de lancer le jeu. #![deny(clippy::missing_docs_in_private_items)] #![deny(clippy::unwrap_in_result)] diff --git a/src/map.rs b/src/map.rs new file mode 100644 index 0000000..7073893 --- /dev/null +++ b/src/map.rs @@ -0,0 +1,72 @@ +//! Contiens tous ce qui est relatif à la carte du jeu. + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +/// Une case sur la carte du jeu. +pub enum Tile { + /// Un chateau. + /// + /// C'est la base du joueur qui doit defendre. Le but des autres joueurs est de la détruire pour gagner la partie. + Castle, + + /// De l'herbe. + /// + /// Un case "vide" ou on peux construire et y deplacer des troupes + Grass, + + /// Une forêt. + /// + /// Une case permettant de récupérer rapidement du bois. + /// Elle permet aussi de cacher des troupes a l'interieur. + Forest, + + /// Une montagne. + /// + /// Une case permettant de récupérer rapidement de la p + Hill, + + /// Une ferme. + /// + /// Permet de produire du bois. + /// Le nombre de bois généré peut être amélioré à l'aide d'un [Tile::Upgrader]. + Lumberjack, + + /// Une mine. + /// + /// Permet de produire de la pierre. + /// Le nombre de pierre généré peut être amélioré à l'aide d'un [Tile::Upgrader]. + Mine, + + /// Une ferme. + /// + /// Permet de produire de la nourriture. + /// Le nombre de nourriture généré peut être amélioré à l'aide d'un [Tile::Upgrader]. + Farm, + + /// Un avant poste. + /// + /// Permet de déplacer les troupes plus rapidement en les faisant aller d'un avant poste a l'autre comme un portail de téléportation. + Outpost, + + /// Un caserne. + /// + /// Permet de faire apparaitre de nouvelles troupes. + /// Le cout des troupes peut être réduis a l'aide d'un [Tile::Upgrader]. + Barrack, + + /// Une tower. + /// + /// Permet de deffendre le territoire des assauts enemie. + /// Elle ajoute des dégats au troupes dans un certain rayon. + /// Ce rayon peut être amélioré a l'aide d'un [Tile::Upgrader]. + Tower, + + /// Un ameliorateur. + /// + /// Permet d'améliorer les performances des batiments adjacents. + Upgrader, + + /// Un mur. + /// + /// Permet de bloquer le passage des troupes. + Wall, +}