Alright, time for a Monday #bevymergetrain. There's a score and a half (30!) of #opensource #rust #gamedev PRs ready to take a look at this week, thanks to the help of our wonderful community! I'm going to be going over these in this thread, and explaining the actions I take for each of them and why!
1. https://github.com/bevyengine/bevy/pull/8526
A fun little feature from JoJoJet: rather than having one-off system adaptors like `warn` or `info`, generalize these to a standard `map` idiom. Good use of deprecation warnings, and a clever solution to automatically generate type names.
Code-negative improvements are lovely. Merging!
2. https://github.com/bevyengine/bevy/pull/8855
A fix for cursor-out-of-bounds. CI broke last week when I tried to merge this (thanks mysterious upstream driver problems), but it's fixed now.
Merging.
3. https://github.com/bevyengine/bevy/pull/8895
A nice little rounding out to our reflection + ECS APIs, letting you insert and remove components of dynamic types using the standard `Commands` idioms. Great stuff.
The author even spotted a critical bug at the last minute (when you do the hokey-pokey with resources, you gotta put them back in!), which looks fine on final review.
I want to merge this, but the formatting is broken. Pinging the author.
4. https://github.com/bevyengine/bevy/pull/9002
Some nice simple improvements to the animation API, driven by practical experiments with the very preliminary solution we shipped. Great to see, and excellent PR decsription!
Missing the breaking change label, so I've added that so it gets picked up by our automatic tooling to generate the stub migration guides. Merging!
5. https://github.com/bevyengine/bevy/pull/9111
Code quality fixes to our text layouting. Great PR description and change set: this is an excellent example of the value that seasoned engineers bring to a complex project like Bevy.
There are missing docs, but they look like they'll be simple enough to fill in later (when we finally start linting for them in `bevy_ui`) so I won't block on it. It's important to keep code quality refactors like this low friction and avoid merge conflicts. Merging!
6. https://github.com/bevyengine/bevy/pull/9136
Half-space and frustum docs! Lots of good discussion and refinement over the precise definition, but these look good now.
Merging!
7. https://github.com/bevyengine/bevy/pull/9165
Defines a `ReflectBundle` type, used to operate on an arbitrary dynamic collection of reflected components :) Useful for scripting, and I wonder if I could use this to dynamically spawn entities with a varying component collection in a nicer way than the `&mut Commands` builder pattern
A great example of the value of our triage-by-controversy: this work has clear value and consensus, so it got extracted out from a larger and more controversial PR! Merging :)
8. https://github.com/bevyengine/bevy/pull/9212
Some straightforward but *very* sizable performance improvements to how we render UI. The PR description is great: it clearly explains the problem with the existing approach, and why the new one is faster.
And the payoff is great: 40% improvement to rendering UI in our stress test! There's a merge conflict though It's not trivial, so I'll ping the author to clean it up then merge.
9. https://github.com/bevyengine/bevy/pull/9306
A code organization PR to make our Events code more readable for contributors. Yay for splitting this out into its own PR, and Jojojet is 100% correct that this is trivial (and thus only needs one approval).
I'm quite happy with this change, this has annoyed me in the past. Merging now.
10. https://github.com/bevyengine/bevy/pull/9351
When importing meshes, if they had more joints than the `MAX_JOINTS` constant (256) supported in our rendering code, warn and give a partially successful result, rather than just panicking.
Not a full fix, but much better than the status quo. Good to see the constant was made public and documented as part of this change. Merging :)
11. https://github.com/bevyengine/bevy/pull/9404
A simple documentation fix for our UI bundles, correcting some outdated information about how `GlobalTransform` is handled and cleaning up some imprecise language.
I like this! It's annoying to have so much documentation duplication across these bundle types; need to chew on what the least bad solution will be in the futures. Macros are frustrating to read, nested bundles lead to wonky end-user code, manual duplication is error-prone and CI enforcement is brittle.
11 cont.
Non-trivial merge conflicts though, so we ping the author again!
12. https://github.com/bevyengine/bevy/pull/9407
A fix to improve compliance between the gltF animation spec, and how Bevy actually uses those animations. Making sure that our imports work properly is important, and this is well-reviewed.
Happy to merge :)
13. https://github.com/bevyengine/bevy/pull/9419
Time for a crunchy one: the ability to use `EntityMut` in queries, allowing you to modify *any* component on the entity. This is primarily useful for save games, networking and scripting integration.
There was quite a bit of back-and-forth between the team on exactly what the naming and API should be (balancing symmetry, backwards compatibility and code duplication) but everyone agrees this is a great feature. Let's merge it now, and see what people can do!
14. https://github.com/bevyengine/bevy/pull/9421
We were checking for `AppExit` events twice when using the headless `ScheduleRunnerPlugin`. Pixelstormer caught that, and made a great call about which one to remove by reasoning about consistency with the non-headless mode.
Great little change, merging.
15. https://github.com/bevyengine/bevy/pull/9461
A follow-up to some of the cleanup we were doing on the "how do you preserve entity identifiers when serializing the ECS data" story.
The `EntityMap` type had no unique functionality over a `HashMap`, and constantly needed new methods to expose more functionality. Since footgun resistance / opacity wasn't a critical design feature here, this PR simplifies things and removes code by just using the raw data structure. Merging, once I update the PR description :)
16. https://github.com/bevyengine/bevy/pull/9486
A small type-safety improvement to one of the types used in grid-based UI layout, while simultaneously providing a public accessor for a user who wanted to do wild serialization things with it.
One of my favorite things to do with Bevy's community review model is to ask the person who opened the issue to review the PR that purports to fix it! It's a great way to make them feel included, and make sure the fix was actually correct! Worked great here :)
Merging :)
17. https://github.com/bevyengine/bevy/pull/9490
Ah, file paths and cross-platform applications... My favorite bugs, second only to time zones.
This is a nice simple improvement to the code that fixes the bug in question, implemented by a new contributor (and helped by bushrat, another new-ish contributor who's really been killing it lately). Nice to clean up, let's merge :)
18. https://github.com/bevyengine/bevy/pull/9514
System order ambiguity checking is shockingly useful, but it's currently a pain to configure, since you have to apply it to each schedule manually. Users will generally want to toggle this on or off at the whole app level though, so the API should reflect that!
Some solid improvements during review too: getters are good.
This was one of the issues I opened, and now it's fixed, as if by magic :D Honestly one of my favorite feelings about open source. Merging!
19. https://github.com/bevyengine/bevy/pull/9518
A fix to a regression of how we handle transform propagation for entities that have had their parents removed (and are thus "orphaned" :sob:). Tricky logic, so it makes me happy to see the regression test here.
Merging.