Skip to content

Commit

Permalink
Update to bevy 0.10
Browse files Browse the repository at this point in the history
  • Loading branch information
nicopap committed Feb 24, 2023
1 parent 77e18b3 commit 7b8d54f
Show file tree
Hide file tree
Showing 8 changed files with 83 additions and 99 deletions.
11 changes: 4 additions & 7 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,23 @@ categories = ["game-development", "accessibility", "gui"]
repository = "https://github.com/nicopap/ui-navigation"
homepage = "https://github.com/nicopap/ui-navigation"
exclude = ["assets", ".github"]
version = "0.23.1"
version = "0.24.0"
edition = "2021"

[features]
default = ["bevy_ui", "bevy_reflect"]
bevy_reflect = []
bevy_ui = ["bevy/render"]
bevy_ui = ["bevy/bevy_ui", "bevy/bevy_render"]

[dependencies]
bevy = { version = "0.9", default-features = false, features = ["bevy_asset"] }
bevy = { version = "0.10", default-features = false, features = ["bevy_asset"] }
non-empty-vec = { version = "0.2.2", default-features = false }

[dev-dependencies]
fastrand = "1.7"
bevy = { version = "0.9", default-features = false, features = [
bevy = { version = "0.10", default-features = true, features = [
"x11",
"png",
"bevy_asset",
"bevy_gilrs",
] }

[package.metadata.docs.rs]
cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples"]
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
check:
cargo clippy
run:
cargo run --example layout
83 changes: 42 additions & 41 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ A generic UI navigation algorithm for the

```toml
[dependencies]
bevy-ui-navigation = "0.23.1"
bevy-ui-navigation = "0.24.0"
```

The in-depth design specification is [available here][rfc41].
Expand Down Expand Up @@ -516,12 +516,12 @@ A usage demo is available in [the `marking.rs` example][example-marking].
internally used component (`TreeMenu`) is now done in `PreUpdate` instead of
`PostUpdate`. This fixes a potential frame lag.
* `0.23.1`: Fix docs.rs `rustdoc-scrape-examples` flags.
* **FUTURE**: `0.24.0` The goal is to split this crate so that it fits better
with the rest of the bevy ecosystem. Future Plans involve (order not guarenteed):
* Completing the feature backport from [the RFC PR] (major code cleanup and
module re-structuring)
* Update to bevy 0.10 once that comes up
* Split the crate in 3 sub-crate, as described in the now [closed RFC][rfc41].
* `0.24.0`:
* Improve performance on `NavEventReader::activated_in_query_foreach_mut`
* **BREAKING**: Update to bevy 0.10.0
* **FUTURE**: `0.25.0` The goal is to split this crate so that it fits better
with the rest of the bevy ecosystem. Future Plans involve
Split the crate in 3 sub-crate, as described in the now [closed RFC][rfc41]:
* A plugin to translate bevy_ui things into events
* A plugin for gamepad-based navigation system
* A plugin for complex hierarchical menu navigation
Expand All @@ -530,50 +530,51 @@ A usage demo is available in [the `marking.rs` example][example-marking].
[diff-18-19]: https://github.com/nicopap/ui-navigation/compare/v0.18.0...v0.19.0
[`ButtonBundle`]: https://docs.rs/bevy/0.9.0/bevy/ui/entity/struct.ButtonBundle.html
[Changed]: https://docs.rs/bevy/0.9.0/bevy/ecs/prelude/struct.Changed.html
[doc-root]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/
[doc-root]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/
[`Entity`]: https://docs.rs/bevy/0.9.0/bevy/ecs/entity/struct.Entity.html
[entity-id]: https://docs.rs/bevy/0.9.0/bevy/ecs/system/struct.EntityCommands.html#method.id
[example-marking]: https://github.com/nicopap/ui-navigation/tree/v0.23.1/examples/marking.rs
[examples]: https://github.com/nicopap/ui-navigation/tree/v0.23.1/examples
[example-simple]: https://github.com/nicopap/ui-navigation/tree/v0.23.1/examples/simple.rs
[example-ultimate]: https://github.com/nicopap/ui-navigation/blob/v0.23.1/examples/ultimate_menu_navigation.rs
[`FocusableButtonBundle`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/components/struct.FocusableButtonBundle.html
[`Focusable::cancel`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/prelude/struct.Focusable.html#method.cancel
[`Focusable::block`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/prelude/struct.Focusable.html#method.block
[`Focusable::prioritized`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/prelude/struct.Focusable.html#method.prioritized
[`Focusable`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/prelude/struct.Focusable.html
[`Focusable::lock`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/prelude/struct.Focusable.html#method.lock
[`generic_default_mouse_input`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/systems/fn.generic_default_mouse_input.html
[`InputMapping`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/systems/struct.InputMapping.html
[module-event_helpers]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/events/trait.NavEventReaderExt.html
[module-marking]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/mark/index.html
[module-systems]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/systems/index.html
[example-marking]: https://github.com/nicopap/ui-navigation/tree/v0.24.0/examples/marking.rs
[examples]: https://github.com/nicopap/ui-navigation/tree/v0.24.0/examples
[example-simple]: https://github.com/nicopap/ui-navigation/tree/v0.24.0/examples/simple.rs
[example-ultimate]: https://github.com/nicopap/ui-navigation/blob/v0.24.0/examples/ultimate_menu_navigation.rs
[`FocusableButtonBundle`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/components/struct.FocusableButtonBundle.html
[`Focusable::cancel`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/prelude/struct.Focusable.html#method.cancel
[`Focusable::block`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/prelude/struct.Focusable.html#method.block
[`Focusable::prioritized`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/prelude/struct.Focusable.html#method.prioritized
[`Focusable`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/prelude/struct.Focusable.html
[`Focusable::lock`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/prelude/struct.Focusable.html#method.lock
[`generic_default_mouse_input`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/systems/fn.generic_default_mouse_input.html
[`InputMapping`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/systems/struct.InputMapping.html
[module-event_helpers]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/events/trait.NavEventReaderExt.html
[module-marking]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/mark/index.html
[module-systems]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/systems/index.html
[Name]: https://docs.rs/bevy/0.9.0/bevy/core/enum.Name.html
[`NavEvent::FocusChanged`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/events/enum.NavEvent.html#variant.FocusChanged
[`NavEvent`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/events/enum.NavEvent.html
[`NavEvent::InitiallyFocused`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/events/enum.NavEvent.html#variant.InitiallyFocused
[`MenuSetting`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/menu/enum.MenuSetting.html
[`NavMenu`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/menu/enum.MenuSetting.html
[`MenuBuilder`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/menu/enum.MenuBuilder.html
[MenuBuilder::reachable_from]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/menu/enum.MenuBuilder.html#variant.EntityParent
[MenuBuilder::reachable_from_named]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/menu/enum.MenuBuilder.html#method.from_named
[`NavRequest`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/events/enum.NavRequest.html
[`NavRequest::Action`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/events/enum.NavRequest.html#variant.Action
[`NavRequest::FocusOn`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/events/enum.NavRequest.html#variant.FocusOn
[`NavRequest::Free`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/events/enum.NavRequest.html#variant.Unlock
[`NavRequest::Unlock`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/events/enum.NavRequest.html#variant.Unlock
[`NavRequest::ScopeMove`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/events/enum.NavRequest.html#variant.ScopeMove
[`NavRequestSystem`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/struct.NavRequestSystem.html
[`NavEvent::FocusChanged`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/events/enum.NavEvent.html#variant.FocusChanged
[`NavEvent`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/events/enum.NavEvent.html
[`NavEvent::InitiallyFocused`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/events/enum.NavEvent.html#variant.InitiallyFocused
[`MenuSetting`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/menu/enum.MenuSetting.html
[`NavMenu`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/menu/enum.MenuSetting.html
[`MenuBuilder`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/menu/enum.MenuBuilder.html
[MenuBuilder::reachable_from]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/menu/enum.MenuBuilder.html#variant.EntityParent
[MenuBuilder::reachable_from_named]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/menu/enum.MenuBuilder.html#method.from_named
[`NavRequest`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/events/enum.NavRequest.html
[`NavRequest::Action`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/events/enum.NavRequest.html#variant.Action
[`NavRequest::FocusOn`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/events/enum.NavRequest.html#variant.FocusOn
[`NavRequest::Free`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/events/enum.NavRequest.html#variant.Unlock
[`NavRequest::Unlock`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/events/enum.NavRequest.html#variant.Unlock
[`NavRequest::ScopeMove`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/events/enum.NavRequest.html#variant.ScopeMove
[`NavRequestSystem`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/struct.NavRequestSystem.html
[rfc41]: https://github.com/nicopap/rfcs/blob/ui-navigation/rfcs/41-ui-navigation.md
[`ScreenBoundaries`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/custom/struct.ScreenBoundaries.html
[`LockReason`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/prelude/enum.LockReason.html
[`ScreenBoundaries`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/custom/struct.ScreenBoundaries.html
[`LockReason`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/prelude/enum.LockReason.html
[pr-hover]: https://github.com/nicopap/bevy/blob/0530d03b514e5e1e3d42a89283b5e6d050e9c265/crates/bevy_ui/src/focus.rs#L190-L223
[`NavEventReader::types`]: https://docs.rs/bevy-ui-navigation/0.23.1/bevy_ui_navigation/events/struct.NavEventReader.html#method.types
[`NavEventReader::types`]: https://docs.rs/bevy-ui-navigation/0.24.0/bevy_ui_navigation/events/struct.NavEventReader.html#method.types

### Version matrix

| bevy | latest supporting version |
|------|--------|
| 0.10 | 0.24.0 |
| 0.9 | 0.23.1 |
| 0.8 | 0.21.0 |
| 0.7 | 0.18.0 |
Expand Down
15 changes: 6 additions & 9 deletions examples/infinite_upgrades.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use bevy::prelude::*;
use bevy::text::Text2dBounds;
use bevy::utils::FloatOrd;
use bevy::utils::HashMap;
use bevy::window::PrimaryWindow;
use bevy_ui_navigation::prelude::{
FocusState, Focusable, Focused, MenuBuilder, MenuSetting, NavEvent, NavEventReaderExt,
NavRequest, NavRequestSystem, NavigationPlugin,
Expand Down Expand Up @@ -45,7 +46,7 @@ fn main() {
.before(animate_system)
.after(upgrade_weapon),
)
.add_system_to_stage(CoreStage::PostUpdate, mark_buttons)
.add_system(mark_buttons.in_base_set(CoreSet::PostUpdate))
.add_system(upgrade_weapon.after(NavRequestSystem))
.add_system(button_system.after(NavRequestSystem))
.run();
Expand Down Expand Up @@ -194,7 +195,7 @@ fn is_in_sizeable(at: Vec2, transform: &GlobalTransform, sizeable: &impl ScreenS
pub fn mouse_pointer_system(
camera: Query<(&GlobalTransform, &Camera), With<Camera2d>>,
camera_moving: Query<(), (Changed<GlobalTransform>, With<Camera2d>)>,
windows: Res<Windows>,
primary_query: Query<&Window, With<PrimaryWindow>>,
mouse: Res<Input<MouseButton>>,
focusables: Query<(&GlobalTransform, &Sprite, Entity), With<Focusable>>,
focused: Query<Entity, With<Focused>>,
Expand All @@ -204,11 +205,7 @@ pub fn mouse_pointer_system(
if camera_moving.iter().next().is_some() {
return;
}
let primary = windows.get_primary();
let window = match primary {
Some(w) => w,
None => return,
};
let Ok(window) = primary_query.get_single() else { return; };
let cursor_pos = match window.cursor_position() {
Some(c) => c,
None => return,
Expand Down Expand Up @@ -549,7 +546,7 @@ fn spawn_button(
))
.with_children(|commands| {
commands.spawn(Text2dBundle {
text: Text::from_section(text, text_style).with_alignment(TextAlignment::CENTER),
text: Text::from_section(text, text_style).with_alignment(TextAlignment::Center),
transform: item_position(Vec2::ZERO),
..default()
});
Expand Down Expand Up @@ -602,7 +599,7 @@ fn spawn_weapon_upgrade_menu(
// Weapon name
commands.spawn(Text2dBundle {
text: Text::from_section(weapon.to_string(), text_style())
.with_alignment(TextAlignment::CENTER),
.with_alignment(TextAlignment::Center),
transform: item_position(
Vec2::Y * (MENU_HEIGHT / 2.0 - MENU_PADDING - FONT_SIZE / 2.0),
),
Expand Down
7 changes: 3 additions & 4 deletions src/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -278,10 +278,9 @@ impl<'w, 's, 'a> NavEventReader<'w, 's, 'a> {
query: &mut Query<Q, F>,
mut for_each: impl FnMut(Q::Item<'_>),
) {
for entity in self.activated() {
if let Ok(item) = query.get_mut(entity) {
for_each(item);
}
let mut iter = query.iter_many_mut(self.activated());
while let Some(item) = iter.fetch_next() {
for_each(item)
}
}
}
32 changes: 10 additions & 22 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,9 @@ pub mod systems;

use std::marker::PhantomData;

use bevy::app::{prelude::*, PluginGroupBuilder};
use bevy::ecs::{
prelude::{Component, IntoSystemDescriptor},
schedule::SystemLabel,
system::{SystemParam, SystemParamItem},
};
use bevy::app::PluginGroupBuilder;
use bevy::ecs::system::{SystemParam, SystemParamItem};
use bevy::prelude::*;

pub use non_empty_vec::NonEmpty;

Expand Down Expand Up @@ -153,7 +150,7 @@ impl<T: 'static + Sync + Send + Component + Clone> Plugin for NavMarkerPropagati
/// [`NavRequest`]: prelude::NavRequest
/// [`NavEvent`]: prelude::NavEvent
/// [`Focusable`]: prelude::Focusable
#[derive(Clone, Debug, Hash, PartialEq, Eq, SystemLabel)]
#[derive(Clone, Debug, Hash, PartialEq, Eq, SystemSet)]
pub struct NavRequestSystem;

/// The navigation plugin.
Expand Down Expand Up @@ -202,22 +199,13 @@ where
.insert_resource(resolve::NavLock::new())
.add_system(resolve::set_first_focused.before(NavRequestSystem))
.add_system(resolve::consistent_menu.before(NavRequestSystem))
.add_system(resolve::listen_nav_requests::<STGY>.label(NavRequestSystem))
// PostUpdate because we want the Menus to be setup correctly before the
// next call to `set_first_focused`, which depends on the Menu tree layout
// existing already to chose a "intuitively correct" first focusable.
// The user is most likely to spawn his UI in the Update stage, so it makes
// sense to react to changes in the PostUpdate stage.
.add_system_to_stage(
CoreStage::PreUpdate,
named::resolve_named_menus.before(resolve::insert_tree_menus),
.add_system(resolve::listen_nav_requests::<STGY>.in_set(NavRequestSystem))
.add_system(
named::resolve_named_menus
.before(resolve::insert_tree_menus)
.in_base_set(CoreSet::PreUpdate),
)
.add_system_to_stage(CoreStage::PreUpdate, resolve::insert_tree_menus)
.add_startup_system_to_stage(
StartupStage::PostStartup,
named::resolve_named_menus.before(resolve::insert_tree_menus),
)
.add_startup_system_to_stage(StartupStage::PostStartup, resolve::insert_tree_menus);
.add_system(resolve::insert_tree_menus.in_base_set(CoreSet::PreUpdate));
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/resolve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -499,7 +499,7 @@ impl Focusable {
/// # use bevy_ui_navigation::components::FocusableButtonBundle;
/// # use bevy::prelude::*;
/// fn setup(mut commands: Commands) {
/// commands.spawn_bundle(FocusableButtonBundle {
/// commands.spawn(FocusableButtonBundle {
/// focus: Focusable::new().prioritized(),
/// ..default()
/// });
Expand All @@ -524,7 +524,7 @@ impl Focusable {
/// # use bevy_ui_navigation::components::FocusableButtonBundle;
/// # use bevy::prelude::*;
/// fn setup(mut commands: Commands) {
/// commands.spawn_bundle(FocusableButtonBundle {
/// commands.spawn(FocusableButtonBundle {
/// focus: Focusable::new().blocked(),
/// ..default()
/// });
Expand Down
Loading

0 comments on commit 7b8d54f

Please sign in to comment.