-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Upstream and use bevy_mod_picking #12365
Comments
Thank you Alice, reading through this now. 🙂 Small correction of a common misconception. Picking does not require raycasting, that is just one of the hit testing methods. |
I use both crates extensively and have written extensions in my own game. I will keep an eye on this and will be available for code reviews. Excited to see this start! |
I'd like to give a quick update here laying out the next steps. Most of the existing
We managed to (mostly) resolve the first one of these issues with observers. Here's how I want to resolve the second:
These are implemented here: #14862. This will conclude the minimum necessary work for the up-streaming (for the core logic at least, there may still be work in documenting, testing, and adding back-ends). Here's a few other things we will want to do after this is complete:
|
# Objective Add `bevy_picking` sprite backend as part of the `bevy_mod_picking` upstreamening (#12365). ## Solution More or less a copy/paste from `bevy_mod_picking`, with the changes [here](aevyrie/bevy_mod_picking#354). I'm putting that link here since those changes haven't yet made it through review, so should probably be reviewed on their own. ## Testing I couldn't find any sprite-backend-specific tests in `bevy_mod_picking` and unfortunately I'm not familiar enough with Bevy's testing patterns to write tests for code that relies on windowing and input. I'm willing to break the pointer hit system into testable blocks and add some more modular tests if that's deemed important enough to block, otherwise I can open an issue for adding tests as follow-up. ## Follow-up work - More docs/tests - Ignore pick events on transparent sprite pixels with potential opt-out --------- Co-authored-by: Aevyrie <[email protected]>
Closing as "effectively complete". |
Why we need picking (and raycasting)
To be glib,
bevy_mod_picking
by @aevyrie allows users to point at things and click on them.Picking is the pattern of turning pointer events (like mouse clicks or touches) into the hover/selection/deselection of objects (meshes, sprites, UI...) via hit testing, of which raycasting is one common form.
Bevy needs an equivalent set of tools for:
Interaction
component and focus handlingbalanced breakfastscene editor or interactive debuggerWhile the first application can and currently is solved by relying on an external crate, this is still limiting because:
main
, as it's not part of our CI.For the remaining use cases, we simply can't rely on an external crate that relies on Bevy due to circular dependencies which present severe technical and organizational challenges.
Why we should upstream rather than re-implement
Of course, the next question is "why should we upstream a crate, rather than simply building it ourselves!".
After all, it wasn't invented here, for a very narrow definition of "here".
However, as I previously discussed in bevyengine/rfcs#63, reinventing rather than upstreaming popular, functioning crates is both risky and wasteful.
While this functionality may seem simple at first glance, hard-won experience shows that there are a large number of ergonomic, design and performance concerns that must be carefully navigated.
bevy_mod_picking
is a stable, beloved part of Bevy's ecosystem. While it may not be perfect in its current form, it decidedly works: with good performance, a lovely API and a generally low-bug experience. Building our own equivalent will take longer, involve dramatically more controversy, and leave us at a worse starting point.Organizational strategy for upstreaming
I've been working closely with @aevyrie and other members of the community to plan this migration.
As part of that, we have a pair of junior volunteers from Purdue: Avi and Xavier who are helping us with this work (this issue is a sibling to #12349). Please be patient and kind with them as they work, but remember that they're here to learn and improve.
During this discussion, we've outlined a few key strategies to minimize the pain of this complex migration:
The essential problems to avoid are:
If you have breaking concerns or ideas, please, please open issues to record them (and link this issue). We want to hear them, and to improve all areas of the engine: we just don't want the migration to fall into disarray :)
Technical pathway to upstreaming
Note: this has been updated to reflect evolving plans!
bevy_mod_picking
's components into a newbevy_picking
cratebevy_mod_picking
Interaction
bevy_event_dispatch
bevy_picking
Related work
ui_focus_system
#4264The text was updated successfully, but these errors were encountered: