I'm back from vacation, and ready for this week's #bevymergetrain :) I merged a dozen PRs yesterday already, trying to get back up to speed with the #opensource #rustlang #gamedev that's been going on while I've been off enjoying the holidays. But y'all have 9 more community-approved PRs ready for me already?? Geez. Let's go over them together: https://github.com/bevyengine/bevy/pulls?q=is%3Aopen+is%3Apr+label%3AS-Ready-For-Final-Review
1. https://github.com/bevyengine/bevy/pull/17039
Starting out-of-order, with a rendering bug fix for shadows. Great explanation of the bug, and why it happened. I really appreciate all the work that pcwalton puts into fixing and teaching these things. I really want to dive into rendering more to try and untangle things a bit and cut down on these regressions, but there's so many other projects begging for attention
2. https://github.com/bevyengine/bevy/pull/16922
A rendering cleanup that masked the bug fixed above. The plan here is to use one of the handful of standard ways to improve performance, caching work so you don't have to recompute it. For now though, we're going through and doing the required cleanup in order to making retaining bins easier.
Yes please to splitting PRs: it really makes it easier to review, test and merge changes. This has been tested against our examples for regressions, merging.
3.https://github.com/bevyengine/bevy/pull/17005
`PluginGroup`s are a neat concept, but I've rarely seen them used outside of Bevy's `DefaultPlugins`. Maybe these simple helper methods will improve that? Robustness to errors / unexpected conditions is an ongoing theme as Bevy starts to mature, and that extends to the plugin ecosystem too. You have no idea what other dependencies the user has, but you want to be robust to it!
Merging. I think that in the long-term a declarative plugin approach is going to win, but..
4. https://github.com/bevyengine/bevy/pull/17019
A simple PR that adds a `clone_from_if_neq` helper method to our smart pointer wrappers. My initial reaction was "why is this useful??", but the docs did a great job motivating it.
LGTM, but CI is failing due to a missing `alloc::ToOwned` import. Very weird that that's no_std only?? Anyways, the import seems to fix it but I don't have push permissions to their branch. Reporting my findings and waiting.
5. https://github.com/bevyengine/bevy/pull/17025
A simple fix from a user annoyed about a bug they encountered. It turns out that changing the parent of an entity wouldn't refresh inherited visibility properly. The fix is easy though, add an `Or<Changed<Parent>>` clause to the query filter. Bevy's query DSL is *great* :D
After some prompting, this comes with a regression test too :D Great, merging. I really like that Bevy's internal code is just like user code: it makes these quick fixes so much easier.
6. https://github.com/bevyengine/bevy/pull/17029
A simple cleanup PR for hierarchy commands to reduce now-pointless helper structs. Closures are much cleaner here, I like the change a lot. Merging.
This helps reduce the diff on the author's much higher impact command error handling PR, 17043, so I pestered folks for a quick review. I was going to tackle that work, but someone was already sitting on an attempt, so I'm back to review + mentor mode I swear I write code around here!
7. https://github.com/bevyengine/bevy/pull/17030
The next step in the sprawling no_std-ification of Bevy. Pretty much everything outside of windowing and rendering should be no_std compatible (bah, platforms!), and bushrat has been doing an excellent job breaking down the work into digestible, boring PRs.
Yay for feature documentation! I just wish there was a blessed way to do this in #rustlang :(
Virtually no changes here; just a semi-related feature gating of bevy_reflect. Merging.
8. https://github.com/bevyengine/bevy/pull/17031
I swear this PR is different! Just as above, but for `bevy_window`.
These tiny PRs are really helpful for quick reviews, and it also reduces the risk of merge conflicts.
There's a bit of discussion in the thread about deduplicating the CI logic: maybe we can just ship a Bevy no_std example crate to test that things keep working?
9. https://github.com/bevyengine/bevy/pull/17033
BD103 is continuing his relentless (and much appreciated) efforts to steadily clean up and unify our benchmarking code. This time, for bevy_picking!
Simple and clear: I like the added comments and better names. I tried something similar years ago, but I did a worse job and things died in review. It's good to see that we have the bandwidth now to properly maintain the benchmarks!
10. https://github.com/bevyengine/bevy/pull/17044
A trivial code quality refactor: just write your iterator code a bit better to avoid a pointless step. Might be faster, but the clarity is the real improvement here.
ickshonpe does a great job slowly cleaning up the internals of Bevy's UI: I really appreciate all of the bug fixes and polish. The small focused PRs like this are a bit more overhead to make, but they're so easy to review and merge. Merging :)
That's all for this week :) Nothing earth-shattering: just a lot of tiny improvements. It really adds up though: every papercut makes your tool just a bit worse to use, and splitting big complex work (like no_std!) into tiny chunks can make even the most intimidating tasks seem trivial.
Huge thanks to all of the authors and reviewers in the Bevy ecosystem: it's always delightful to see the steady stream of little fixes and big features.