Bevy Jam 5 WIPs, landmasses, and gizmos-in-practice
2024-07-29
Much of the ecosystem this week has been taking time to participate in the Bevy game jam in one way or another. By the time you're reading or watching this, Bevy Jam 5 will have closed for submissions and voting will have started. So go play some of the submissions and vote for a winner!
The Next Generation Scene/UI working group is kicking off with an almost 8k word proposal and a suitably large ensuing discussion. The overall proposal intends proposes to
Embrace the "Bevy data model" for both Scenes and UI. Fill in functionality and UX gaps where necessary.
This is a proposal, so if you're interested give it a read and catch up on what's already been discussed. The working group can be found in the Bevy Discord under #working-groups in the Next Generation SceneUI thread.
Following on that proposal, Alice wrote A vision for Bevy UI which kicked off even more discussion centering around the question "what should bevy_ui be?". This spawn a lot of great discussion which is accessible in the Discord thread in the #ui-dev channel. Especially check out the pinned posts for this one, which include wonderful dives into incrementalization and Reactive Design Choices by DreamerTalin
, the author of Quill.
Meshlets
The meshlets tracking issue got a rewrite this week to better align with what the actual plan is, including what's left before the next big PR and the major goals after that.
Flag Frenzy
flag-frenzy
is a new in-house tool built to automatically test the growing combinations of Bevy feature flags. It has already caught four bugs including the latest two: Fix bevy_winit not building with serialize feature and Fix bevy_gltf PBR features not enabling corresponding bevy_pbr flags.
Transform Propagation Optimizations
Transform Progagation got some work this week both in measured work improvements and in reducing unnecessary work
Run Conditions
app.add_systems(Update, (
system_0.run_if(run_once),
system_1.run_if(resource_changed_or_removed::<T>),
system_2.run_if(resource_removed::<T>),
system_3.run_if(on_event::<T>),
system_4.run_if(any_component_removed::<T>),
));
In #14441 some Run Conditions got simpler. Now you no longer need to call them as functions yourself.
QueryManyIter DoubleEndedIterator
Query::iter_many
allows the iteration of a Query filtered by a list of entities. In #14128 DoubleEndedIterator
is implemented for the resulting iterator, allowing access from the back.
Hue Mixing
If you were using Oklcha
or Lcha
there were bugs in the mixing of hues, resulting in not-quite-right combinations. #14468 fixes this. This was a fix driven by game jam usage, so one more vote in favor of the game jams that happen every two releases.
Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.
Probos Report
showcase
Probos Report was created for the 48h IGDC Game Jam and features
- Procedural levels using transvoxel_rs
- Bloom and fog effects that run in the browser.
- Music and sound effects using bevy_kira_audio
Probos Report has a YouTube trailer and you can play in your browser
Ethertia
showcase
Sandbox Voxel Game Ethertia has upgraded to Bevy 0.14 with SSR Liquid Reflection, Volumetric Fog, and light support.
Cloudcafe VR desktop environment
showcase
Cloudcafe is a VR desktop environment, a shell, that replaces the windows environment for VR. The goal is to provide an experience where any user can plug in their Quest 2 or Quest 3 into a laptop or pc, and have their windows show up as individual entities to be manipulated on a spherical plane. It is aiming for a very high level of polish and low-friction seamless interaction. Taking off the headset should immediately return the windows to their original locations on the computer monitor, and putting it back on should re-engage Cloudcafe.
By working over a wire, and doing the rendering on a mobile VR headset, one should be able to take any windows laptop to a coffee shop, plug in the headset, and immediately start work with the equivalent of a 2k monitor resolution, with any number of individual screens.
The screens are gnomically projected, maintaining their shape and size, giving the appearance of flat windows that are seamlessly moved around a spherical shell, and a custom task bar and search menu built to be faster and better than the windows version.
There and Back again Jam Menu
showcase
This jam entry's main menu has at least two interesting facts about it. One is the main menu text that is formed from particles and the second is the navmesh implementation from vleue_navigator applied to the 3d pathfinding present in the menu's graphics.
Elevated Arcana
showcase
Elevated Arcana is a new game that's been in progress since December that just got its alpha release. There are test builds for iOS and Android with Desktop expected to follow.
View the trailer on YouTube
Aseprite as level editor
showcase
This Bevy Jam 5 submission is using Aseprite, and animated sprite and pixel editor, as a level editor
Polygon generation via Straight Skeletons
showcase
This demo shows off a work-in-progress straight skeleton implementation for the generation of polygons
Crates
New releases to crates.io and substantial updates to existing projects
ghx_constrained_delaunay v0.1
crate_release
A fast Rust library for 2D constrained Delaunay triangulation
Examples & demos come with a visual Bevy debugger to observe the triangulation process.
Spirit Editor V14.2
crate_release
Spirit Editor is an open source 3D world editor. It has been in development and usage for months now.
bevy_mod_bbcode
crate_release
Format your UI text with BBCode:
commands.spawn(BbcodeBundle::from_content(
"test [b]bold[/b] with [i]italic[/i] and [c=#ff00ff]color[/c]",
BbcodeSettings {
regular_font: asset_server.load("fonts/FiraSans-Regular.ttf"),
bold_font: asset_server.load("fonts/FiraSans-Bold.ttf"),
italic_font: asset_server.load("fonts/FiraSans-Italic.ttf"),
font_size: 40.,
color: Color::WHITE,
},
));
landmass 0.6.0 and bevy_landmass 0.7.0
crate_release
landmass
(and bevy_landmass
) is a navigation system focusing on pathfinding and local collision avoidance.
This update includes some decently sized features:
- 2D navigation (expanded from just 3D before)
- Adhoc navigation queries
- Sampling a point on the nav mesh or finding a path
- Node types with different costs
- Some parts of your mesh can be slower (like mud), or faster (like speed gel in Portal 2).
- Islands are simpler; they must always have a nav mesh.
- Agents have a different desired speed from their max speed
- This results in better local avoidance as agents can "run ahead" of each other.
Moonshine Tag
crate_release
Cheap, fast, mostly unique identifiers designed for Bevy.
use bevy::prelude::*;
use moonshine_tag::prelude::*;
tags! { APPLE, ORANGE, JUICY, CRUNCHY, POISONED }
let mut world = World::new();
// Spawn some fruits!
let a = world.spawn([APPLE, CRUNCHY].into_tags()).id();
let b = world.spawn([ORANGE, JUICY].into_tags()).id();
let c = world.spawn([APPLE, CRUNCHY, POISONED].into_tags()).id();
// Only crunchy, edible apples, please! :)
let filter: TagFilter = (APPLE & CRUNCHY) & !POISONED;
assert!(filter.allows(world.tags(a)));
assert!(!filter.allows(world.tags(b)));
assert!(!filter.allows(world.tags(c)));
Moonshine Check
crate_release
Validation and recovery solution for Bevy. Run checks against entities and action the result.
landmass_oxidized_navigation 0.1.0
crate_release
A brand new crate to allow using oxidized_navigation to feed into bevy_landmass! Previously it was up to the user to create navigation meshes for bevy_landmass. Now with oxidized_navigation, you just put colliders in your world and navigation meshes will automatically be created for bevy_landmass!
bevy_quill 0.1.3
crate_release
Contains a number of simplifications and performance improvements, including the use of component hooks for cleanup - so if you want to tear down a UI you can just despawn the view root entity and all cleanup should be automatic. Also adds a ListRow widget.
bevy_blendy_cameras
crate_release
A crate for Bevy camera controls. For editors or 3D view of desktop app. Inspired by Blender camera controls.
- Pan/Orbit/Zoom controller with "Zoom to mouse position" and "Auto depth"
- Fly controller
- Set viewpoint (front, back, right, left, top, bottom)
- Frame entities into view
- EGUI support
This crate was inspired by bevy_panorbit_camera
bevy_lit
crate_release
Inspired by bevy_light_2d and bevy-magic-light-2d, this new 2d lighting crate focuses on usability and ergonomics and has support for light occluders.
Devlogs
vlog style updates from long-term projects
A day with bevy_ui
devlog
Alice's thoughts after spending a day building with bevy_ui as a user.
TL;DR: solid fundamentals, needs widgets, text handling is bad, bevy_mod_picking is great.
Fix breaking image 0.25.2 release. authored by tychedelia
Added `AstcBlock` and `AstcChannel` to the forwarded wgpu types. authored by Earthmark
Don't ignore draw errors authored by IceSentry
Simplify run conditions authored by benfrankel
Fix error in `bevy_ui` when building without `bevy_text` authored by BD103
Fixup Msaa docs. authored by tychedelia
Add some missing reflect attributes authored by mrchantey
Fix single keyframe animations. authored by yrns
Remove manual --cfg docsrs authored by Coder-Joe458
Only propagate transforms entities with GlobalTransforms. authored by StarArawn
Add and reflect `Default` impls for CSS grid types authored by SludgePhD
feat: expose the default font bytes authored by seabassjh
Fix the example regressions from packed growable buffers. authored by pcwalton
Optimize transform propagation authored by CrazyRoka
Move `Msaa` to component authored by tychedelia
Unignore `Camera.target` field for reflection authored by SludgePhD
Fast renormalize authored by IQuick143
allow more configuration for showcase from the CLI authored by mockersf
Fix incorrect function calls to hsv_to_rgb in render debug code. authored by Soulghost
Prevent division by zero in HWBA to HSVA conversions authored by ickshonpe
implement DoubleEndedIterator for QueryManyIter authored by Victoronz
Fix repeated animation transition bug authored by Dentosal
feat: Add `World::get_reflect()` and `World::get_reflect_mut()` authored by futile
feature: Derive Hash for KeyboardInput. authored by shanecelis
fix examples after the switch for msaa to a component authored by mockersf
Require `&mut self` for `World::increment_change_tick` authored by JoJoJet
Add BorderRadius field to ImageBundle authored by BlakeBedford
Add intradoc links for observer triggers authored by dmyyy
Dedicated `Reflect` implementation for `Set`-like things authored by RobWalt
remove check-cfg job authored by mockersf
`ptr`: allow `Ptr` and `PtrMut` construction for references to values of `?Sized` types authored by soqb
Don’t prepare 2D view bind groups for 3D cameras authored by brianreavis
Fix hue mixing for `Lcha` and `Oklcha` authored by benfrankel
Conversions for Isometry3d ⟷ Transform/GlobalTransform authored by mweatherley
fix meshlet example authored by re0312
Fix `bevy_gltf` PBR features not enabling corresponding `bevy_pbr` flags authored by BD103
Fix `bevy_winit` not building with `serialize` feature authored by BD103
Handle 0 height in prepare_bloom_textures authored by NiseVoid
Remove `#[cfg]` from the `From` impls of `TextSection` authored by SludgePhD
Made ViewUniform fields public authored by brianreavis
Fix typo in `World::observe` authored by thatchedroof
Fix TextureCache memory leak and add is_empty() method authored by brianreavis
Don't debug `SystemId`'s entity field twice authored by SkiFire13
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
bevy_reflect: Adding support for Atomic values authored by recatek
Correct minimum range-alloc version authored by JMS55
Remove incorrect equality comparisons for asset load error types authored by JoJoJet
Add a method for asynchronously waiting for an asset to load authored by JoJoJet
Add Color::srgb_u32 authored by aMyTimed
Making `bevy_render` an optional dependency for `bevy_gizmos` authored by Neo-Zhixing
Retain Rendering World authored by re0312
Added serialize flag to bevy_math dep of bevy_ui authored by TheDudeFromCI
Addition of QUIC networking primitives authored by TirushOne
Split Resource and Component Access authored by re0312
Refactor Bounded2d/Bounded3d to use isometries authored by mweatherley
Use AccumulatedMouseMotion, AccumulatedMouseScroll in examples authored by richchurcher
Add note on StatesPlugin requirement for state code authored by richchurcher
fix issue with phantom ui node children authored by eidloi
Issues Opened this week
Allow query transmutation with immutable query references authored by kaphula
Add `AssetPath::exists` authored by alice-i-cecile
Helper methods on `Transform` authored by lylythechosenone
Add a rect field to UiImage authored by MarcoMeijer
Sprite AABB does not seem to update with position of the sprites authored by alice-i-cecile
Reflect: Support for Atomic values authored by recatek
Can not load 3D examples on the website authored by rijenkii
Volumetric fog broken on WASM authored by Azorlogh
Viewport debug example in web has a visual difference between the two uinode trees authored by mgi388
Improve docs on bloom authored by cBournhonesque
Implement FromStr and TryFrom for ParsedPath authored by Multirious
Rounded borders bleed background pixels authored by eidloi
Bevy UI: image doesnt work with width: Val::Auto authored by aMyTimed
Volumetric fog should work with spot lights and point lights authored by Bcompartment
Shouldn't Identity state transition trigger OnExit/OnEnter ? authored by Inspirateur
Add change ticks to asset references authored by viridia
Slow memory leak authored by re0312
bevy_gizmo draw AABBs: Allow showing based on visibility authored by torsteingrindvik
Conversions missing for Vec --> Unorm8x4 authored by viridia
Observers and hooks doesn't pair well with mapped entities authored by Shatur
Open USD support authored by NicTanghe
Using SubState in run condition function panics if ParentState is not on authored by PatrickChodowski
bevy_math's `libm` feature should probably apply to bevy_math's internal code authored by mweatherley
3D Rendering / Visibility range web example panicked authored by s-mayrh
Panic when a despawning `Entity`'s observer spawns an `Entity` authored by Yttrmin
Customize `BorderRadius` aliasing authored by musjj
Mesh thickness prepass textute authored by Bcompartment
Borders are not rendered for `ImageBundle` nodes authored by alice-i-cecile
`BorderColor` should impl `From<Color` authored by alice-i-cecile
`Option<SystemId>` doesn't support `Reflect` while `Option<Entity>` does authored by guyguy2001
Crash due to wgpu during startup on Wayland authored by umut-sahin
Need better examples for vertex shaders in 3d meshes authored by viridia