Bevy 0.13.2, Curves, Gizmos, and Games
2024-04-08
Bevy 0.13.2 is out with some bugfixes for the 0.13 release cycle. The full milestone is available on GitHub.
bevy_math
got a new Tetrahedron
primitive and the Annulus
added last week got its meshing implemetation which means it can be added to the 2d shapes example.
The close_on_esc
system, which is a helper utility Bevy offers to allow closing the application when Escape is pressed, was moved into the growing set of features in bevy_dev_tools
.
system stepping is no longer a default feature and requires being enabled to make use of it.
Bevy gained some more random sampling capabilities, including the ability to generate random directions and quaternions. This builds on the rand crate's traits.
Alice's Weekly 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.
3d shooter
showcase
After working mostly on libraries this year (such as lunex), this showcase shows off the author's initial work on a 3d shooter. There's a first person controller and an extended player model. One aspect of this showcase that I love a lot is the ability to use your existing Minecraft skin as a texture.
There were a couple of interesting updates during the week, including weapon sway and a movement state machine
Also notable is How I Design Awesome Gun Sounds which is cited as inspiration.
Bevy developer console
showcase
bevy_minibuffer is a work-in-progress developer console ui that allows asking questions of a user and even supplying autocomplete.
async fn ask_name(
mut minibuffer: Minibuffer,
) -> Result<(), Error> {
let first_name = minibuffer
.prompt(asky::Text::new(
"What's your first name?",
))
.await?;
let last_name = minibuffer
.prompt(asky::Text::new(
"What's your last name?",
))
.await?;
minibuffer
.prompt(Message::new(format!(
"Hello, {first_name} {last_name}!"
)))
.await?;
Ok(())
}
Architect of Ruin Task system
showcase
A number of different systems come together in this showcase to power logistics and tasks. Tasks can have dependencies, systems can be stateful, and any gameplay code can request a delivery.
Architect of Ruin's website is deadmoney.gg
Defend your Eggs!
showcase
Play as the red block, protecting blue blocks from the green blocks. Green blocks are collected into a chained-spring-like snake using bevy_rapier physics.
Available to play on Itch.io.
Rustroneer
showcase
Rustroneer is a 2D procedural planet generator that generates a circle with surface deformation for terrain, then uses cellular automata to create caves in side. After that connects caves using a minimum spanning tree. The mesh is generated with marching squares and can be deformed at runtime.
The author's plan is to keep adding until it feels like a living planet.
bevy_xpbd physics sandbox
showcase
bevy_xpbd is transitioning away from xpbd and thus a new solver is being worked on. This sandbox includes a whole host of different debug information and examples to test the new solver. The ui is all bevy_ui with some custom widgets and some of the tooling could be useful to include in the future bevy_xpbd, so dependencies are minimal. Source code is not yet available but likely will be.
Whack-a-Bevy
showcase
Whack-a-Bevy is an online multiplayer Whac-a-mole game first created as a submission for the first Bevy game jam and has now been updated to work with Bevy 0.13. It is available to play online and the source is available on GitHub, including the network implementation.
Fornjot-in-Bevy
showcase
Fornjot is an early-stage CAD kernel, using boundary representation (b-rep), written in the Rust programming language.
bevy_mod_fornjot is an experiment to render meshes generated by Fornjot, in Bevy. Currently this comprises a single function that translates the coordinate system for each point and then uses Bevy's utilities to finish the mesh.
Crates
New releases to crates.io and substantial updates to existing projects
lightyear 0.13
crate_release
lightyear is a full-featured client-server networking library for Bevy.
The 0.13 release brings Steam socket support as a networking transport layer as well as a new "host server" mode which allows you to run the server and the client using the same Bevy App.
Full details are available in the release notes
bevy_tween 0.3.1
crate_release
bevy_tween (which is not the same as bevy_tweening) got a 0.3.1 release which includes some breaking changes. 0.3.1 ships tween events, configurable schedules, and the ability to use relative times when building tweens.
bevy_lookup_curve 0.2
crate_release
bevy_lookup_curve is a crate that enables the construction and usage of curves. Curves are useful for many things. For example if you want to move from position 0 to position 1 over 10 seconds, you can do that in 0.1 distance increments or you could go 0.2 distance over the first 5 seconds and 0.8 over the last 5 seconds. Curves let you define and look up how far along the path from 0 to 1 your movement should be at a specific time.
More details are available in the changelog and the examples are pretty critical to check out if you're going to make use of this crate at the moment. More docs and examples are coming in future.
LookupCurve::new(vec![
Knot {
position: Vec2::ZERO,
interpolation: KnotInterpolation::Linear,
..Default::default()
},
Knot {
position: Vec2::ONE,
interpolation: KnotInterpolation::Linear,
..default()
},
])
extol_image_font first release
crate_release
extol_image_font
allows rendering fonts that are stored as a single image (typically PNG), with each letter at a given location
commands.spawn((
ImageBundle {
style: Style {
position_type: PositionType::Relative,
..default()
},
..default()
},
ImageFontText::default()
.text("Press SPACE to judge!")
.font(assets.image_font.clone())
.font_height(72.0),
));
transform-gizmo first release
crate_release
transform-gizmo
is a framework-agnostic 3d transformation gizmo. Bevy integration is provided by transform-gizmo-bevy
. The crate enables the translation, rotation, and scaling of 3d objects.
Check it out in this web demo
bevy_mod_scripting 0.6
crate_release
bevy_mod_scripting is a work-in-progress attempt to add scripting support to Bevy. Language support includes Lua, Teal, Rhai and Rune. Most notably in this release, a new architecture.md was created to make the crate easier to understand.
Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
Conway's Game of Life Through Time
educational
The author of this demo recreated Conway's Game of Life over time as a visualization. Each new generation is continually stacked on top of the previous one to show the evolution of the cellular automata through time. This is based on the same idea in a previous implementation [on Instagram](https://www.instagram.com/p/C2hoRnFsmQW/ from alecs.form
Fix typos in insert_or_spawn_batch/spawn_batch methods authored by unknownue
Add repository field to bevy_utils_proc_macros authored by paolobarbolini
Check CI against Rust beta each week authored by Brezak
Refactor `App` and `SubApp` internals for better separation authored by maniwani
fix previous_position / previous_force being discarded too early authored by AldanTanneo
Meshing for `Annulus` primitive authored by mweatherley
Implement basic traits for `AspectRatio` authored by mamekoro
[bevy_ui/layout] Extract UiSurface to its own file authored by StrikeForceZero
many_cubes: Add no automatic batching and generation of different meshes authored by superdump
Add `Tetrahedron` primitive to `bevy_math::primitives` authored by Chubercik
Micro-optimize `queue_material_meshes`, primarily to remove bit manipulation. authored by pcwalton
Remove redundant imports authored by BD103
Add `RemovedComponentEvents::iter` authored by Shatur
Fix UV coords in `generate_custom_mesh` example authored by jake8655
Normalize warning messages with Nvidia drivers authored by jake8655
Fix wrong dependency in weekly ci authored by Brezak
Remove unused `ImePreedit` component from `text_input` example authored by BD103
remove `DeterministicRenderingConfig` authored by mockersf
Add the annulus shape to the `2d_shapes` example authored by Chubercik
Remove unnecessary branch in query iteration authored by re0312
[bevy_ui/layout] Update tests to get GlobalTransform properly authored by StrikeForceZero
Add methods `iter_resources` and `iter_resources_mut` authored by matiqo15
Changed the order of arguments for the Arc gizmo docs authored by StephenTurley
Move `close_on_esc` to `bevy_dev_tools` authored by BD103
remove close_on_esc authored by matiqo15
Add `EntityWorldMut::remove_by_id` authored by mrchantey
Ignore query parameters in AssetPaths when determining the extension authored by kristoff3r
Remove stepping from default features authored by yyogo
fixing line comment in 2d_shapes.rs example authored by forgemo
Change `Tetrahedron` default origin to `(0, 0, 0)` authored by chompaa
Cluster small table/archetype into single Task in parallel iteration authored by re0312
Random sampling of directions and quaternions authored by mweatherley
Error info has been added to LoadState::Failed authored by bugsweeper
Disable RAY_QUERY and RAY_TRACING_ACCELERATION_STRUCTURE by default authored by cart
document how to publish patches authored by mockersf
Fix broken link in mesh docs authored by Multirious
fix msaa shift with irradiance volumes in mesh pipeline key authored by mockersf
Relax BufferVec's type constraints authored by james7132
Added method to get waiting pipelines IDs from pipeline cache. authored by Remi-Godin
Fix example showcase wasm window settings patch authored by rparrett
Fix skybox wrong alpha authored by JMS55
Fixes #12000: When viewport is set to camera and switched to SizedFul… authored by LuisFigueiredo73
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
Correctly handle UI hierarchy without a camera authored by salvadorcarvalhinho
[Extreme WIP] Resource-oriented RenderGraph authored by JMS55
Switch to ui_test in compile fail tests. authored by Brezak
UI: pass the untransformed node size to the shader authored by mockersf
Statistical assessment of spatial distributions authored by mweatherley
Consolidate Render(Ui)Materials(2d) into RenderAssets authored by superdump
Manipulate non-send resources with `Commands` authored by BD103
Create custom action for installing Linux dependencies authored by BD103
Respect DownLevel flag for Cube Array Textures for point_light_shadow_map_array_texture_view. authored by sampettersson
Small CI tool improvements authored by BD103
Deprecate `ReceivedCharacter` authored by chompaa
Created loading screen example authored by Remi-Godin
Clean up some low level dependencies authored by james7132
flush ButtonInput<KeyCode> cache when Bevy window loses focus authored by gavlig
Add gpu readback example authored by IceSentry
Schedule executor benchmark authored by re0312
Next Task Optimization for the Mulithreaded Executor authored by james7132
Add example for using .meta files authored by MTFT-Games
Asynchronous asset loading API authored by mintlu8
Fix AABB projection for meshlet occlusion culling authored by JMS55
Meshlet LOD-compatible two-pass occlusion culling authored by JMS55
Fix example game of life authored by mockersf
Make some `ReflectComponent`/`ReflectBundle` methods work with `EntityMut` too authored by SkiFire13
Fixed a bug where skybox ddsfile would crash from wgpu authored by Hexorg
Document the lifetime requirement of `byte_offset` and `byte_add` authored by orzogc
[WIP] Implement better EntityPath authored by Multirious
Implement GPU frustum culling. authored by pcwalton
Issues Opened this week
Strange behavior on PinePhone Pro authored by Shatur
Broken link in mesh docs authored by flash-freezing-lava
Ability to change AudioSource in AudioSink authored by Aunmag
`TargetCamera` breaks UI mouse interaction authored by musjj
Bizarre Stack Overflow when utilizing Default trait or ..default() to initialize components authored by jaydevelopsstuff
SystemInformationDiagnosticsPlugin is slow authored by jannik4
Bevy internal entities need public visible marker. authored by brandon-reinhart
Table redundantly stores 3 lengths and capacities for each column authored by james7132
Directly upload assets that are only meant to be used on the GPU authored by james7132
Enable World Swapping authored by UkoeHB
`AsyncSeek` trait bound on `Reader` may limit options to stream bytes authored by alice-i-cecile
[MacOS] [Safari/Wasm] Window::cursor_position returns None when inside the window on MouseButtonInput Released authored by extrawurst
Improve and clarify creation of custom CameraProjection authored by Zoomulator
Alternate reversable fixed-timestep Schedule and `Time` instance authored by CHATALOT1
Off screen window crashes App authored by alexk101