Fallible Commands, Directional UI Navigation, and Picking Debug
2025-01-13
Fallible commands make their entry this week which make it much easier to define different levels of behavior when a Command
returns a Result::Err
.
POLDERS, which we've seen in multiple showcases, also gets a Steam page this week. POLDERS is a quintessentially Dutch City Builder where the sea level rises, your dikes break, and you’ll have to fight for every piece of land against the relentless sea.
Gamepad menu navigation also gets a boost this week, with a new directional navigation example.
Fallible Commands
#17043 and #17215 combine to implement Result handling for commands using queue_handled
. Commands are effectively "wrapped" with error handlers when they execute, so this does not mean you can handle a Command error in the same system that you queue it. The error handling happens later, similar to Commands themselves.
Here's an example of using the currently named Commands::queue_handled
which accepts a Command
and uses a bevy-provided error handler to print a warning if that command returns a an Err
.
commands.queue_handled(
|_world: &mut World| -> Result {
info!("here");
Err("whoops".into())
},
error_handler::warn(),
);
2025-01-14T17:39:25.100850Z INFO fallible_commands: here
2025-01-14T17:39:25.100880Z WARN bevy_ecs::system::commands::error_handler: whoops
Bevy supplies error handlers for panic
ing as well as printing error
, warn
, or being silent
. There is also a new Result
type alias that can be used in type signatures.
Anamorphic Bloom
#17096 introduces a scale factor to 2d and 3d bloom which enables a closer match to anamorphic blurs.
METIS-based virtual geometry generation
#16947 replaces meshopt in favor of METIS to group triangles. This change enables minimizing locked vertices, improving simplification.
Directional UI Navigation
#17102 hooks into the new InputFocus
to power an initial implementation of directional gamepad controls (for UI and non-UI). Additionally, #17224 adds a new example shows off gamepad/directional navigation.
cargo run --example directional_navigation
DebugPickingPlugin
The DebugPickingPlugin
from bevy_mod_picking
was upstreamed and updated in #17177.
cargo run --example debug_picking --features bevy_dev_tools
Alice's Merge Train is a maintainer-level view into active PRs, both those that are merging and those that need work.
Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.
proto-lemmings
showcase
The start of a lemmings-style game with image-based collision and destructible terrain.
Crystal Realms Trailer
showcase
Crystal Realms is a 2D Sandbox MMO game and this week it got a trailer.
The game itself is available on Itch.io including devlog updates.
POLDERS Steam Page
showcase
A project that grew in the showcase channel in the Bevy discord (from cell shading to irregular grids to the distinctive POLDERS sphere. POLDERS has also been the subject of a talk on YouTube.
POLDERS now has a Steam Page where you can wishlist it.
Character Appearance Builder
showcase
Using Observers and the new GltfMaterialName component to make a character appearance builder system.
The End is Bean
showcase
The End is Bean is a survival RTS made for a local monthly game jam. It uses bevy_rapier2d and bevy_tweening.
bevy-butler
showcase
bevy-butler is an in-progress set of procedural macros to cut down on plugin and system boilerplate code, and improve the self-documentation of systems. The crate is currently in a first-draft phase and is actively soliciting feedback.
#[system(schedule = Update, plugin = MyPlugin)]
fn hello_plugin(name: Res<Hello>)
{
info!("Hello, {}!", name.0);
}
Portal Demo
showcase
A portal demo where shooting portals through portals is supported using picking, and teleporting through the portal is possible for dynamic objects with velocity.
The demo uses
Karaoke
showcase
A karaoke tool for lyric rendering and additional graphics with a demo of the output over on YouTube
Jarl containers
showcase
Crafting, grids, sounds, and items come together to power a very polished drag-and-drop interface for containers like chests in Jarl.
bevy_pixelated_3d
showcase
A post-processing effect to pixelate 3d scenes. It includes an outline shader based on depth, normals and a robert's cross (north/south/east/east pixels) sampling. There are half-finished implementations of dithering and quantization as well.
simple_bevy_template
showcase
A new 2d started template for Bevy applications that brings an interactive cargo-generate based setup process. The process includes set for nightly rust, parallel compilation, and cranelift.
Crates
New releases to crates.io and substantial updates to existing projects
bevy_edge_detection
crate_release
A post-processing based edge detection implemented using a sobel filter over depth, normal, and color. The post-processing setup is heavily influenced by the post-processing example in the bevy repo.
bevy_easy_portals 0.4
crate_release
Easy-to-use (visual) portals that let you create mirrors and other cool effects!
0.4 brings support for picking, a depth_stencil, and more.
bevy_egui 0.32.0
crate_release
bevy_egui is an egui integration.
0.32 brings bevy_picking support as well as an input handling refactor which is an initial step towards diagetic (that is, world-space) UI.
bevy_cursor_kit
crate_release
.CUR and .ANI cursor file support for Bevy.
The author of this crate has added texture atlas support for custom cursors to Bevy, so go give the PR a review if you want this in 0.16!
bevy_cobweb_ui 0.8
crate_release
bevy_cobweb_ui is an asset-oriented UI framework for Bevy.
0.8 brings Grid layout support.
bevy_debug_log 0.5.0
crate_release
bevy_debug_log allows you to access tracing logs in your bevy app using vanilla bevy_ui.
0.5 brings support for the recent ScrollPosition
in Bevy 0.15, enabling the scrolling of logs.
bevy_rich_text3d v0.1
crate_release
Mesh based raster rich text implementation for bevy.
- Renders to
Mesh
andImage
, one quad per glyph. - Simple rich text that can fetch data from the world.
- Shader based text animation.
- Text outlines!
boimp 0.2
crate_release
octahedral imposters for bevy.
Octahedral imposters take higher resolution meshes and bake multiple views of them to textures which can be rendered on significantly lower-poly geometry while retaining the appearance.
bevy_eulerian_fluid
crate_release
A 2D fluid simulation plugin that performs simulation on the GPU.
Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
bevy-santa-demo
educational
A Christmas-themed Bevy workshop that results in a game where you help Santa collecting presents while trying to avoid snowflakes.
bevy_color: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
METIS-based meshlet generation authored by JMS55
More combinator cleanup authored by ickshonpe
Derived `Default` for all public unit components. authored by AlephCubed
Updated nixos link in `linux_dependencies.md`. authored by AlephCubed
Optimize `Entities::entity_does_not_exist_error_details_message`, remove `UnsafeWorldCell` from error authored by JaySpruce
Fix 2D Gizmos not always drawn on top authored by skimmedsquare
Update GetPath unit test and documentation for empty path usecase authored by skimmedsquare
bevy_render: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
can hide status bar on iOS authored by mockersf
Update all previously-merged `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` attributes to include a reason field pointing to the tracking issue authored by LikeLakers2
Introduce two-level bins for multidrawable meshes. authored by pcwalton
Fix depth_bias and build errors on less capable platforms authored by nandee95
Anamorphic Bloom authored by aevyrie
default UI camera extraction fix authored by ickshonpe
Add basic directional (gamepad) navigation for UI (and non-UI) authored by alice-i-cecile
Fix duplicate asset loader registration warning authored by arunke
Disallow requesting write resource access in Queries authored by vil-mo
More DefaultUiCamera fixes authored by ickshonpe
Make the `get` function on `InstanceInputUniformBuffer` less error prone authored by Bleachfuel
add line height to `TextFont` authored by Cyborus04
Cleanup entity reference types authored by ItsDoot
Remove `bevy_core_pipeline::core_2d::Camera2dBundle` authored by LikeLakers2
bevy_sprite: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` (Attempt 2) authored by LikeLakers2
bevy_asset: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_audio: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_diagnostic: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Split up `animated_fox` example authored by rparrett
Simplified UI tree navigation without `ghost_nodes` authored by ickshonpe
Update winit_runner to use spawn_app for wasm32 target authored by xuwaters
Add builder method for `TextFont::line_height` authored by rparrett
Add the original source for Oklab conversions authored by eero-lehtinen
Remove references to old sample_texture function authored by alex5nader
Added docs on how `Parent` component is affected by `BuildChildren` methods. authored by AlephCubed
iOS: can change home indicator / status bar during runtime authored by mockersf
Replace unsafe blocks in `World` and `DeferredWorld` with safe equivalents authored by ItsDoot
Upstream `DebugPickingPlugin` from `bevy_mod_picking` authored by skimmedsquare
Make typos config stricter authored by szepeviktor
msrv needs build authored by BenjaminBrienen
Reflect `bevy_input_focus` authored by chompaa
Remove temporary iOS workaround authored by chompaa
bevy_ptr: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_window: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Update `downcast-rs` to version 2 authored by bushrat011899
Move `TextureAtlas` and friends into `bevy_image` authored by mgi388
Add `Result` handling to `Commands` and `EntityCommands` authored by JaySpruce
Fix "Unrecognized Option" error when using Criterion-specific arguments in benchmarks authored by BD103
Rename `DefaultCameraView` authored by ickshonpe
Rename animated fox examples to better communicate their purpose authored by greeble-dev
bevy_ui: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Allow tuple structs in animated_field! macro authored by wolf-in-space
bevy_input: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Add compile-time dyn compatible checks for `DynEq`, `DynHash` authored by mgi388
Fix up the reason given for a couple of `too_many_arguments` lints authored by LikeLakers2
`extract_shadows` responsive coords fix authored by ickshonpe
bevy_time: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_mesh: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_winit: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_gilrs: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_log: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Cleanup instances of `#[allow(clippy::type_complexity)]` authored by LikeLakers2
If there is no movement, DragStart is not triggered. authored by rendaoer
Allow `clippy::too_many_arguments` to lint without warnings authored by LikeLakers2
Added docs about `MinimalPlugins` looping as fast as possible. authored by AlephCubed
Make sprite picking opt-in authored by chompaa
Add a simple directional UI navigation example authored by alice-i-cecile
bevy_hierarchy: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_transform: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_text: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_gizmos: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Make `bevy_remote` feature enable `serialize` feature authored by mweatherley
Fix a few typos authored by rparrett
bevy_gltf: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Improved Command Errors authored by cart
Minor `TextPipeline` cleanup authored by rparrett
Add documentation to `DynamicStorageBuffer` to clarify purpose authored by BenjaminBrienen
bevy_scene: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_state: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_pbr: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_image: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
`bevy_image` now enables reflection on `bevy_math` authored by LikeLakers2
Improve Compiler Errors for `bevy_tasks` authored by bushrat011899
`custom_ui_material` border fix authored by ickshonpe
Fix text alignment for unbounded text authored by rparrett
Want to contribute to Bevy?
Here you can find two types of potential contribution: Pull Requests that might need review and Issues that might need to be worked on.
Pull Requests Opened this week
Run example validation jobs on `ubuntu-latest` authored by rparrett
[`InstanceInputUniformBuffer::remove`] could cause incorrect behaviour. authored by Bleachfuel
Per world access lists and utils authored by ElliottjPierce
Make EntityMapper fallible authored by cBournhonesque
Allow opting-out of `check_visibility` system and creation of their own authored by Phoqinu
Stop automatically generating meta files for assets while using asset processing. authored by andriyDev
Use `multi_draw_indirect_count` where available, in preparation for two-phase occlusion culling. authored by pcwalton
Add Image constructor specialised for rendering to a texture authored by tigregalis
Fix `scale_factor_override` not used in window creation authored by chompaa
`add_edges` and `add_grid` helpers for `DirectionalNavMap` authored by alice-i-cecile
Improved UI camera mapping authored by ickshonpe
Rename UI `camera_entity` fields authored by ickshonpe
Updated the 2D examples to make them uniform authored by chamaloriz
Proportional scaling for the sprite's texture. authored by silvestrpredko
Add a viewport UI widget authored by chompaa
Create `bevy_platform_support` Crate authored by bushrat011899
Allow users to customize history length in `FrameTimeDiagnosticsPlugin` authored by rparrett
Fix entity does not exist message on index reuse authored by SpecificProtagonist
Rename `PickingBehavior` to `Pickable` authored by chompaa
Add an `Activate` triggered event to `bevy_ui` authored by alice-i-cecile
Adds an example for an extended material that uses a custom vertex shader authored by ethereumdegen
Create missing constructors for 2D primitive mesh builders authored by BD103
Update `from_reflect` to return a `Result` with `FromReflectError` authored by elbertronnie
Make `ObservedBy` public authored by ad-kr
bevy_macro_utils: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Add some multi-span text to the `text2d` example authored by ickshonpe
Use one `BevyManifest` instance per crate in proc macros authored by mdickopp
Renamed members of `ParamWarnPolicy` to reflect new behaviour. authored by AlephCubed
Implement basic clustered decal projectors. authored by pcwalton
Full world cloning authored by eugineerd
Make events no longer components authored by SpecificProtagonist
Issues Opened this week
Tangents are not updated when transforming a `Mesh` authored by MatrixDev
Steam Deck crash on startup since winit 0.30 update authored by GitGhillie
Multiple examples don't work on 0.15 authored by chamaloriz
Confusing trait bounds on `MaterialPlugin` authored by Lege19
example running on runner ubuntu-latest fails because of system dependency change authored by mockersf
Fix bevy version bump CI authored by BenjaminBrienen
Add configurable depth / world space coordinates for 2D gizmos authored by alice-i-cecile
Ghost-enabled iterator can be optimized by using the design of `TextSpanIter`. authored by alice-i-cecile
The `bevy_render::camera::camera` module shares its name with its parent module authored by LikeLakers2
Provide a fallible map_entity api authored by cBournhonesque
add_observer(s) should accept a tuple of observers akin to add_systems or add_systems should allow for observers authored by BobG1983
Window size isn't correct until second frame when scale factor is overridden authored by rparrett
Make entity observers more explicit authored by Demiu
`many_cameras_lights` should use same window settings as other stress tests authored by rparrett
Update propogate_transforms to only visit the transforms of entities that have changed authored by BenjaminBrienen
Updating `Image::data` does not change how the image is displayed in `StandardMaterial`. authored by mintlu8
`window_settings` example crashes on startup authored by BenjaminBrienen
Disabling logging with `log` crate and it's features doesn't work authored by Phoqinu
Rename `never_param_warn` into something like `ignore_param_missing` authored by Shatur
`frame_count_diagnostics_plugin.rs` is confusingly named authored by rparrett
EventReader<KeyboardInput> triggers events twice on Ubuntu 24.04 authored by RobertBrewitz
Tests in bevy_input_focus fail to ru with default feature flags authored by alice-i-cecile
Unify system and command error handling authored by alice-i-cecile
Built-in commands should return Results whenever possible authored by alice-i-cecile
Done use `pub use module::*` re-export style authored by alice-i-cecile
File Watcher panics if asset `file_path` starts with `../` authored by SludgePhD
It's possible to compile `bevy_image` with `feature = "dds"`, without also doing the same for `bevy_core_pipeline` or `bevy_gltf`, resulting in a compilation error authored by LikeLakers2
Multi-window UI example authored by ickshonpe
CustomCursor::Image could use a custom size option authored by marioferpa
Command error handling should work off of non-erased error types authored by alice-i-cecile
Plugin::build should accept self not &self authored by UkoeHB
Enable `track_location` tests authored by SpecificProtagonist
Need to take scale factor into account when transforming Node to world position authored by GitGhillie
Add a plugin / world setting for missing resource parameter panicking, skipping, and warning authored by fallible-algebra
Panic when quit bevy application authored by AllenDang
Spawning child entities is extremely slow authored by aevyrie
Improve feedback for border on text nodes authored by UkoeHB
Consider adding 'DiscriminantHashEq' macro into bevy authored by ethereumdegen