update to bevy 0.18
This commit is contained in:
@@ -4,7 +4,7 @@ use bevy::{
|
||||
asset::Assets,
|
||||
ecs::system::Res,
|
||||
math::{IVec2, UVec2, Vec3},
|
||||
render::mesh::Mesh,
|
||||
mesh::Mesh,
|
||||
};
|
||||
use bevy_rapier3d::geometry::{Collider, TriMeshFlags};
|
||||
use rayon::iter::{IntoParallelRefMutIterator, ParallelIterator};
|
||||
@@ -87,7 +87,8 @@ pub fn prepare_chunk_mesh_with_collider(
|
||||
{
|
||||
#[cfg(feature = "tracing")]
|
||||
let _collider_span = info_span!("Create Collider Trimesh").entered();
|
||||
collider = Collider::trimesh_with_flags(col_verts, col_indicies, TriMeshFlags::DELETE_DUPLICATE_TRIANGLES);
|
||||
collider = Collider::trimesh_with_flags(col_verts, col_indicies, TriMeshFlags::DELETE_DUPLICATE_TRIANGLES)
|
||||
.expect("Failed to generate chunk collision mesh");
|
||||
}
|
||||
return (chunk_mesh, water_mesh, collider, pos, index);
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ impl Plugin for DebugPlugin {
|
||||
}
|
||||
|
||||
#[derive(Resource)]
|
||||
struct Shape(pub Polyline3d<7>);
|
||||
struct Shape(pub Polyline3d);
|
||||
|
||||
#[derive(States, Debug, Clone, PartialEq, Eq, Hash)]
|
||||
pub enum DebugState {
|
||||
@@ -87,8 +87,8 @@ fn show_water_corners(pos: Vec3, gizmos: &mut Gizmos) {
|
||||
}
|
||||
}
|
||||
|
||||
fn camera_debug(mut cam_query: Query<(&PhosCamera, &PhosOrbitCamera)>, mut gizmos: Gizmos) {
|
||||
let (config, orbit) = cam_query.single();
|
||||
fn camera_debug(mut cam_query: Single<(&PhosCamera, &PhosOrbitCamera)>, mut gizmos: Gizmos) {
|
||||
let (config, orbit) = cam_query.into_inner();
|
||||
|
||||
gizmos.sphere(orbit.target, 0.3, LinearRgba::RED);
|
||||
let cam_proxy = orbit.target - (orbit.forward * 10.0);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use bevy::{prelude::*, render::render_asset::RenderAssetUsages};
|
||||
use bevy::asset::RenderAssetUsages;
|
||||
use bevy::prelude::*;
|
||||
use bevy_inspector_egui::bevy_egui::EguiContexts;
|
||||
use bevy_inspector_egui::egui::{self};
|
||||
use image::{ImageBuffer, Rgba};
|
||||
@@ -61,7 +62,7 @@ enum MapDisplayType {
|
||||
}
|
||||
|
||||
fn asset_reloaded(
|
||||
mut asset_events: EventReader<AssetEvent<BiomeAsset>>,
|
||||
mut asset_events: MessageReader<AssetEvent<BiomeAsset>>,
|
||||
mut biomes: ResMut<Assets<BiomeAsset>>,
|
||||
biome_painter: Res<BiomePainterAsset>,
|
||||
mut commands: Commands,
|
||||
@@ -79,55 +80,55 @@ fn asset_reloaded(
|
||||
}
|
||||
}
|
||||
|
||||
fn render_map_ui(
|
||||
image: Res<MapImage>,
|
||||
heightmap: Res<Map>,
|
||||
biome_map: Res<BiomeMap>,
|
||||
mut contexts: EguiContexts,
|
||||
mut state: ResMut<UIState>,
|
||||
) {
|
||||
let id = contexts.add_image(image.0.clone_weak());
|
||||
// fn render_map_ui(
|
||||
// image: Res<MapImage>,
|
||||
// heightmap: Res<Map>,
|
||||
// biome_map: Res<BiomeMap>,
|
||||
// mut contexts: EguiContexts,
|
||||
// mut state: ResMut<UIState>,
|
||||
// ) {
|
||||
// let id = contexts.add_image(image.0.clone());
|
||||
|
||||
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.selectable_value(
|
||||
&mut map_type,
|
||||
MapDisplayType::BiomeNoiseTemp,
|
||||
"Biome Noise: Tempurature",
|
||||
);
|
||||
ui.selectable_value(
|
||||
&mut map_type,
|
||||
MapDisplayType::BiomeNoiseContinent,
|
||||
"Biome Noise: Continent",
|
||||
);
|
||||
ui.selectable_value(
|
||||
&mut map_type,
|
||||
MapDisplayType::BiomeNoiseMoisture,
|
||||
"Biome Noise: Moisture",
|
||||
);
|
||||
});
|
||||
// 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.selectable_value(
|
||||
// &mut map_type,
|
||||
// MapDisplayType::BiomeNoiseTemp,
|
||||
// "Biome Noise: Tempurature",
|
||||
// );
|
||||
// ui.selectable_value(
|
||||
// &mut map_type,
|
||||
// MapDisplayType::BiomeNoiseContinent,
|
||||
// "Biome Noise: Continent",
|
||||
// );
|
||||
// ui.selectable_value(
|
||||
// &mut map_type,
|
||||
// MapDisplayType::BiomeNoiseMoisture,
|
||||
// "Biome Noise: Moisture",
|
||||
// );
|
||||
// });
|
||||
|
||||
ui.add(egui::widgets::Image::new(egui::load::SizedTexture::new(
|
||||
id,
|
||||
[512.0, 512.0],
|
||||
)));
|
||||
// ui.add(egui::widgets::Image::new(egui::load::SizedTexture::new(
|
||||
// id,
|
||||
// [512.0, 512.0],
|
||||
// )));
|
||||
|
||||
if ui.button("Save Image").clicked() {
|
||||
let img = get_map_image(&heightmap, &biome_map, map_type);
|
||||
_ = img.save(format!("{:?}.png", map_type));
|
||||
}
|
||||
});
|
||||
// if ui.button("Save Image").clicked() {
|
||||
// let img = get_map_image(&heightmap, &biome_map, map_type);
|
||||
// _ = img.save(format!("{:?}.png", map_type));
|
||||
// }
|
||||
// });
|
||||
|
||||
state.target_map_type = map_type;
|
||||
}
|
||||
// state.target_map_type = map_type;
|
||||
// }
|
||||
|
||||
fn update_map_render(
|
||||
mut state: ResMut<UIState>,
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
use bevy::{prelude::*, window::PrimaryWindow};
|
||||
use bevy_rapier3d::{
|
||||
plugin::{RapierContext, ReadDefaultRapierContext},
|
||||
prelude::QueryFilter,
|
||||
};
|
||||
use bevy_rapier3d::{plugin::RapierContext, prelude::QueryFilter};
|
||||
use shared::{
|
||||
resources::{TileContact, TileUnderCursor},
|
||||
tags::MainCamera,
|
||||
@@ -21,20 +18,14 @@ impl Plugin for TileSelectionPlugin {
|
||||
}
|
||||
|
||||
fn update_tile_under_cursor(
|
||||
cam_query: Query<(&GlobalTransform, &Camera), With<MainCamera>>,
|
||||
window: Query<&Window, With<PrimaryWindow>>,
|
||||
rapier_context: ReadDefaultRapierContext,
|
||||
cam_query: Single<(&GlobalTransform, &Camera), With<MainCamera>>,
|
||||
window: Single<&Window, With<PrimaryWindow>>,
|
||||
// rapier_context: RapierContext,
|
||||
map: Res<Map>,
|
||||
mut tile_under_cursor: ResMut<TileUnderCursor>,
|
||||
) {
|
||||
let win_r = window.get_single();
|
||||
if win_r.is_err() {
|
||||
return;
|
||||
}
|
||||
let win = win_r.unwrap();
|
||||
|
||||
let (cam_transform, camera) = cam_query.single();
|
||||
let Some(cursor_pos) = win.cursor_position() else {
|
||||
let (cam_transform, camera) = cam_query.into_inner();
|
||||
let Some(cursor_pos) = window.cursor_position() else {
|
||||
return;
|
||||
};
|
||||
|
||||
@@ -42,29 +33,29 @@ fn update_tile_under_cursor(
|
||||
return;
|
||||
};
|
||||
|
||||
let collision = rapier_context.cast_ray(
|
||||
cam_ray.origin,
|
||||
cam_ray.direction.into(),
|
||||
500.,
|
||||
true,
|
||||
QueryFilter::only_fixed(),
|
||||
);
|
||||
// let collision = rapier_context.cast_ray(
|
||||
// cam_ray.origin,
|
||||
// cam_ray.direction.into(),
|
||||
// 500.,
|
||||
// true,
|
||||
// QueryFilter::only_fixed(),
|
||||
// );
|
||||
|
||||
if let Some((_e, dist)) = collision {
|
||||
let contact_point = cam_ray.get_point(dist);
|
||||
let contact_coord = HexCoord::from_world_pos(contact_point);
|
||||
//todo: handle correct tile detection when contacting a tile from the side
|
||||
if !map.is_in_bounds(&contact_coord) {
|
||||
tile_under_cursor.0 = None;
|
||||
return;
|
||||
}
|
||||
let surface = map.sample_height(&contact_coord);
|
||||
tile_under_cursor.0 = Some(TileContact::new(
|
||||
contact_coord,
|
||||
contact_point,
|
||||
contact_coord.to_world(surface),
|
||||
));
|
||||
} else {
|
||||
tile_under_cursor.0 = None;
|
||||
}
|
||||
// if let Some((_e, dist)) = collision {
|
||||
// let contact_point = cam_ray.get_point(dist);
|
||||
// let contact_coord = HexCoord::from_world_pos(contact_point);
|
||||
// //todo: handle correct tile detection when contacting a tile from the side
|
||||
// if !map.is_in_bounds(&contact_coord) {
|
||||
// tile_under_cursor.0 = None;
|
||||
// return;
|
||||
// }
|
||||
// let surface = map.sample_height(&contact_coord);
|
||||
// tile_under_cursor.0 = Some(TileContact::new(
|
||||
// contact_coord,
|
||||
// contact_point,
|
||||
// contact_coord.to_world(surface),
|
||||
// ));
|
||||
// } else {
|
||||
// tile_under_cursor.0 = None;
|
||||
// }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user