Resource Loading, Tile Mapper, and Biome Painter implementation

This commit is contained in:
2024-04-19 23:04:29 -04:00
parent b1dc3b9aef
commit 2acbc3039f
7 changed files with 41 additions and 19 deletions

View File

@@ -7,7 +7,8 @@ pub mod macros {
$loader_name: ident,
$asset_type: ident,
$extensions: expr,
$($string_name: ident -> $handle_name: ident)*
$($string_name: ident -> $handle_name: ident)* ;
$($string_array_name: ident -> $handle_array_name: ident)* ?
) => {
use bevy::prelude::*;
use bevy::asset::{AssetLoader, AssetEvent, LoadContext, AsyncReadExt, io::Reader};
@@ -30,9 +31,15 @@ pub mod macros {
match event {
AssetEvent::LoadedWithDependencies { id } => {
let asset = assets.get_mut(id.clone()).unwrap();
$(
asset.$handle_name = asset_server.load(&asset.$string_name);
)*
$(
for i in 0..asset.$string_array_name.len(){
asset.$handle_array_name.push(asset_server.load(&asset.$string_array_name[i]));
}
)?
},
_ => (),
}

View File

@@ -35,7 +35,7 @@ pub fn generate_chunk(chunk_x: f64, chunk_z: f64, cfg: &GenerationConfig, seed:
return Chunk {
heights: result,
moisture: result.clone(),
tempurature: result.clone(),
temperature: result.clone(),
chunk_offset: IVec2::new(chunk_x as i32, chunk_z as i32),
};
}

View File

@@ -1,3 +1,4 @@
pub mod biome_painter;
pub mod heightmap;
pub mod hex_utils;
pub mod mesh_generator;
@@ -35,7 +36,7 @@ pub mod prelude {
pub struct Chunk {
pub heights: [f32; Chunk::SIZE * Chunk::SIZE],
pub moisture: [f32; Chunk::SIZE * Chunk::SIZE],
pub tempurature: [f32; Chunk::SIZE * Chunk::SIZE],
pub temperature: [f32; Chunk::SIZE * Chunk::SIZE],
pub chunk_offset: IVec2,
}
@@ -81,7 +82,7 @@ pub mod prelude {
pub fn get_tempurature(&self, pos: &HexCoord) -> f32 {
let chunk = &self.chunks[pos.to_chunk_index(self.width)];
return chunk.tempurature[pos.to_chunk_local_index()];
return chunk.temperature[pos.to_chunk_local_index()];
}
}

View File

@@ -29,12 +29,12 @@ pub struct TileAsset {
#[serde(skip)]
pub id: usize,
pub name: String,
#[serde(skip)]
pub texture_id: u32,
pub texture: String,
#[serde(skip)]
pub texture: String,
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"],;?);

View File

@@ -11,15 +11,30 @@ use crate::tile_manager::TileAsset;
pub struct TileMapper;
#[derive(Serialize, Deserialize, Debug, TypePath, Asset)]
struct TileMapperAsset {
pub struct TileMapperAsset {
#[serde(skip)]
pub tiles: Vec<Handle<TileAsset>>,
pub tiles_path: Vec<String>,
pub thresholds: Vec<f32>,
}
impl TileMapperAsset {
pub fn sample_tile(&self, height: f32) -> Handle<TileAsset> {
for i in 0..self.thresholds.len() {
let t = self.thresholds[i];
if t >= height {
return self.tiles[i].clone();
}
}
return self.tiles.last().unwrap().clone();
}
}
create_asset_loader!(
TileMapperAssetPlugin,
TileMapperAssetLoader,
TileMapperAsset,
&["mapper.json"],
&["mapper.json"],;
tiles_path -> tiles
?
);

View File

@@ -6,8 +6,10 @@ use bevy_rapier3d::plugin::{NoUserData, RapierPhysicsPlugin};
use bevy_rapier3d::render::RapierDebugRenderPlugin;
use camera_system::PhosCameraPlugin;
use iyes_perf_ui::prelude::*;
use world_generation::biome_painter::{BiomePainterAsset, BiomePainterPlugin};
use world_generation::hex_utils::offset_to_world;
use world_generation::tile_manager::{self, TileAsset, TileAssetPlugin, TileManager};
use world_generation::tile_mapper::TileMapperAssetPlugin;
use world_generation::{
heightmap::generate_heightmap, mesh_generator::generate_chunk_mesh, prelude::*,
};
@@ -36,6 +38,7 @@ impl Plugin for PhosGamePlugin {
//Assets
app.add_plugins(TileAssetPlugin);
app.add_plugins(TileMapperAssetPlugin);
app.add_plugins(BiomePainterPlugin);
//Physics
app.add_plugins(RapierPhysicsPlugin::<NoUserData>::default())
.add_plugins(RapierDebugRenderPlugin::default());
@@ -74,17 +77,13 @@ fn load_textures(mut commands: Commands, asset_server: Res<AssetServer>) {
handle: main_tex.clone(),
is_loaded: false,
});
// commands.insert_resource(TileResource(handle));
}
#[derive(Resource)]
struct Painter(Handle<BiomePainterAsset>);
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 load_tiles(mut commands: Commands, asset_server: Res<AssetServer>) {
let handle: Handle<BiomePainterAsset> = asset_server.load("biome_painters/terra.biomes.json");
commands.insert_resource(Painter(handle));
}
fn print_tiles(tile_assets: Res<Assets<TileAsset>>) {