From b2b95937cc5a0778e5827dcf2f17ad091c8e7f98 Mon Sep 17 00:00:00 2001 From: Amatsugu Date: Wed, 17 Apr 2024 23:01:57 -0400 Subject: [PATCH] tile manager --- Cargo.lock | 2 +- engine/world_generation/src/tile_manager.rs | 68 +++++++-------------- game/main/src/phos.rs | 19 +++--- 3 files changed, 34 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f4c3d4d..ceebda1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2022,7 +2022,7 @@ dependencies = [ "vec_map", "wasm-bindgen", "web-sys", - "windows 0.54.0", + "windows 0.48.0", ] [[package]] diff --git a/engine/world_generation/src/tile_manager.rs b/engine/world_generation/src/tile_manager.rs index 9438667..b3515ca 100644 --- a/engine/world_generation/src/tile_manager.rs +++ b/engine/world_generation/src/tile_manager.rs @@ -1,5 +1,3 @@ -use std::{collections::HashMap, fs}; - use asset_loader::create_asset_loader; use bevy::{ asset::{Asset, AssetLoader, AsyncReadExt}, @@ -9,58 +7,34 @@ use bevy::{ use serde::{Deserialize, Serialize}; #[derive(Resource, Debug)] pub struct TileManager { - pub tiles: HashMap, + pub tiles: Vec>, +} + +impl Default for TileManager { + fn default() -> Self { + Self { tiles: vec![] } + } +} + +impl TileManager { + pub fn register_tile(&mut self, tile: Handle) -> usize { + let id = self.tiles.len(); + self.tiles.push(tile); + return id; + } } #[derive(Serialize, Deserialize, Debug, TypePath, Asset)] pub struct TileAsset { - #[serde(skip_serializing, skip_deserializing)] - pub id: u32, + #[serde(skip)] + pub id: usize, pub name: String, pub texture_id: u32, + #[serde(skip)] + pub texture: String, pub side_texture_id: u32, + #[serde(skip)] + pub side_texture: String, } create_asset_loader!(TileAssetPlugin, TileAssetLoader, TileAsset, &["tile.json"]); - -impl TileManager { - pub fn new(path: &str) -> Result { - let mut cur_id: u32 = 0; - - let paths = fs::read_dir(path); - - if paths.is_err() { - return Err(paths.err().unwrap().to_string()); - } - - let mut manager = TileManager { - tiles: HashMap::new(), - }; - - for dir_entry in paths.unwrap() { - let cur_path = dir_entry.unwrap().path(); - if !cur_path.is_file() { - continue; - } - let data = fs::read_to_string(cur_path); - if data.is_err() { - return Err(data.err().unwrap().to_string()); - } - - let result: Result = - serde_json::from_str(data.unwrap().as_str()); - - if result.is_err() { - return Err(result.err().unwrap().to_string()); - } - - let mut tile = result.unwrap(); - tile.id = cur_id; - - manager.tiles.insert(tile.id, tile); - cur_id += 1; - } - - return Ok(manager); - } -} diff --git a/game/main/src/phos.rs b/game/main/src/phos.rs index 8a7348a..d441ce9 100644 --- a/game/main/src/phos.rs +++ b/game/main/src/phos.rs @@ -7,7 +7,7 @@ use bevy_rapier3d::render::RapierDebugRenderPlugin; use camera_system::PhosCameraPlugin; use iyes_perf_ui::prelude::*; use world_generation::hex_utils::offset_to_world; -use world_generation::tile_manager::{TileAsset, TileAssetPlugin}; +use world_generation::tile_manager::{self, TileAsset, TileAssetPlugin, TileManager}; use world_generation::{ heightmap::generate_heightmap, mesh_generator::generate_chunk_mesh, prelude::*, }; @@ -23,7 +23,7 @@ impl Plugin for PhosGamePlugin { //Systems - Startup app.add_systems(Startup, init_game) - .add_systems(Startup, (load_textures, create_map).chain()); + .add_systems(Startup, (load_textures, load_tiles, create_map).chain()); //Systems - Update app.add_systems(Update, (check_texture, spawn_map, print_tiles)); @@ -64,11 +64,9 @@ fn init_game(mut commands: Commands) { }); commands.insert_resource(PhosMap::default()); + commands.insert_resource(TileManager::default()); } -#[derive(Resource)] -struct TileResource(Handle); - fn load_textures(mut commands: Commands, asset_server: Res) { let main_tex = asset_server.load("textures/world/stack.png"); commands.insert_resource(ChunkAtlas { @@ -76,9 +74,16 @@ fn load_textures(mut commands: Commands, asset_server: Res) { is_loaded: false, }); - let handle: Handle = asset_server.load("tiles/Terra/Grass.tile.json"); + // commands.insert_resource(TileResource(handle)); +} - commands.insert_resource(TileResource(handle)); +fn load_tiles( + mut commands: Commands, + mut tile_manager: ResMut, + asset_server: Res, +) { + let handle: Handle = asset_server.load("tiles/Terra/Grass.tile.json"); + tile_manager.register_tile(handle); } fn print_tiles(tile_assets: Res>) {