New modular biomes system and updated world generator
This commit is contained in:
@@ -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!(
|
||||
|
||||
Reference in New Issue
Block a user