Tilemaps, Multiplayer, and Mesh merging
2024-02-19
Welcome to another week in the Bevy ecosystem!
This week we've got a wide assortment of showcases, from 3d movement to world generation and more than a few mentions of multiplayer networking.
The long awaited bevy_ecs_tilemap support for Bevy 0.12 is released. This brings bevy_ecs_ldtk's support for Bevy 0.12 with it as well.
Alice posted another #bevymergetrain on mastodon. These threads are always a great place to gain some additional insight into currently open pull requests.
Jondolf added Mesh::merge which makes combining multiple meshes into one mesh significantly easier.
let mut cuboid = Mesh::from(shape::Box::default());
let mut cylinder = Mesh::from(shape::Cylinder::default());
let mut torus = Mesh::from(shape::Torus::default());
cuboid.merge(cylinder);
cuboid.merge(torus);
If you're looking to get started contributing, perhaps consider trying to document the Image type or ScheduleLabel's dependencies.
Bevy 0.13 is coming soon. Although Bevy's release schedule aims for a release every 3 months, there is no firm release date even though we can already start to see preparations for the release.
Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.
Brush tools for a terrain editor
showcase
Brush tools for building terrain was added to bevy_mesh_terrain_editor
Ethertum Foliage/Vine/Tree generation
showcase
Ethertia is a multiplayer sandbox survival game taking inspiration from Minecraft that introduced new generation for foliage, vines, and trees this week.
There is a YouTube video showcasing some of the world generation as well as a GitHub repo with the source code.
3d character movement demo
showcase
A movement demo from someone's first game! Includes a YouTube Video showing off the movement. Notably includes pretty smooth 3d animations using the animation player.
Settletopia
showcase
Settletopia is a multiplayer settlement management and kingdom development game that added multiple new features this week, including expedition creations, new settlement creation, and caravans for transporting resources. Includes a YouTube video showing off some of the new features.
Starwolves: Space
showcase
Physics prediction and netcode for a first-person prototype. Includes a video, a blog post, and the source code
Crates
New releases to crates.io and substantial updates to existing projects
bevy_tiled_blueprints' first release
crate_release
bevy_tiled_blueprints is a library for reading output from the Tiled level editor into Bevy apps.
warbler_grass 0.5
crate_release
warbler_grass is a crate for efficiently rendering 3d grass using actual meshes. 0.5 brings Bevy 0.12 support as well as enabling the use of normal maps, making spherical grass planes possible.
bevy_ehttp's first release
crate_release
bevy_ehttp handling web requests using ehttp, that works on WASM and native versions.
lightyear 0.9.0
crate_release
bevy_replicon 0.22.0
crate_release
bevy_replicon is a high-level networking crate for Bevy.
There is a full changelog in the repo.
seldom_pixel 0.5
crate_release
seldom_pixel is a crate for limiting color palettes. 0.5 brings Bevy 0.12 support.
seldom_pixel
also offers optional support for bevy_ecs_tilemap
bevy_ecs_tilemap v0.12.0
crate_release
bevy_ecs_tilemap gets its Bevy 0.12 compatibility release. The crate is an implementation of tilemaps where each tile is its own entity in the ECS.
The discord url for this one also includes a discussion that will be interesting to other open source maintainers around migration guides and the weight of technical writing in open source.
bevy_ecs_ldtk 0.9
crate_release
bevy_ecs_ldtk is a formalization of support for the LDtk level editor built on top of bevy_ecs_tilemap. This release brings Bevy 0.12 and LDtk 1.5.3 support and includes a rewrite to the asset types with a more correct memory model, better APIs, and better performance.
A new bevy_ecs_ldtk documentation book is now in-progress and includes a migration guide for upgrading from 0.8 to 0.9.
Devlogs
vlog style updates from long-term projects
¿Quién es el Mechaburro?
devlog
¿Quién es el Mechaburro? was originally an entry to the very first Bevy game jam (The theme was "Unfair Advantage").
¿Quién es el Mechaburro? is a singleplayer/local multiplayer game (up to 8 players) with bots (8 total burros) inspired by twin-stick shooters, aspects of mario kart and a card game I played with my family growing up called "Burro."
This devlog covers a whole host of new features, upgrades across bevy versions, and showcasing at a local arcade bar.
Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
Opinionated Build Practices
educational
tbillington maintains an opinionated practices repo in bevy_best_practices. The repo now contains their practices for building Bevy projects which includes alternative task runners like just and alternative linker suggestions.
Derive Ord for GamepadButtonType. authored by shanecelis
mipmap levels can be 0 and they should be interpreted as 1 authored by anarelion
Replace pointer castings (`as`) by their API equivalent authored by tguichaoua
Immediately poll the executor once before spawning it as a task authored by james7132
Add `Mesh::merge` authored by Jondolf
Fix global wireframe behavior not being applied on new meshes authored by Kanabenki
Replace `crossbeam::scope` reference with `thread::scope` in docs authored by BD103
Add delta to CursorMoved event authored by solis-lumine-vorago
bevy_reflect_derive: Clean up attribute logic authored by MrGVSV
bevy_dynamic_plugin: fix `unsafe_op_in_unsafe_fn` lint authored by BD103
Use Asset Path Extension for `AssetLoader` Disambiguation authored by bushrat011899
Fix double indirection when applying command queues authored by JoJoJet
Put asset_events behind a run condition authored by james7132
Move `EntityHash` related types into `bevy_ecs` authored by doonv
Add a method for detecting changes within a certain scope authored by JoJoJet
Call a TextureAtlasLayout a layout and not an atlas authored by NiklasEi
Fix small docs misformat in `BundleInfo::new` authored by Adamkob12
Fix sysinfo CPU brand output authored by Friz64
Un-hardcode positions and colors in `2d_shapes` example authored by rparrett
Change light defaults & fix light examples authored by doonv
Overwrite gizmo group in `insert_gizmo_group` authored by Jondolf
Fix a few Clippy lints authored by BD103
Use question mark operator when possible authored by BD103
Dedicated primitive example authored by RobWalt
Use `std::thread::sleep` instead of spin-waiting in the async_compute example authored by BD103
`FilteredEntityRef` conversions authored by coreh
fix shadow batching authored by robtfm
New Exposure and Lighting Defaults (and calibrate examples) authored by cart
Rename Core Render Graph Labels authored by cart
Change MeshUniform::new() to be public. authored by komadori
Derive Reflect for Exposure authored by IceSentry
WebGPU: fix web-sys version authored by mockersf
Fix asset loader registration warning authored by thepackett
irradiance: use textureSampleLevel for WebGPU support authored by mockersf
Add configuration for async pipeline creation on RenderPlugin authored by rparrett
Support optional clear color in ColorAttachment. authored by tychedelia
Add type registrations for animation types authored by ekropotin
Implement and register Reflect (value) for CameraRenderGraph and CameraMainTextureUsages authored by cart
Add `MeshPipelineKey::LIGHTMAPPED` as applicable during the shadow map pass. authored by pcwalton
Disable irradiance volumes on WebGL and WebGPU. authored by pcwalton
Irradiance volume example tweaks authored by cart
Remove `naga_oil` dependency from `bevy_pbr` authored by rparrett
Remove map_flatten from linting rules authored by ekropotin
Fix duplicate `encase_derive_impl` dependency authored by rparrett
0.13 changelog authored by cart
Release 0.13.0 authored by cart
Add bevy_gizmos/macros to publish script authored by cart
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
Add features for different ecs spans authored by hymm
Add extra_asset_source example authored by NiseVoid
Immediately apply deferred system params in System::run authored by james7132
Add meshing for `Cone` authored by Jondolf
Add meshing for `ConicalFrustum` authored by Jondolf
Add remote_asset_loader example authored by afonsolage
NonMaxUsize for SparseArrays authored by tygyh
Add type to conviently lookup entities by name authored by tygyh
Add method for querying whether a given short type path is ambiguous authored by coreh
bevy_ecs address trivial cases of `unsafe_op_in_unsafe_fn` authored by tguichaoua
Static and cached marker components authored by NthTensor
Add `TextureAtlasLoader` authored by solis-lumine-vorago
Remove custom window size from `flex_layout` example authored by rparrett
Added RenderLayers to two_passes authored by rydb
Add double end arrow to gizmos authored by pablo-lua
Alpha discard authored by bonsairobo
Add tinting to the border in `ui_texture_slice` example authored by rparrett
Add support for KHR_texture_transform authored by janhohenheim
Run the multi-threaded executor at the end of each system task. authored by chescock
Move gizmos examples in the separate folder authored by ekropotin
add `finish` function to SubApp authored by Laocoon7
Adding `PositionType::Fixed` authored by Exanc
Issues Opened this week
`System::run` should call `System::apply_deferred` authored by JoJoJet
Frame time diagnostic independent of vsync authored by torsteingrindvik
`Text2dBundle` should have `Material` field authored by YatesRocks
Playing multiple animations on a glb model produces a lot of warnings authored by hgeist2
Improve gltf loader message about missing tangents authored by torsteingrindvik
Shader relative imports should support Rusty syntax. authored by viridia
`World::resource_ref` should return `Ref<T>` authored by JoJoJet
Batch spawn MultithreadedExecutor and Query::par_iter tasks authored by james7132
Spawning scenes with cameras no longer works authored by cart
Run Compute shaders in the same binding context as vertex/fragment shaders authored by davids91
Missing type registrations for animation types authored by torsteingrindvik
Allow async pipeline creation to be disabled authored by rparrett
Remove AssetEvents and Update assets schedules authored by alice-i-cecile
Camera with RenderTarget::Image renders despawned entities authored by franklinblanco
Flatten attribute for world queries & system params. authored by iiYese
Bevy TimeUpdateStrategy cannot move time backwards authored by torsteingrindvik
`AudioSink` is not updated when audio source component is replaced authored by rambip
Hiding window leads to swap chain texture timeout authored by flash-freezing-lava
Support the KHR_texture_transform GLTF extension authored by janhohenheim
Window despawns before `PostUpdate` authored by doonv
`Image` docs are fairly impenetrable authored by alice-i-cecile
Building and manipulating `Image` objects pixel-by-pixel is very tedious and error prone authored by alice-i-cecile
`Image` fields should not be public authored by alice-i-cecile
`Sprite` culling does not update `Aabb` when `Handle<Image>` changes authored by bonsairobo
Move gizmos examples authored by pablo-lua
CI "check-bans" check fails due to duplicate dependencies on raw-window-handle authored by ekropotin
Document ScheduleLabel dependencies authored by thebluefish
Compare to merge base in Cargo dependencies CI authored by rparrett
Remove dependency on `sysinfo` crate authored by SkiFire13