diff --git a/Cargo.toml b/Cargo.toml index aeafe52..dc27fcf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,16 +8,18 @@ license = "MIT OR Apache-2.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -bevy = { version = "0.9", default_features = false } -bevy_polyline = { version = "0.4", optional = true } +bevy = { version = "0.10", default_features = false } +bevy_polyline = { version = "0.6", optional = true } [dev-dependencies] -bevy = { version = "0.9", default_features = false, features = [ +bevy = { version = "0.10", default_features = false, features = [ + "bevy_text", + "bevy_ui", "bevy_render", "bevy_winit", "x11", ] } -bevy_framepace = "0.11" +bevy_framepace = "0.12" [features] default = ["debug"] diff --git a/examples/demo.rs b/examples/demo.rs index d02b73b..6c703ab 100644 --- a/examples/demo.rs +++ b/examples/demo.rs @@ -2,6 +2,7 @@ use bevy::{ math::Vec3A, prelude::*, render::primitives::{Aabb, Sphere}, + window::{CursorGrabMode, PrimaryWindow, Window, WindowMode}, }; use big_space::{ camera::{CameraController, CameraInput}, @@ -97,7 +98,7 @@ fn ui_setup(mut commands: Commands, asset_server: Res) { color: Color::WHITE, }, ) - .with_text_alignment(TextAlignment::TOP_LEFT) + .with_text_alignment(TextAlignment::Left) .with_style(Style { position_type: PositionType::Absolute, position: UiRect { @@ -159,25 +160,26 @@ fn ui_text_system( } fn cursor_grab_system( - mut windows: ResMut, + mut windows: Query<&mut Window, With>, mut cam: ResMut, btn: Res>, key: Res>, ) { - use bevy::window::CursorGrabMode; - let window = windows.get_primary_mut().unwrap(); + let Some(mut window) = windows.get_single_mut().ok() else { + return; + }; if btn.just_pressed(MouseButton::Left) { - window.set_cursor_grab_mode(CursorGrabMode::Locked); - window.set_cursor_visibility(false); - window.set_mode(WindowMode::BorderlessFullscreen); + window.cursor.grab_mode = CursorGrabMode::Locked; + window.cursor.visible = false; + window.mode = WindowMode::BorderlessFullscreen; cam.defaults_disabled = false; } if key.just_pressed(KeyCode::Escape) { - window.set_cursor_grab_mode(CursorGrabMode::None); - window.set_cursor_visibility(true); - window.set_mode(WindowMode::Windowed); + window.cursor.grab_mode = CursorGrabMode::None; + window.cursor.visible = true; + window.mode = WindowMode::Windowed; cam.defaults_disabled = true; } } diff --git a/src/camera.rs b/src/camera.rs index 618a960..0af4901 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -3,7 +3,6 @@ use std::marker::PhantomData; use bevy::{ - ecs::schedule::ShouldRun, input::mouse::MouseMotion, math::{DQuat, DVec3}, prelude::*, @@ -18,23 +17,18 @@ use crate::{precision::GridPrecision, FloatingOriginSettings, GridCell}; pub struct CameraControllerPlugin(PhantomData

); impl Plugin for CameraControllerPlugin

{ fn build(&self, app: &mut App) { - app.init_resource::().add_system_set_to_stage( - CoreStage::PostUpdate, - SystemSet::new() - .with_system( + app.init_resource::() + //CoreStage::PostUpdate, + .add_systems( + ( default_camera_inputs .before(camera_controller::

) - .with_run_criteria(|input: Res| { - if input.defaults_disabled { - ShouldRun::No - } else { - ShouldRun::Yes - } - }), + .run_if(|input: Res| !input.defaults_disabled), + nearest_objects.before(camera_controller::

), + camera_controller::

.before(TransformSystem::TransformPropagate), ) - .with_system(nearest_objects.before(camera_controller::

)) - .with_system(camera_controller::

.before(TransformSystem::TransformPropagate)), - ); + .in_base_set(CoreSet::PostUpdate), + ); } } diff --git a/src/debug.rs b/src/debug.rs index 4714266..a451a76 100644 --- a/src/debug.rs +++ b/src/debug.rs @@ -13,10 +13,10 @@ pub struct FloatingOriginDebugPlugin(PhantomData

); impl Plugin for FloatingOriginDebugPlugin

{ fn build(&self, app: &mut App) { app.add_plugin(bevy_polyline::PolylinePlugin) - .add_system_to_stage(CoreStage::Update, build_cube) - .add_system_to_stage( - CoreStage::PostUpdate, + .add_system(build_cube.in_base_set(CoreSet::Update)) + .add_system( update_debug_bounds::

+ .in_base_set(CoreSet::PostUpdate) .after(crate::recenter_transform_on_grid::

) .before(crate::update_global_from_grid::

), ); @@ -58,7 +58,7 @@ pub fn update_debug_bounds( *polyline = cube_polyline.polyline.clone(); } if let Some((occupied_cell, has_origin)) = occupied_cells.next() { - visibility.is_visible = true; + *visibility = Visibility::Visible; *cell = *occupied_cell; if has_origin.is_some() { *matl = cube_polyline.origin_matl.clone(); @@ -67,7 +67,7 @@ pub fn update_debug_bounds( } } else { // If there are more debug bounds than occupied cells, hide the extras. - visibility.is_visible = false; + *visibility = Visibility::Hidden; } } diff --git a/src/lib.rs b/src/lib.rs index 14a5b69..785761e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -126,38 +126,29 @@ impl Plugin for FloatingOriginPlugin

{ .register_type::() .register_type::>() .add_plugin(ValidParentCheckPlugin::::default()) + .configure_set(TransformSystem::TransformPropagate.in_base_set(CoreSet::PostUpdate)) + .edit_schedule(CoreSchedule::Startup, |schedule| { + schedule.configure_set( + TransformSystem::TransformPropagate.in_base_set(StartupSet::PostStartup), + ); + }) // add transform systems to startup so the first update is "correct" - .add_startup_system_to_stage( - StartupStage::PostStartup, - recenter_transform_on_grid::

- .label(TransformSystem::TransformPropagate) - .before(update_global_from_grid::

), + .add_startup_systems( + ( + recenter_transform_on_grid::

.before(update_global_from_grid::

), + update_global_from_grid::

.before(transform_propagate_system::

), + transform_propagate_system::

, + ) + .in_set(TransformSystem::TransformPropagate), ) - .add_startup_system_to_stage( - StartupStage::PostStartup, - update_global_from_grid::

- .label(TransformSystem::TransformPropagate) - .before(transform_propagate_system::

), - ) - .add_startup_system_to_stage( - StartupStage::PostStartup, - transform_propagate_system::

.label(TransformSystem::TransformPropagate), - ) - .add_system_to_stage( - CoreStage::PostUpdate, - recenter_transform_on_grid::

- .label(TransformSystem::TransformPropagate) - .before(update_global_from_grid::

), - ) - .add_system_to_stage( - CoreStage::PostUpdate, - update_global_from_grid::

- .label(TransformSystem::TransformPropagate) - .before(transform_propagate_system::

), - ) - .add_system_to_stage( - CoreStage::PostUpdate, - transform_propagate_system::

.label(TransformSystem::TransformPropagate), + // + .add_systems( + ( + recenter_transform_on_grid::

.before(update_global_from_grid::

), + update_global_from_grid::

.before(transform_propagate_system::

), + transform_propagate_system::

, + ) + .in_set(TransformSystem::TransformPropagate), ); } } @@ -380,16 +371,18 @@ pub fn recenter_transform_on_grid( settings: Res, mut query: Query<(&mut GridCell

, &mut Transform), (Changed, Without)>, ) { - query.par_for_each_mut(1024, |(mut grid_pos, mut transform)| { - if transform.as_ref().translation.abs().max_element() - > settings.maximum_distance_from_origin - { - let (grid_cell_delta, translation) = - settings.imprecise_translation_to_grid(transform.as_ref().translation); - *grid_pos = *grid_pos + grid_cell_delta; - transform.translation = translation; - } - }); + query + .par_iter_mut() + .for_each_mut(|(mut grid_pos, mut transform)| { + if transform.as_ref().translation.abs().max_element() + > settings.maximum_distance_from_origin + { + let (grid_cell_delta, translation) = + settings.imprecise_translation_to_grid(transform.as_ref().translation); + *grid_pos = *grid_pos + grid_cell_delta; + transform.translation = translation; + } + }); } /// Compute the `GlobalTransform` relative to the floating origin. @@ -408,14 +401,18 @@ pub fn update_global_from_grid( if origin_grid_pos_changed { let mut all_entities = entities.p1(); - all_entities.par_for_each_mut(1024, |(local, global, entity_cell)| { - update_global_from_cell_local(&settings, entity_cell, origin_cell, local, global); - }); + all_entities + .par_iter_mut() + .for_each_mut(|(local, global, entity_cell)| { + update_global_from_cell_local(&settings, entity_cell, origin_cell, local, global); + }); } else { let mut moved_cell_entities = entities.p0(); - moved_cell_entities.par_for_each_mut(1024, |(local, global, entity_cell)| { - update_global_from_cell_local(&settings, entity_cell, origin_cell, local, global); - }); + moved_cell_entities + .par_iter_mut() + .for_each_mut(|(local, global, entity_cell)| { + update_global_from_cell_local(&settings, entity_cell, origin_cell, local, global); + }); } }