From 7065c246373d1b35da3d1e10dc32e25235899421 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sat, 2 Apr 2022 12:52:02 -0400 Subject: [PATCH] Working on getting tiles to load --- game/dist/.gitignore | 1 + .../assets/env/env_beachTile/beachTile.tsx | 7 ++ .../env/env_beachTile/beachTileSwirly.tsx | 7 ++ .../env/env_beachTile/env_beachTile.png | Bin 0 -> 6332 bytes .../env/env_beachTile/env_beachTileSwirly.png | Bin 0 -> 7707 bytes game/dist/map_gameMap.tmx | 2 +- game/game_logic/Cargo.toml | 3 +- game/game_logic/src/coord_convert.rs | 11 ++ game/game_logic/src/lib.rs | 1 + .../src/rendering/utilities/map_render.rs | 96 ++++++++++++++++++ .../game_logic/src/rendering/utilities/mod.rs | 3 +- game/game_logic/src/scenes/mod.rs | 4 +- game/game_logic/src/scenes/test_fox.rs | 10 +- 13 files changed, 137 insertions(+), 8 deletions(-) create mode 100644 game/dist/.gitignore create mode 100644 game/dist/assets/env/env_beachTile/beachTile.tsx create mode 100644 game/dist/assets/env/env_beachTile/beachTileSwirly.tsx create mode 100644 game/dist/assets/env/env_beachTile/env_beachTile.png create mode 100644 game/dist/assets/env/env_beachTile/env_beachTileSwirly.png create mode 100644 game/game_logic/src/coord_convert.rs create mode 100644 game/game_logic/src/rendering/utilities/map_render.rs diff --git a/game/dist/.gitignore b/game/dist/.gitignore new file mode 100644 index 00000000..a06c1e50 --- /dev/null +++ b/game/dist/.gitignore @@ -0,0 +1 @@ +!**/env/ \ No newline at end of file diff --git a/game/dist/assets/env/env_beachTile/beachTile.tsx b/game/dist/assets/env/env_beachTile/beachTile.tsx new file mode 100644 index 00000000..01ca4a6e --- /dev/null +++ b/game/dist/assets/env/env_beachTile/beachTile.tsx @@ -0,0 +1,7 @@ + + + + + + + diff --git a/game/dist/assets/env/env_beachTile/beachTileSwirly.tsx b/game/dist/assets/env/env_beachTile/beachTileSwirly.tsx new file mode 100644 index 00000000..a2ed1733 --- /dev/null +++ b/game/dist/assets/env/env_beachTile/beachTileSwirly.tsx @@ -0,0 +1,7 @@ + + + + + + + diff --git a/game/dist/assets/env/env_beachTile/env_beachTile.png b/game/dist/assets/env/env_beachTile/env_beachTile.png new file mode 100644 index 0000000000000000000000000000000000000000..fafdd41af03cd058fdaeece270bd2828a21b062b GIT binary patch literal 6332 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 VK%XwOg$n=x002ovPDHLkV1l)Xyx9N% literal 0 HcmV?d00001 diff --git a/game/dist/map_gameMap.tmx b/game/dist/map_gameMap.tmx index 9ad47e4a..aab04cf8 100644 --- a/game/dist/map_gameMap.tmx +++ b/game/dist/map_gameMap.tmx @@ -2,7 +2,7 @@ - + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, diff --git a/game/game_logic/Cargo.toml b/game/game_logic/Cargo.toml index be0d2754..01481368 100644 --- a/game/game_logic/Cargo.toml +++ b/game/game_logic/Cargo.toml @@ -25,4 +25,5 @@ thiserror = "1.0.30" approx = "0.5.1" poll-promise = { version = "0.1.0", features = ["tokio"] } tempfile = "3.3.0" -nalgebra = "0.30.1" \ No newline at end of file +nalgebra = "0.30.1" +tiled = "0.10.1" \ No newline at end of file diff --git a/game/game_logic/src/coord_convert.rs b/game/game_logic/src/coord_convert.rs new file mode 100644 index 00000000..92d4d9a4 --- /dev/null +++ b/game/game_logic/src/coord_convert.rs @@ -0,0 +1,11 @@ +use nalgebra as na; + +/// Converts from the tiled coordinate system to the game coordinate system. +pub fn tiled_to_game(vec: na::Vector2) -> na::Vector2 { + na::Vector2::new(vec.x, vec.y * -1.0) +} + +/// Converts from the game coordinate system to the tiled coordinate system. +pub fn game_to_tiled(vec: na::Vector2) -> na::Vector2 { + tiled_to_game(vec) +} \ No newline at end of file diff --git a/game/game_logic/src/lib.rs b/game/game_logic/src/lib.rs index 7744fcec..f41e176c 100644 --- a/game/game_logic/src/lib.rs +++ b/game/game_logic/src/lib.rs @@ -40,6 +40,7 @@ pub(crate) mod project_constants; pub(crate) mod rendering; pub(crate) mod scenes; pub(crate) mod model; +pub(crate) mod coord_convert; /// This is the game logic entrypoint. Despite being async, /// this is expected to block the main thread for rendering and stuff. diff --git a/game/game_logic/src/rendering/utilities/map_render.rs b/game/game_logic/src/rendering/utilities/map_render.rs new file mode 100644 index 00000000..a94e79e3 --- /dev/null +++ b/game/game_logic/src/rendering/utilities/map_render.rs @@ -0,0 +1,96 @@ +use std::{collections::HashMap, sync::Arc}; + +use crate::asset_manager::InternalData; +use nalgebra as na; +use tiled::{Loader, ResourceCache, ResourcePath, ResourcePathBuf, Tileset}; + +/// Possible errors generated by the map loading process +#[derive(Debug, thiserror::Error)] +pub enum MapRenderError { + #[error("Could not load embedded asset: {0}")] + AssetNotFound(String), + #[error(transparent)] + TiledError(#[from] tiled::Error), +} + +#[derive(Debug)] +struct ProgramDataTileCache { + tilesets: HashMap>, + internal_loader: Loader, +} + +impl ProgramDataTileCache { + fn new() -> Self { + Self { + tilesets: HashMap::new(), + internal_loader: Loader::new(), + } + } +} + +impl ResourceCache for ProgramDataTileCache { + /// Load the tileset. First attempts to pull from an in-RAM cache, otherwise attempts to load from disk. + fn get_tileset(&self, path: impl AsRef) -> Option> { + let possibly_cached_tileset = self.tilesets.get(path.as_ref()).map(Clone::clone); + if let Some(tileset) = possibly_cached_tileset { + return Some(tileset); + } else { + // Pull the TSX from storage and parse it + InternalData::get(path.as_ref().to_str().unwrap()).map(|file| { + let data = file.data.into_owned(); + Arc::new( + self.internal_loader + .load_tsx_tileset_from(data.as_slice(), path) + .unwrap(), + ) + }) + + // .ok_or(MapRenderError::AssetNotFound(path.to_string()))? + // .data + // .into_owned(); + } + } + + fn get_or_try_insert_tileset_with( + &mut self, + path: ResourcePathBuf, + f: F, + ) -> Result, E> + where + F: FnOnce() -> Result, + { + Ok(match self.tilesets.entry(path) { + std::collections::hash_map::Entry::Occupied(o) => o.into_mut(), + std::collections::hash_map::Entry::Vacant(v) => v.insert(Arc::new(f()?)), + } + .clone()) + } +} + +#[derive(Debug)] +pub struct MapRenderer {} + +impl MapRenderer { + /// Construct a new MapRenderer. + pub fn new(tmx_path: &str) -> Result { + // Pull the TMX from storage + let data = InternalData::get(tmx_path) + .ok_or(MapRenderError::AssetNotFound(tmx_path.to_string()))? + .data + .into_owned(); + + // Attempt to parse the TMX file + let mut loader = Loader::with_cache(ProgramDataTileCache::new()); + let map = loader.load_tmx_map_from(data.as_slice(), tmx_path)?; + + Ok(Self {}) + } + + pub fn sample_friction_at(&self, position: na::Vector2) -> f32 { + todo!() + } + + pub fn sample_temperature_at(&self, position: na::Vector2) -> f32 { + todo!() + } +} diff --git a/game/game_logic/src/rendering/utilities/mod.rs b/game/game_logic/src/rendering/utilities/mod.rs index 09d38ecf..524ae38e 100644 --- a/game/game_logic/src/rendering/utilities/mod.rs +++ b/game/game_logic/src/rendering/utilities/mod.rs @@ -1 +1,2 @@ -pub mod anim_texture; \ No newline at end of file +pub mod anim_texture; +pub mod map_render; \ No newline at end of file diff --git a/game/game_logic/src/scenes/mod.rs b/game/game_logic/src/scenes/mod.rs index 940ccafd..98924aba 100644 --- a/game/game_logic/src/scenes/mod.rs +++ b/game/game_logic/src/scenes/mod.rs @@ -53,8 +53,8 @@ impl SceneRenderDelegate { constants: &ProjectConstants, ) { // For now, we will just render the game scene - self.scene_playable - .render_frame(raylib, rl_thread, &discord, global_resources, constants) + self.scene_test_fox + .render_frame(raylib, rl_thread, &discord, global_resources) .await; } } diff --git a/game/game_logic/src/scenes/test_fox.rs b/game/game_logic/src/scenes/test_fox.rs index 526dc57e..29911212 100644 --- a/game/game_logic/src/scenes/test_fox.rs +++ b/game/game_logic/src/scenes/test_fox.rs @@ -6,12 +6,13 @@ use nalgebra as na; use crate::{ discord::DiscordChannel, global_resource_package::GlobalResources, - rendering::utilities::anim_texture::AnimatedTexture, + rendering::utilities::{anim_texture::AnimatedTexture, map_render::MapRenderer}, }; #[derive(Debug)] pub struct TestFoxScene { fox_animation: AnimatedTexture, + world_map: MapRenderer } impl TestFoxScene { @@ -20,11 +21,14 @@ impl TestFoxScene { // Load the fox texture let fox = AnimatedTexture::new(raylib_handle, thread, "chr", "testFox").unwrap(); - Self { fox_animation: fox } + // Load the map + let map_renderer = MapRenderer::new("map_gameMap.tmx").unwrap(); + + Self { fox_animation: fox, world_map: map_renderer } } /// Handler for each frame - pub fn render_frame( + pub async fn render_frame( &mut self, raylib: &mut RaylibHandle, rl_thread: &RaylibThread,