tile manager
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -2022,7 +2022,7 @@ dependencies = [
|
|||||||
"vec_map",
|
"vec_map",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
"web-sys",
|
"web-sys",
|
||||||
"windows 0.54.0",
|
"windows 0.48.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
use std::{collections::HashMap, fs};
|
|
||||||
|
|
||||||
use asset_loader::create_asset_loader;
|
use asset_loader::create_asset_loader;
|
||||||
use bevy::{
|
use bevy::{
|
||||||
asset::{Asset, AssetLoader, AsyncReadExt},
|
asset::{Asset, AssetLoader, AsyncReadExt},
|
||||||
@@ -9,58 +7,34 @@ use bevy::{
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
#[derive(Resource, Debug)]
|
#[derive(Resource, Debug)]
|
||||||
pub struct TileManager {
|
pub struct TileManager {
|
||||||
pub tiles: HashMap<u32, TileAsset>,
|
pub tiles: Vec<Handle<TileAsset>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for TileManager {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self { tiles: vec![] }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TileManager {
|
||||||
|
pub fn register_tile(&mut self, tile: Handle<TileAsset>) -> usize {
|
||||||
|
let id = self.tiles.len();
|
||||||
|
self.tiles.push(tile);
|
||||||
|
return id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, TypePath, Asset)]
|
#[derive(Serialize, Deserialize, Debug, TypePath, Asset)]
|
||||||
pub struct TileAsset {
|
pub struct TileAsset {
|
||||||
#[serde(skip_serializing, skip_deserializing)]
|
#[serde(skip)]
|
||||||
pub id: u32,
|
pub id: usize,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub texture_id: u32,
|
pub texture_id: u32,
|
||||||
|
#[serde(skip)]
|
||||||
|
pub texture: String,
|
||||||
pub side_texture_id: u32,
|
pub side_texture_id: u32,
|
||||||
|
#[serde(skip)]
|
||||||
|
pub side_texture: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
create_asset_loader!(TileAssetPlugin, TileAssetLoader, TileAsset, &["tile.json"]);
|
create_asset_loader!(TileAssetPlugin, TileAssetLoader, TileAsset, &["tile.json"]);
|
||||||
|
|
||||||
impl TileManager {
|
|
||||||
pub fn new(path: &str) -> Result<Self, String> {
|
|
||||||
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<TileAsset, serde_json::Error> =
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ use bevy_rapier3d::render::RapierDebugRenderPlugin;
|
|||||||
use camera_system::PhosCameraPlugin;
|
use camera_system::PhosCameraPlugin;
|
||||||
use iyes_perf_ui::prelude::*;
|
use iyes_perf_ui::prelude::*;
|
||||||
use world_generation::hex_utils::offset_to_world;
|
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::{
|
use world_generation::{
|
||||||
heightmap::generate_heightmap, mesh_generator::generate_chunk_mesh, prelude::*,
|
heightmap::generate_heightmap, mesh_generator::generate_chunk_mesh, prelude::*,
|
||||||
};
|
};
|
||||||
@@ -23,7 +23,7 @@ impl Plugin for PhosGamePlugin {
|
|||||||
|
|
||||||
//Systems - Startup
|
//Systems - Startup
|
||||||
app.add_systems(Startup, init_game)
|
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
|
//Systems - Update
|
||||||
app.add_systems(Update, (check_texture, spawn_map, print_tiles));
|
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(PhosMap::default());
|
||||||
|
commands.insert_resource(TileManager::default());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Resource)]
|
|
||||||
struct TileResource(Handle<TileAsset>);
|
|
||||||
|
|
||||||
fn load_textures(mut commands: Commands, asset_server: Res<AssetServer>) {
|
fn load_textures(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
let main_tex = asset_server.load("textures/world/stack.png");
|
let main_tex = asset_server.load("textures/world/stack.png");
|
||||||
commands.insert_resource(ChunkAtlas {
|
commands.insert_resource(ChunkAtlas {
|
||||||
@@ -76,9 +74,16 @@ fn load_textures(mut commands: Commands, asset_server: Res<AssetServer>) {
|
|||||||
is_loaded: false,
|
is_loaded: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
let handle: Handle<TileAsset> = 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<TileManager>,
|
||||||
|
asset_server: Res<AssetServer>,
|
||||||
|
) {
|
||||||
|
let handle: Handle<TileAsset> = asset_server.load("tiles/Terra/Grass.tile.json");
|
||||||
|
tile_manager.register_tile(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn print_tiles(tile_assets: Res<Assets<TileAsset>>) {
|
fn print_tiles(tile_assets: Res<Assets<TileAsset>>) {
|
||||||
|
|||||||
Reference in New Issue
Block a user