update to bevy 0.18

This commit is contained in:
2026-02-26 15:57:42 -05:00
parent 94b85c9cf7
commit e8735b83b3
35 changed files with 3143 additions and 3277 deletions

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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>,

View File

@@ -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;
// }
}