biome sampling

This commit is contained in:
2024-07-04 13:11:54 -04:00
parent 9a960bbec9
commit e6e969f053
8 changed files with 85 additions and 16 deletions

View File

@@ -9,6 +9,7 @@ use bevy_inspector_egui::quick::ResourceInspectorPlugin;
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
use shared::states::{GameplayState, MenuState};
use world_generation::{
biome_asset::BiomeAsset,
biome_painter::*,
heightmap::generate_heightmap,
hex_utils::{offset_to_index, SHORT_DIAGONAL},
@@ -272,6 +273,7 @@ fn spawn_map(
tile_assets: Res<Assets<TileAsset>>,
tile_mappers: Res<Assets<TileMapperAsset>>,
biome_painters: Res<Assets<BiomePainterAsset>>,
biome_assets: Res<Assets<BiomeAsset>>,
painter: Res<CurrentBiomePainter>,
mut generator_state: ResMut<NextState<GeneratorState>>,
cur_game_state: Res<State<MenuState>>,
@@ -280,7 +282,7 @@ fn spawn_map(
) {
let b_painter = biome_painters.get(painter.handle.clone());
let cur_painter = b_painter.unwrap();
paint_map(&mut heightmap, cur_painter, &tile_assets, &tile_mappers);
paint_map(&mut heightmap, cur_painter, &tile_assets, &biome_assets, &tile_mappers);
let chunk_meshes: Vec<_> = heightmap
.chunks

View File

@@ -9,6 +9,7 @@ use bevy::{
use bevy_rapier3d::geometry::{Collider, TriMeshFlags};
use rayon::iter::{IntoParallelRefMutIterator, ParallelIterator};
use world_generation::{
biome_asset::BiomeAsset,
biome_painter::BiomePainterAsset,
generators::{chunk_colliders::generate_chunk_collider, mesh_generator::generate_chunk_mesh},
hex_utils::offset_to_world,
@@ -21,10 +22,11 @@ pub fn paint_map(
map: &mut Map,
painter: &BiomePainterAsset,
tiles: &Res<Assets<TileAsset>>,
biomes: &Res<Assets<BiomeAsset>>,
mappers: &Res<Assets<TileMapperAsset>>,
) {
map.chunks.par_iter_mut().for_each(|chunk: &mut Chunk| {
paint_chunk(chunk, painter, tiles, mappers);
paint_chunk(chunk, painter, tiles, biomes, mappers);
});
}
@@ -32,6 +34,7 @@ pub fn paint_chunk(
chunk: &mut Chunk,
painter: &BiomePainterAsset,
tiles: &Res<Assets<TileAsset>>,
biomes: &Res<Assets<BiomeAsset>>,
mappers: &Res<Assets<TileMapperAsset>>,
) {
for z in 0..Chunk::SIZE {
@@ -40,8 +43,11 @@ pub fn paint_chunk(
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 biome = biomes
.get(painter.sample_biome(&biomes, moisture, temperature, 0.))
.unwrap();
let mapper = mappers.get(biome.tile_mapper.clone());
let tile_handle = mapper.unwrap().sample_tile(height);
let tile = tiles.get(tile_handle).unwrap();
chunk.textures[idx] = [tile.texture_id, tile.side_texture_id];
}