save tile texture id into map

This commit is contained in:
2024-05-27 13:05:38 -04:00
parent 710eb80bf0
commit dcf6fc5972
8 changed files with 76 additions and 61 deletions

View File

@@ -2,6 +2,7 @@
use bevy::log::*;
use bevy::{asset::Assets, ecs::system::Res, math::Vec3, render::mesh::Mesh};
use bevy_rapier3d::geometry::{Collider, TriMeshFlags};
use rayon::iter::{IntoParallelRefMutIterator, ParallelIterator};
use world_generation::{
biome_painter::BiomePainterAsset,
chunk_colliders::generate_chunk_collider,
@@ -12,16 +13,41 @@ use world_generation::{
tile_mapper::TileMapperAsset,
};
pub fn prepare_chunk_mesh(
chunk: &Chunk,
heightmap: &Map,
pub fn paint_map(
map: &mut Map,
painter: &BiomePainterAsset,
tile_assets: &Res<Assets<TileAsset>>,
tile_mappers: &Res<Assets<TileMapperAsset>>,
) -> (Mesh, (Vec<Vec3>, Vec<[u32; 3]>), Vec3, usize) {
tiles: &Res<Assets<TileAsset>>,
mappers: &Res<Assets<TileMapperAsset>>,
) {
map.chunks.par_iter_mut().for_each(|chunk: &mut Chunk| {
paint_chunk(chunk, painter, tiles, mappers);
});
}
pub fn paint_chunk(
chunk: &mut Chunk,
painter: &BiomePainterAsset,
tiles: &Res<Assets<TileAsset>>,
mappers: &Res<Assets<TileMapperAsset>>,
) {
for z in 0..Chunk::SIZE {
for x in 0..Chunk::SIZE {
let idx = x + z * Chunk::SIZE;
let height = chunk.heights[idx];
let moisture = chunk.moisture[idx];
let temperature = chunk.temperature[idx];
let biome = mappers.get(painter.sample_biome(moisture, temperature));
let tile_handle = biome.unwrap().sample_tile(height);
let tile = tiles.get(tile_handle).unwrap();
chunk.textures[idx] = [tile.texture_id, tile.side_texture_id];
}
}
}
pub fn prepare_chunk_mesh(chunk: &Chunk, heightmap: &Map) -> (Mesh, (Vec<Vec3>, Vec<[u32; 3]>), Vec3, usize) {
#[cfg(feature = "tracing")]
let _gen_mesh = info_span!("Generate Chunk").entered();
let mesh = generate_chunk_mesh(chunk, &heightmap, painter, &tile_assets, &tile_mappers);
let mesh = generate_chunk_mesh(chunk, &heightmap);
let col_data = generate_chunk_collider(chunk, &heightmap);
return (
@@ -32,15 +58,8 @@ pub fn prepare_chunk_mesh(
);
}
pub fn prepare_chunk_mesh_with_collider(
chunk: &Chunk,
heightmap: &Map,
painter: &BiomePainterAsset,
tile_assets: &Res<Assets<TileAsset>>,
tile_mappers: &Res<Assets<TileMapperAsset>>,
) -> (Mesh, Collider, Vec3, usize) {
let (mesh, (col_verts, col_indicies), pos, index) =
prepare_chunk_mesh(chunk, heightmap, painter, tile_assets, tile_mappers);
pub fn prepare_chunk_mesh_with_collider(chunk: &Chunk, heightmap: &Map) -> (Mesh, Collider, Vec3, usize) {
let (mesh, (col_verts, col_indicies), pos, index) = prepare_chunk_mesh(chunk, heightmap);
let collider: Collider;
{
#[cfg(feature = "tracing")]