map visualization

This commit is contained in:
2024-09-02 13:06:35 -04:00
parent 1dc6329252
commit 343778a883
4 changed files with 71 additions and 14 deletions

View File

@@ -165,7 +165,7 @@ fn create_heightmap(
biome_blend: 16,
biome_dither: 16.,
continent_noise: NoiseConfig {
scale: 500.,
scale: 1000.,
layers: vec![GeneratorLayer {
base_roughness: 2.14,
roughness: 0.87,
@@ -195,7 +195,7 @@ fn create_heightmap(
}],
},
temperature_noise: NoiseConfig {
scale: 500.,
scale: 900.,
layers: vec![GeneratorLayer {
base_roughness: 2.14,
roughness: 0.87,

View File

@@ -1,6 +1,9 @@
use bevy::{prelude::*, render::render_asset::RenderAssetUsages};
use bevy_inspector_egui::bevy_egui::EguiContexts;
use bevy_inspector_egui::egui::{self};
use bevy_rapier3d::rapier::crossbeam::deque::Steal;
use world_generation::map::biome_map::{self, BiomeMap};
use world_generation::map::map_utils::{render_biome_map, render_biome_noise_map, update_map};
use world_generation::{map::map_utils::render_map, prelude::Map, states::GeneratorState};
pub struct EditorPlugin;
@@ -10,7 +13,10 @@ impl Plugin for EditorPlugin {
app.init_resource::<UIState>();
app.add_systems(PostUpdate, prepare_image.run_if(in_state(GeneratorState::SpawnMap)));
app.add_systems(Update, (render_map_ui).run_if(in_state(GeneratorState::Idle)));
app.add_systems(
Update,
(render_map_ui, update_map_render).run_if(in_state(GeneratorState::Idle)),
);
}
}
@@ -27,23 +33,72 @@ pub fn prepare_image(mut images: ResMut<Assets<Image>>, heightmap: Res<Map>, mut
#[derive(Resource)]
struct UIState {
pub is_open: bool,
pub target_map_type: MapDisplayType,
pub cur_map_type: MapDisplayType,
}
impl Default for UIState {
fn default() -> Self {
Self { is_open: true }
Self {
is_open: true,
target_map_type: default(),
cur_map_type: default(),
}
}
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
enum MapDisplayType {
#[default]
HeightMap,
Biomes,
BiomeNoise,
}
fn render_map_ui(image: Res<MapImage>, mut contexts: EguiContexts, mut state: ResMut<UIState>) {
let id = contexts.add_image(image.0.clone_weak());
let mut map_type = state.target_map_type;
let ctx = contexts.ctx_mut();
egui::Window::new("Map").open(&mut state.is_open).show(ctx, |ui| {
ui.label("Map Test");
egui::ComboBox::from_label("Display Type")
.selected_text(format!("{:?}", map_type))
.show_ui(ui, |ui| {
ui.selectable_value(&mut map_type, MapDisplayType::HeightMap, "Heightmap");
ui.selectable_value(&mut map_type, MapDisplayType::Biomes, "Biomes");
ui.selectable_value(&mut map_type, MapDisplayType::BiomeNoise, "Biome Noise");
});
ui.add(egui::widgets::Image::new(egui::load::SizedTexture::new(
id,
[512.0, 512.0],
)));
});
state.target_map_type = map_type;
}
fn update_map_render(
mut state: ResMut<UIState>,
mut images: ResMut<Assets<Image>>,
heightmap: Res<Map>,
biome_map: Res<BiomeMap>,
image: Res<MapImage>,
) {
if state.cur_map_type == state.target_map_type {
return;
}
let result = match state.target_map_type {
MapDisplayType::HeightMap => render_map(&heightmap, 0.1),
MapDisplayType::Biomes => render_biome_map(&heightmap, &biome_map),
MapDisplayType::BiomeNoise => render_biome_noise_map(&biome_map),
};
images.insert(
image.0.id(),
Image::from_dynamic(result.into(), true, RenderAssetUsages::RENDER_WORLD),
);
state.cur_map_type = state.target_map_type;
}