Resource Loading, Tile Mapper, and Biome Painter implementation
This commit is contained in:
@@ -7,7 +7,8 @@ pub mod macros {
|
|||||||
$loader_name: ident,
|
$loader_name: ident,
|
||||||
$asset_type: ident,
|
$asset_type: ident,
|
||||||
$extensions: expr,
|
$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::prelude::*;
|
||||||
use bevy::asset::{AssetLoader, AssetEvent, LoadContext, AsyncReadExt, io::Reader};
|
use bevy::asset::{AssetLoader, AssetEvent, LoadContext, AsyncReadExt, io::Reader};
|
||||||
@@ -30,9 +31,15 @@ pub mod macros {
|
|||||||
match event {
|
match event {
|
||||||
AssetEvent::LoadedWithDependencies { id } => {
|
AssetEvent::LoadedWithDependencies { id } => {
|
||||||
let asset = assets.get_mut(id.clone()).unwrap();
|
let asset = assets.get_mut(id.clone()).unwrap();
|
||||||
|
|
||||||
$(
|
$(
|
||||||
asset.$handle_name = asset_server.load(&asset.$string_name);
|
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]));
|
||||||
|
}
|
||||||
|
)?
|
||||||
},
|
},
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ pub fn generate_chunk(chunk_x: f64, chunk_z: f64, cfg: &GenerationConfig, seed:
|
|||||||
return Chunk {
|
return Chunk {
|
||||||
heights: result,
|
heights: result,
|
||||||
moisture: result.clone(),
|
moisture: result.clone(),
|
||||||
tempurature: result.clone(),
|
temperature: result.clone(),
|
||||||
chunk_offset: IVec2::new(chunk_x as i32, chunk_z as i32),
|
chunk_offset: IVec2::new(chunk_x as i32, chunk_z as i32),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
pub mod biome_painter;
|
||||||
pub mod heightmap;
|
pub mod heightmap;
|
||||||
pub mod hex_utils;
|
pub mod hex_utils;
|
||||||
pub mod mesh_generator;
|
pub mod mesh_generator;
|
||||||
@@ -35,7 +36,7 @@ pub mod prelude {
|
|||||||
pub struct Chunk {
|
pub struct Chunk {
|
||||||
pub heights: [f32; Chunk::SIZE * Chunk::SIZE],
|
pub heights: [f32; Chunk::SIZE * Chunk::SIZE],
|
||||||
pub moisture: [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,
|
pub chunk_offset: IVec2,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +82,7 @@ pub mod prelude {
|
|||||||
|
|
||||||
pub fn get_tempurature(&self, pos: &HexCoord) -> f32 {
|
pub fn get_tempurature(&self, pos: &HexCoord) -> f32 {
|
||||||
let chunk = &self.chunks[pos.to_chunk_index(self.width)];
|
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()];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,12 +29,12 @@ pub struct TileAsset {
|
|||||||
#[serde(skip)]
|
#[serde(skip)]
|
||||||
pub id: usize,
|
pub id: usize,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
#[serde(skip)]
|
|
||||||
pub texture_id: u32,
|
pub texture_id: u32,
|
||||||
pub texture: String,
|
|
||||||
#[serde(skip)]
|
#[serde(skip)]
|
||||||
|
pub texture: String,
|
||||||
pub side_texture_id: u32,
|
pub side_texture_id: u32,
|
||||||
|
#[serde(skip)]
|
||||||
pub side_texture: String,
|
pub side_texture: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
create_asset_loader!(TileAssetPlugin, TileAssetLoader, TileAsset, &["tile.json"],);
|
create_asset_loader!(TileAssetPlugin, TileAssetLoader, TileAsset, &["tile.json"],;?);
|
||||||
|
|||||||
@@ -11,15 +11,30 @@ use crate::tile_manager::TileAsset;
|
|||||||
pub struct TileMapper;
|
pub struct TileMapper;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, TypePath, Asset)]
|
#[derive(Serialize, Deserialize, Debug, TypePath, Asset)]
|
||||||
struct TileMapperAsset {
|
pub struct TileMapperAsset {
|
||||||
#[serde(skip)]
|
#[serde(skip)]
|
||||||
pub tiles: Vec<Handle<TileAsset>>,
|
pub tiles: Vec<Handle<TileAsset>>,
|
||||||
pub tiles_path: Vec<String>,
|
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!(
|
create_asset_loader!(
|
||||||
TileMapperAssetPlugin,
|
TileMapperAssetPlugin,
|
||||||
TileMapperAssetLoader,
|
TileMapperAssetLoader,
|
||||||
TileMapperAsset,
|
TileMapperAsset,
|
||||||
&["mapper.json"],
|
&["mapper.json"],;
|
||||||
|
tiles_path -> tiles
|
||||||
|
?
|
||||||
);
|
);
|
||||||
|
|||||||
Submodule game/main/assets updated: e986f1be46...bcd0abb3b8
@@ -6,8 +6,10 @@ use bevy_rapier3d::plugin::{NoUserData, RapierPhysicsPlugin};
|
|||||||
use bevy_rapier3d::render::RapierDebugRenderPlugin;
|
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::biome_painter::{BiomePainterAsset, BiomePainterPlugin};
|
||||||
use world_generation::hex_utils::offset_to_world;
|
use world_generation::hex_utils::offset_to_world;
|
||||||
use world_generation::tile_manager::{self, TileAsset, TileAssetPlugin, TileManager};
|
use world_generation::tile_manager::{self, TileAsset, TileAssetPlugin, TileManager};
|
||||||
|
use world_generation::tile_mapper::TileMapperAssetPlugin;
|
||||||
use world_generation::{
|
use world_generation::{
|
||||||
heightmap::generate_heightmap, mesh_generator::generate_chunk_mesh, prelude::*,
|
heightmap::generate_heightmap, mesh_generator::generate_chunk_mesh, prelude::*,
|
||||||
};
|
};
|
||||||
@@ -36,6 +38,7 @@ impl Plugin for PhosGamePlugin {
|
|||||||
//Assets
|
//Assets
|
||||||
app.add_plugins(TileAssetPlugin);
|
app.add_plugins(TileAssetPlugin);
|
||||||
app.add_plugins(TileMapperAssetPlugin);
|
app.add_plugins(TileMapperAssetPlugin);
|
||||||
|
app.add_plugins(BiomePainterPlugin);
|
||||||
//Physics
|
//Physics
|
||||||
app.add_plugins(RapierPhysicsPlugin::<NoUserData>::default())
|
app.add_plugins(RapierPhysicsPlugin::<NoUserData>::default())
|
||||||
.add_plugins(RapierDebugRenderPlugin::default());
|
.add_plugins(RapierDebugRenderPlugin::default());
|
||||||
@@ -74,17 +77,13 @@ fn load_textures(mut commands: Commands, asset_server: Res<AssetServer>) {
|
|||||||
handle: main_tex.clone(),
|
handle: main_tex.clone(),
|
||||||
is_loaded: false,
|
is_loaded: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
// commands.insert_resource(TileResource(handle));
|
|
||||||
}
|
}
|
||||||
|
#[derive(Resource)]
|
||||||
|
struct Painter(Handle<BiomePainterAsset>);
|
||||||
|
|
||||||
fn load_tiles(
|
fn load_tiles(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
mut commands: Commands,
|
let handle: Handle<BiomePainterAsset> = asset_server.load("biome_painters/terra.biomes.json");
|
||||||
mut tile_manager: ResMut<TileManager>,
|
commands.insert_resource(Painter(handle));
|
||||||
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