diff --git a/map/src/lib.rs b/map/src/lib.rs index 4ba63c6..b43f5ca 100644 --- a/map/src/lib.rs +++ b/map/src/lib.rs @@ -4,14 +4,25 @@ use thiserror::Error; use tiled::{LayerType, Loader}; pub mod tiles; -use tiles::{InvalidTileID, MapBaseTile, ObjectTile}; +use tiles::{InvalidTileID, MapBaseTile, ObjectTile, PlayerTile}; + +#[derive(Clone, Debug, SelfRustTokenize)] +pub struct Player { + start: (u8, u8), + goal: Option<(u8, u8)> +} #[derive(Clone, Debug, SelfRustTokenize)] pub struct Map { pub width: u8, pub height: u8, pub base_layer: Vec>, - pub object_layer: Vec>> + pub object_layer: Vec>>, + pub global_goal: Option<(u8, u8)>, + pub player_1: Option, + pub player_2: Option, + pub player_3: Option, + pub player_4: Option } #[derive(Error, Debug)] @@ -40,6 +51,11 @@ impl Map { let height: u8 = map.height.try_into().map_err(|_| MapError::ToHight)?; let mut base_layer = Vec::with_capacity(height as usize); let mut object_layer = Vec::with_capacity(height as usize); + let mut global_goal = None; + let mut player_1 = None; + let mut player_2 = None; + let mut player_3 = None; + let mut player_4 = None; for (i, layer) in map.layers().enumerate() { match i { 0 => match layer.layer_type() { @@ -74,6 +90,49 @@ impl Map { }, _ => return Err(MapError::WrongLayer(i, "TileLayer".to_owned())) }, + 2 => match layer.layer_type() { + LayerType::Tiles(tile_layer) => { + for x in 0..width { + for y in 0..height { + if let Some(tile) = + tile_layer.get_tile(x.into(), y.into()) + { + let tile = PlayerTile::try_from(tile.id())?; + match tile { + PlayerTile::Car1 => { + player_1 = Some(Player { + start: (x, y), + goal: None + }) + }, + PlayerTile::Car2 => { + player_2 = Some(Player { + start: (x, y), + goal: None + }) + }, + PlayerTile::Car3 => { + player_3 = Some(Player { + start: (x, y), + goal: None + }) + }, + PlayerTile::Car4 => { + player_4 = Some(Player { + start: (x, y), + goal: None + }) + }, + PlayerTile::GlobalGoal => { + global_goal = Some((x, y)) + }, + } + } + } + } + }, + _ => return Err(MapError::WrongLayer(i, "TileLayer".to_owned())) + }, _ => return Err(MapError::ToManyLayers) } } @@ -81,7 +140,12 @@ impl Map { width, height, base_layer, - object_layer + object_layer, + global_goal, + player_1, + player_2, + player_3, + player_4 }) } diff --git a/map/src/main.rs b/map/src/main.rs index 031f837..d7c64be 100644 --- a/map/src/main.rs +++ b/map/src/main.rs @@ -8,12 +8,12 @@ pub struct Opt { fn main() { let opt = Opt::parse(); - let result = Map::from_tmx(&opt.file); + let result = Map::from_tmx(opt.file); match result { Err(err) => { eprintln!("ERROR: {err}"); std::process::exit(1); }, - Ok(map) => println!("{map:#?}") + Ok(map) => println!("{map:#?}\nmap is valid") } } diff --git a/map/src/tiles.rs b/map/src/tiles.rs index 10a37ba..65b19d0 100644 --- a/map/src/tiles.rs +++ b/map/src/tiles.rs @@ -34,7 +34,7 @@ impl TryFrom for MapBaseTile { #[repr(u8)] pub enum ObjectTile { //numbers must match them from the Tiled tilesets - Stone = 0 + Stone = 1 } impl TryFrom for ObjectTile { @@ -46,3 +46,26 @@ impl TryFrom for ObjectTile { Self::try_from_primitive(value_u8).map_err(|_| Self::Error::InvalidId(value)) } } + +///Store all Tiles, with can be place the layer above the background +#[derive(Clone, Copy, Debug, Eq, SelfRustTokenize, PartialEq, TryFromPrimitive)] +#[repr(u8)] +pub enum PlayerTile { + //numbers must match them from the Tiled tilesets + Car1 = 0, + Car2 = 1, + Car3 = 2, + Car4 = 3, + //goal, which can be used by all players + GlobalGoal = 4 +} + +impl TryFrom for PlayerTile { + type Error = InvalidTileID; + fn try_from(value: u32) -> Result { + let value_u8: u8 = value + .try_into() + .map_err(|_| Self::Error::InvalidId(value))?; + Self::try_from_primitive(value_u8).map_err(|_| Self::Error::InvalidId(value)) + } +} diff --git a/pc/assets/img/ObjectTiles/ObjectTiles.tsx b/pc/assets/img/ObjectTiles/ObjectTiles.tsx index aed69c1..dbb2d51 100644 --- a/pc/assets/img/ObjectTiles/ObjectTiles.tsx +++ b/pc/assets/img/ObjectTiles/ObjectTiles.tsx @@ -1,2 +1,7 @@ - + + + + + + diff --git a/pc/assets/img/Player/Player.tsx b/pc/assets/img/Player/Player.tsx new file mode 100644 index 0000000..e7cbd19 --- /dev/null +++ b/pc/assets/img/Player/Player.tsx @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/pc/assets/img/goal.png b/pc/assets/img/Player/goal.png similarity index 100% rename from pc/assets/img/goal.png rename to pc/assets/img/Player/goal.png diff --git a/pc/assets/img/Auto1.png b/pc/assets/img/Player/player1_car.png similarity index 100% rename from pc/assets/img/Auto1.png rename to pc/assets/img/Player/player1_car.png diff --git a/pc/assets/img/player2_car.png b/pc/assets/img/Player/player2_car.png similarity index 100% rename from pc/assets/img/player2_car.png rename to pc/assets/img/Player/player2_car.png diff --git a/pc/assets/img/player3_car.png b/pc/assets/img/Player/player3_car.png similarity index 100% rename from pc/assets/img/player3_car.png rename to pc/assets/img/Player/player3_car.png diff --git a/pc/assets/img/player4_car.png b/pc/assets/img/Player/player4_car.png similarity index 100% rename from pc/assets/img/player4_car.png rename to pc/assets/img/Player/player4_car.png diff --git a/pc/assets/img/player1_car.png b/pc/assets/img/player1_car.png deleted file mode 100644 index 12f4a22..0000000 Binary files a/pc/assets/img/player1_car.png and /dev/null differ diff --git a/pc/assets/level/001.tmx b/pc/assets/level/001.tmx index 507cc91..8b79021 100644 --- a/pc/assets/level/001.tmx +++ b/pc/assets/level/001.tmx @@ -1,7 +1,8 @@ - + + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, @@ -19,12 +20,25 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, +0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,3,0,0,3,3,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0, +0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,2,0,2,0,0,0,0, -0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4,0,0,0,0,0,0,0,0,0,0,7,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/pc/src/main.rs b/pc/src/main.rs index 64e197b..c2f875f 100644 --- a/pc/src/main.rs +++ b/pc/src/main.rs @@ -4,6 +4,7 @@ use tetra::{ Context, ContextBuilder, State }; type Vec2 = vek::vec::repr_c::vec2::Vec2; +use log::info; use m3_macro::include_map; use m3_map::Map; use once_cell::sync::Lazy; @@ -11,7 +12,6 @@ use tetra::{ graphics::{DrawParams, Texture}, time::get_delta_time }; -use log::{info}; mod tiles; use tiles::Textures;