This Week in Bevy

What happened this week in the Bevy Engine ecosystem

Links

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.

an editor

An Editor

showcase

This editor gained a "puffiness" material that applies a beveling effect. The geometry is currently generated on the cpu.

lemmings pixel collision

Lemmings pixel collision

showcase

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

hexroll3

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.

grumpy sword

Grumpy Sword

showcase

Grumpy Sword is the author's first Bevy game, made for the Pirate Software Jam

sword for hire fightingsword for hire

Sword for Hire

showcase

Sword for Hire is an entry for the Pirate Software Jam.

crystal realms

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.

gizmos in a unicode renderer

Unicode Renderer

showcase

An in-progress unicode renderer that gained support for rendering gizmos.

the beginnings of a gamejam game

Gamejam beginnings

showcase

The first scene in the beginnings of this gamejam game

exit 3a: the game

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.

path of exile 2 skill tree

Path of Exile 2 Passive Skill Tree

showcase

One hour (of a possible 188 hours) of all the possible builds from all possible start positions on the Path of Exile 2 passive skill tree.

planetary terrain system

Planetary Terrain

showcase

A new terrain systems where the terrain is rendered via an indirect draw call and the resolution scales with the observer's position.

bevy racing

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.

newtonian artillery

Newtonian artillery game

showcase

A custom xpbd implementation built on top of parry2d (for collision detection) powers this newtonian artillery game. UI is built with egui.

waypoint on-screenwaypoint off-screen

Waypoints

showcase

This waypoint UI shows a skull in the direction of the desired location when the location is off-screen.

gravitate

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

whack a key

Whack-A-Key

showcase

Feeling frustrated? Whack-A-Key!

Whack-A-Key is a qwerty style whack a mole game you can play on Itch and check the source out on GitHub

rng number generator

Random Number Generator Visualization

showcase

A random number generator visualized as a randomly selected sphere of numbered balls. Physics are supplied by Rapier.

fling-a-dingfling-a-ding gameplay

Fling a Ding

showcase

A physics based high-score chaser made for mobile (and playable in the browser). Click and drag to send the ball into the cubes. The higher the cubes get the more they add to the multiplier.

bevy on  the playdate

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.

marching squares

Marching Squares Experiment

showcase

This is a demo of an experimental marching squares implementation in Bevy. The end-goal is to generate a navmesh for navigational use cases and the code is available on GitHub

Crates

New releases to crates.io and substantial updates to existing projects

bevy_mod_scripting 0.9.0

crate_release

bevy_mod_scripting is an initial attempt to enable scripting within Bevy's existing framework. 0.9 represents a complete rewrite so if you've tried it in the past now might be a great time to give it another go. It also has a shiny book

bevy_tiled_loader

crate_release

bevy_tiled_loader uses a custom nom parser to parse Tiled maps and render them in Bevy, with support for avian colliders.

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

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 reflect docs

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

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

varg devlog

VARG: January 2025

devlog

The first VARG development update video is now up on YouTube

No Educational this week
Pull Requests Merged This Week
Contributing

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.

How do I contribute?

Pull Requests Opened this week

Issues Opened this week