
Playdate, Pirate Game Jam, and Car Controllers
2025-02-03
Last week we saw Bevy on the Game Boy Advance and this week we see it continue with the Playdate! Really amazing progress on the no_std'ization of the Bevy crates and community progress starting to support new platforms even at this early stage.
A number of games made their way to game jams and marketplaces this week, including the Pirate Software game jam and the Google Play Store.
We also see a couple of different car controller based games, one in a cartoon "get off at the right exit" style and another in a more realistic racing sim environment.
commands.entity entry api
EntityEntryCommands::entity()
method chaining
commands
.entity(player.entity)
.entry::<Level>()
// Modify the component if it exists
.and_modify(|mut lvl| lvl.0 += 1)
// Otherwise insert a default value
.or_insert(Level(0))
// Return the EntityCommands for the entity
.entity()
// And continue chaining method calls
.insert(Name::new("Player"));
Image::get_color_at_3d
#17548 extends Image::get/set_color_at_3d
to work on 2d texture arrays.
let mut image = Image::new_fill(
Extent3d {
width: 5,
height: 10,
depth_or_array_layers: 3,
},
TextureDimension::D2,
&[0, 0, 0, 255],
TextureFormat::Rgba8Unorm,
RenderAssetUsages::MAIN_WORLD,
);
image.set_color_at_3d(0, 0, 0, Color::WHITE).unwrap();
image.set_color_at_3d(2, 3, 1, Color::WHITE).unwrap();
image.set_color_at_3d(4, 9, 2, Color::WHITE).unwrap();
Unique Entity Collections
#16547 introduced the EntitySet
trait as a basis on which to preserve the "uniqueness" property of collections as much as possible. Uniqueness is important because if you can guarantee an element is unique, then it can not overlap with other mutable access to other elements. This in turn allows relying on the invariant to enable iter_many_unique_mut
apis.
This week, in #17549, UniqueEntityVec
was introduced, allowing collecting unique iterators while sustaining the uniqueness property.
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.

Lemmings pixel collision
showcase
pixel based collision detection in a compute shader for a lemmings-style game.

Hexroll3 hex maps
showcase
Work in progress for Hexroll3. hexx is used for layout and hex grid calculations, bevy-rich-text3d is used for the labels, and bevy-editor-cam for the camera control.




Crystal Realms on Google Play Store
showcase
Crystal Realms has made its way to being published on the Google Play Store. Crystal Realms is a mmo game where you can gather resources and make your own worlds! You can fight enemies, complete quests, craft items, make friends and more.

Exit 3A: The Game
showcase
Successfully take the exit without losing all your cargo in this driving game with arcadey physics powered by a custom car controller and Avian Physics.

Bevy Racing Game
showcase
An Assetto Corsa map imported into a Bevy racing game! There's more information about the car controller and physics used in the discord thread.

Gravitate
showcase
Gravitate is a mobile game prototype where you click and drag to send a ship off around planets. Note that if you check this prototype out on the web you should make the aspect ratio of the web window more "mobile-like" to properly see the game

Bevy on Playdate
showcase
After we saw Bevy running on the Game Boy Advance due to the ongoing no_std work, the playdate was next in line. This demo uses the unique playdate crank input to power a ship among asteroids.

Crates
New releases to crates.io and substantial updates to existing projects
bevy_lookup_curve 0.7.0
crate_release
bevy_lookup_curve
is an editable lookup curve for that can be used just about anywhere where you need a formula (x -> y) that you can fine tune with a GUI such as:
- Animation
- Gameplay progression
- Physics
- Probability control (item drops)
- Shaders
In 0.7, LookupCurve
now implements bevy_math::Curve<f32>
to make it more versatile giving access to a lot of conveniences like resampling.
bevy_auto_plugin
crate_release
bevy_auto_plugin is a series of proc macros that include functionality for
- auto registering types
- initializing resources
- adding
Name
using the ident via required components - adding events
#[auto_register_type]
#[derive(Component, Reflect)]
#[reflect(Component)]
#[auto_name]
struct FooComponent;

lightyear 0.19
crate_release
Lightyear is a full-featured server-client networking library for bevy.
0.19 introduces a visualizer built on top of bevy_metrics_dashboard that includes information about lightyear's rollbacks, replication, messages, latency, and more.
Also in 0.19 is lag compensation which is roughly described as "the server rewinding time" to apply user actions. The fps
example showcases the new feature using avian and the new lightyear_avian
.
bevy_gpu_compute
crate_release
bevy_gpu_compute uses macros to convert Rust code into wgsl code that can run on the gpu.

bevy-inspector-egui 0.29
crate_release
bevy-inspector-egui takes advantage of Bevy's reflection infrastructure to display inspector editors for reflected values in your running game.
bevy-inspector-egui 0.29 bumps egui
to 0.30 and bevy_egui
to 0.32, and also introduces the ability to show reflected documentation on hover in-game.
Avian 0.2.1
crate_release
Avian is an ECS-driven physics engine for Bevy.
Avian 0.2.1 is a bugfix release and adds additional documentation.
In addition, avian_derive also got a release, which is a crate that provides derive macros for PhysicsLayer
.

bevy_knossos
crate_release
bevy_knossos is a fork of knossos, which is a crate and cli for maze generation. The bevy_knossos fork focuses on Bevy integration and development, including features like:
- iterating over cells
- indexing cells
- start position manipulation
The repo contains a small bevy example and it is capable of integrating with 2d tilemap crates like bevy_ecs_tilemap.

Devlogs
vlog style updates from long-term projects
Fix `Visibility` link on b0004 error page authored by yrns
Reflect and register the wireframe materials authored by SludgePhD
Add alpha mode implementation to shader_material_2d authored by Leinnan
Fix calculation of skybox rotation authored by hukasu
Fix window close in example cause panic authored by jiangheng90
implement UniqueEntityVec authored by Victoronz
`Image::get_color_at_3d` and `Image::set_color_at_3d`: Support 2D images with layers authored by EmbersArc
Automatically transform cursor hotspot user asks to flip cursor image authored by mgi388
expose OverflowAxis::Hidden as Overflow functions authored by LucDrenth
Move bounding_2d example to math folder authored by NiseVoid
Fix docs mistake in bevy_ecs::world authored by berylllium
Update render_resource gpu buffer doc comments authored by Weshnaw
Rename `ArgList::push` methods to `with` and add new `push` methods which take `&mut self` authored by atornity
Share implementation of sort methods. authored by chescock
UI material border radius authored by ickshonpe
Improved UI camera mapping authored by ickshonpe
`no-camera` `many_buttons` argument, only emit UI camera warnings once authored by ickshonpe
`UiSurface::upsert_node` refactor authored by ickshonpe
feat(ecs): add `EntityEntryCommands::entity()` method chaining authored by JeanMertz
Fix link to states example authored by scvalex
Fixes #17508: bevy_color::Color constructor docs get docs matching underlying constructor authored by janis-bhm
Remove unnecessary `PartialReflect` bound on `DeserializeWithRegistry` authored by aecsocket
Extract UI nodes into a Vec authored by ickshonpe
Make `EntityHashMap::new` and `EntityHashSet::new` const authored by Jondolf
Remove IDE gitignores authored by SpecificProtagonist
Use the provided `caller` instead of `Location::caller()` in `despawn_with_caller()` authored by chescock
chore: impl `PartialEq` for `bevy_ui::Text` and `bevy_text::TextColor` authored by JeanMertz
`Image::get_color_at` and `Image::set_color_at`: Support 16-bit float values authored by EmbersArc
Smarter testbeds authored by mockersf
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
feat: impl `Ease` for `Isometry[2/3]d` authored by RobWalt
Fix update execute while app exit authored by jiangheng90
Upgrade to wgpu v24 authored by JMS55
Cold Specialization authored by tychedelia
WIP: Remove prepasses from the render world when they're removed from the main world. authored by pcwalton
Basic UI text shadows authored by ickshonpe
Insert children authored by bjoernp116
Decouple the main sub app update and render sub app update authored by SarthakSingh31
Atmosphere LUT parameterization improvements authored by mate-h
Revert "Fix rounding bug in camera projection (#16828)" authored by hukasu
implement UniqueEntitySlice authored by Victoronz
Remove rounding from `OrthographicProjection::update` and some tidyin… authored by hukasu
Use more headers in AsBindGroup docs authored by IceSentry
Name component simplification authored by eckz
don't use bevy_pbr for base bevy_gizmos plugin authored by rambip
Store UI render target info locally per node authored by ickshonpe
Improve ergonomics of `platform_support`'s `Instant` authored by Mathspy
generic component propagation authored by robtfm
Fix cursor hotspot out of bounds when flipping authored by mgi388
Automatically enable `portable-atomic` when required authored by bushrat011899
Synchronized component registration authored by ElliottjPierce
Implementing Reflect on *MeshBuilder types authored by eckz
Fixing `ValArithmeticError` typo and unused variant authored by eckz
Fix Taffy viewport node leaks authored by ickshonpe
Fixes #16480: Prevent exponential denormalization on `Transform::rotate_axis` authored by Novakasa
Encapsulate `cfg(feature = "track_location")` in a type. authored by chescock
Support decibels in bevy_audio::Volume authored by mgi388
Query by Indexed Component Value authored by bushrat011899
Remove unsound SystemParam impl for DeferredWorld authored by ItsDoot
Fix `update_image_content_size_system` to use the camera target's scale factor authored by ickshonpe
Fix access checks for DeferredWorld as SystemParam. authored by chescock
Extract sprites into a `Vec` authored by ickshonpe
Tiny ci improvements authored by mockersf
Add a test for direct recursion in required components. authored by ElliottjPierce
Allow `SceneMapSerializer` to accept `Box<dyn Reflect>`s as well authored by aecsocket
Expose ObserverDescriptor fields authored by cBournhonesque
Implement `Serialize`/`Deserialize` for entity collections authored by Jondolf
`queue_sprites` comment fix authored by ickshonpe
Move sprite batches to resource authored by tychedelia
Respect viewport position in coordinate conversion functions authored by Novakasa
anti-alias outside the edges of UI nodes, not across them authored by ickshonpe
As-needed change detection authored by SpecificProtagonist
Issues Opened this week
Implement the trait `Ease` for `Isometry3d` authored by TheGrungringMachine
Inactive Camera with higher priority hides the menu authored by lucidBrot
`dynamic_linking` causes `linker stderr` authored by lomirus
Split apply_pbr_lighting into many many small functions authored by ethereumdegen
`ImageSampler::get_or_init_descriptor` does not align with `ImagePlugin` authored by aloucks
Modify bevy_ecs to support removing archetypes and unregistering components authored by alice-i-cecile
Create window with physical resolution authored by francisdb
UI Node with border radius causes background pixels to come through on the inside of rounded corners authored by LucDrenth
GPU 2-phase occlusion broke rendering on some Android devices authored by mockersf
Multiple Fog Volumes Panic authored by the-real-ale
Native Bézier Curve & Path Rendering Support in Bevy authored by M1thieu
Commands doesn't have trigger_ref for events authored by yoursalvation
Prefer expressions to closures in #[require()] when defining required components authored by jonathandw743
`measure_text_system` scale factor change detection watches the camera target's scale factor, not the text node's authored by ickshonpe
Window location out of sync with winit when moved outside screen authored by francisdb
Method for adding a single entity relationship authored by Freyja-moth
Taffy viewport nodes leak authored by ickshonpe
Add generic commands for upgrading a standard material into an extension material and downgrading it back authored by ethereumdegen
Migrate Observers to use Relationships authored by viridia
Derive Macro for MapEntites authored by jonathandw743
Public World APIs for System metadata authored by fallible-algebra
UI image size is only updated on changes to the primary window's scale factor authored by ickshonpe
Reflect derive macro showing an error in rust-analyzer on latest Bevy main version but not 0.15.1 authored by perry-blueberry
Many structs/enums derive Default and Reflect, but not reflect(Default). authored by anlumo
Docs around observer Trigger::components() is not clear authored by cBournhonesque
Atmosphere example panics when backend is DX12 instead of Vulkan authored by GitGhillie
UI Clipping scale factor leak authored by ickshonpe