New modular biomes system and updated world generator

This commit is contained in:
2024-07-06 20:41:50 -04:00
parent e6e969f053
commit 97f2497940
16 changed files with 341 additions and 190 deletions

View File

@@ -6,7 +6,7 @@ use bevy::{
};
use serde::{Deserialize, Serialize};
use crate::biome_asset::BiomeAsset;
use crate::{biome_asset::BiomeAsset, map::biome_map::BiomeData};
#[derive(Serialize, Deserialize, Debug, TypePath, Asset, Clone)]
pub struct BiomePainterAsset {
@@ -16,20 +16,14 @@ pub struct BiomePainterAsset {
}
impl BiomePainterAsset {
pub fn sample_biome(
&self,
assets: &Assets<BiomeAsset>,
moisture: f32,
temperature: f32,
continentality: f32,
) -> Handle<BiomeAsset> {
pub fn sample_biome(&self, assets: &Assets<BiomeAsset>, data: &BiomeData) -> 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);
let d = asset.distance(data.into());
if d < dist {
biome = b.clone();
dist = d;
@@ -38,6 +32,38 @@ impl BiomePainterAsset {
return biome;
}
pub fn build(&self, assets: &Assets<BiomeAsset>) -> BiomePainter {
let mut biomes = Vec::with_capacity(self.biomes.len());
for b in &self.biomes {
let asset = assets.get(b.clone()).unwrap();
biomes.push(asset.clone());
}
return BiomePainter { biomes };
}
}
#[derive(Resource)]
pub struct BiomePainter {
pub biomes: Vec<BiomeAsset>,
}
impl BiomePainter {
pub fn sample_biome(&self, data: &BiomeData) -> &BiomeAsset {
assert!(self.biomes.length() != 0, "There are no biomes");
let mut biome = &self.biomes[0];
let mut dist = f32::INFINITY;
for b in &self.biomes {
let d = b.distance(data.into());
if d < dist {
biome = b;
dist = d;
}
}
return biome;
}
}
create_asset_loader!(