-
Notifications
You must be signed in to change notification settings - Fork 66
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
Different plugin groups to support different use cases (diverse-defaults for short) #48
base: main
Are you sure you want to change the base?
Conversation
Only 'unresolved questions is still TODO
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
First round of feedback and clarity suggestions :)
|
||
## Implementation strategy | ||
|
||
Each of the above outlined `Plugins` may have some combination of the following divergent platform configuration needs: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not clear how exactly this interacts with the "use case" plugins groups above 🤔 I agree that we want both, but they seem mostly orthogonal.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think @mockersf proposal enables use to meld the two in a sensible way!
- `ApplicationPlugins`: Suitable for making CAD applicaions or something like excel. | ||
- `SimulationPlugins`: Plugins that make writing scientific simulations easier like enhanced determinism and ordering guarantees. | ||
|
||
## Implementation strategy |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it would be helpful hear to identify "axes of variation"; ways that each of the use cases commonly vary, so we can think about how to structure them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I very much agree, though I don't know how to flesh this out.
- `MinimalPlugins`: The very basic internal structure required to ensure things like `Time` function properly. | ||
- `GamePlugins`: Suitable for making both 2D and 3D real-time games with input handling, audio and rendering (note: previously `DefaultPlugins`). | ||
- `2dGamePlugins`: Like `GamePlugins`, but limited to the systems and resources needed in a 2D game. | ||
- `TuiPlugins`: Suitable for making TUI applications. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This needs a note in implementation details on what we should include to get this working.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What exactly would we need to include to get this working? I don't understand the details of the bevy DefaultPlugins
code I guess.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also would probably prefer to just migrate my initial proposal to the one @mockersf suggested which I think addresses the problem area even better! :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The bigger problem is "I don't know how to make a terminal game in Bevy 0.6" at all. There were a few ecosystem crates, but they're no longer up to date.
Instead of having different
For example, for a 2d game that won't use UI but will still display text in the 2d world, I use only those features: Features are probably not documented enough and not really friendly, Bevy could add meta features to group them into logical groups like you describe here. |
Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
That's a really nice idea @mockersf and I think this solves the problem I am seeking to address in an even nicer way with the additional benefits you outlined!! :) 💯 |
|
||
The primary drawback I can see is the need for Bevy to maintain the multiple `PluginGroups`, however, I foresee the maintenance burden of this to be exceedingly minimal. | ||
|
||
## Rationale and alternatives |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you should discuss the pros and cons of plugin groups vs. feature groups in this section.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How would you define FeatureGroups
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rust features can enable other features, allowing users to toggle them on and off as needed. We can also
See: https://doc.rust-lang.org/cargo/reference/features.html for a basic introduction.
https://docs.rs/cfg_feature_groups/latest/cfg_feature_groups/ or the like may be helpful to improve ergonomics.
Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
Rendered
There are many different categories of bevy applications. Each use case has a sufficiently different commonsense default configuration to warrant different use case specific default plugins. This RFC is a proposal to consider making such a change.