render map image
This commit is contained in:
@@ -21,6 +21,7 @@ bevy_asset_loader = { version = "0.21.0", features = [
|
||||
"3d",
|
||||
] }
|
||||
ron = "0.8.1"
|
||||
image = "0.25.2"
|
||||
|
||||
[features]
|
||||
tracing = ["bevy/trace_tracy", "world_generation/tracing", "buildings/tracing"]
|
||||
|
||||
@@ -3,10 +3,12 @@ use bevy::log::*;
|
||||
use bevy::{
|
||||
pbr::{ExtendedMaterial, NotShadowCaster},
|
||||
prelude::*,
|
||||
render::texture::ImageFormat,
|
||||
};
|
||||
use bevy_asset_loader::prelude::*;
|
||||
|
||||
use bevy_inspector_egui::quick::ResourceInspectorPlugin;
|
||||
use image::DynamicImage;
|
||||
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
|
||||
use shared::states::{AssetLoadState, GameplayState, MenuState};
|
||||
use world_generation::{
|
||||
@@ -213,11 +215,6 @@ fn create_heightmap(
|
||||
};
|
||||
let heightmap = generate_heightmap(&config, 42069, &biome_painter);
|
||||
|
||||
let game_map = render_map(&heightmap, 1.5);
|
||||
let biome_map = render_biome_map(&heightmap);
|
||||
_ = biome_map.save("Biomes.png");
|
||||
_ = game_map.save("Test.png");
|
||||
|
||||
let (mut cam_t, cam_entity) = cam.single_mut();
|
||||
cam_t.translation = heightmap.get_center();
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use crate::camera_system::components::PhosCamera;
|
||||
use crate::map_rendering::map_init::MapInitPlugin;
|
||||
use crate::utlis::editor_plugin::EditorPlugin;
|
||||
use crate::utlis::render_distance_system::RenderDistancePlugin;
|
||||
use crate::{camera_system::camera_plugin::PhosCameraPlugin, utlis::debug_plugin::DebugPlugin};
|
||||
use bevy::{
|
||||
@@ -34,6 +35,8 @@ impl Plugin for PhosGamePlugin {
|
||||
BuildingPugin,
|
||||
DespawnPuglin,
|
||||
#[cfg(debug_assertions)]
|
||||
EditorPlugin,
|
||||
#[cfg(debug_assertions)]
|
||||
DebugPlugin,
|
||||
));
|
||||
|
||||
|
||||
49
game/main/src/utlis/editor_plugin.rs
Normal file
49
game/main/src/utlis/editor_plugin.rs
Normal file
@@ -0,0 +1,49 @@
|
||||
use bevy::{prelude::*, render::render_asset::RenderAssetUsages};
|
||||
use bevy_inspector_egui::bevy_egui::EguiContexts;
|
||||
use bevy_inspector_egui::egui::{self};
|
||||
use world_generation::{map::map_utils::render_map, prelude::Map, states::GeneratorState};
|
||||
|
||||
pub struct EditorPlugin;
|
||||
|
||||
impl Plugin for EditorPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
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)));
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Resource)]
|
||||
struct MapImage(pub Handle<Image>);
|
||||
|
||||
pub fn prepare_image(mut images: ResMut<Assets<Image>>, heightmap: Res<Map>, mut commands: Commands) {
|
||||
let image = render_map(&heightmap, 0.1);
|
||||
let handle = images.add(Image::from_dynamic(image.into(), true, RenderAssetUsages::RENDER_WORLD));
|
||||
|
||||
commands.insert_resource(MapImage(handle));
|
||||
}
|
||||
|
||||
#[derive(Resource)]
|
||||
struct UIState {
|
||||
pub is_open: bool,
|
||||
}
|
||||
|
||||
impl Default for UIState {
|
||||
fn default() -> Self {
|
||||
Self { is_open: true }
|
||||
}
|
||||
}
|
||||
|
||||
fn render_map_ui(image: Res<MapImage>, mut contexts: EguiContexts, mut state: ResMut<UIState>) {
|
||||
let id = contexts.add_image(image.0.clone_weak());
|
||||
|
||||
let ctx = contexts.ctx_mut();
|
||||
egui::Window::new("Map").open(&mut state.is_open).show(ctx, |ui| {
|
||||
ui.label("Map Test");
|
||||
ui.add(egui::widgets::Image::new(egui::load::SizedTexture::new(
|
||||
id,
|
||||
[512.0, 512.0],
|
||||
)));
|
||||
});
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
pub mod chunk_utils;
|
||||
pub mod render_distance_system;
|
||||
pub mod debug_plugin;
|
||||
pub mod editor_plugin;
|
||||
|
||||
Reference in New Issue
Block a user