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

@@ -2,23 +2,41 @@ use asset_loader::create_asset_loader;
use bevy::{
asset::{Asset, Handle},
reflect::TypePath,
render::render_resource::encase::rts_array::Length,
};
use serde::{Deserialize, Serialize};
use crate::tile_mapper::TileMapperAsset;
use crate::biome_asset::BiomeAsset;
#[derive(Serialize, Deserialize, Debug, TypePath, Asset, Clone)]
pub struct BiomePainterAsset {
#[serde(skip)]
pub biomes: Vec<Handle<TileMapperAsset>>,
pub biomes_path: [String; 16],
pub biomes: Vec<Handle<BiomeAsset>>,
pub biomes_path: Vec<String>,
}
impl BiomePainterAsset {
pub fn sample_biome(&self, moisture: f32, temperature: f32) -> Handle<TileMapperAsset> {
let x = (moisture.clamp(0., 1.) * 3.).ceil() as usize;
let y = (temperature.clamp(0., 1.) * 3.).ceil() as usize;
return self.biomes[x + y * 4].clone();
pub fn sample_biome(
&self,
assets: &Assets<BiomeAsset>,
moisture: f32,
temperature: f32,
continentality: f32,
) -> Handle<BiomeAsset> {
assert!(self.biomes.length() != 0, "There are no biomes");
let mut biome = self.biomes.first().unwrap().clone();
let mut dist = f32::INFINITY;
for b in &self.biomes {
let asset = assets.get(b).unwrap();
let d = asset.distance(moisture, temperature, continentality);
if d < dist {
biome = b.clone();
dist = d;
}
}
return biome;
}
}