One-shot systems as Command
s -- allow commands to use SystemParam
s
#7252
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Objective
Fixes #2192.
Currently, anonymous one-shot commands can be defined as a closure accepting
&mut World
. Working with exclusive world access is quite cumbersome, and is usually only necessary if a command makes changes to a world's archetypes. In cases where a command simply needs to access and mutate world data, it is much more ergonomic to do so viaSystemParam
s such asResMut<>
orQuery
.Solution
CommandSystemParam
, which is a subset ofSystemParam
that excludes types that don't make sense for one-shot systems, such asLocal<>
orCommands
.CommandSystemParam
s may be used as a command.Example
TODO: Docs. I'd like to see the response to this PR before putting in the effort to write full documentation.
TODO: Look into storing "command systems" in a registry resource, to avoid duplicate initialization code. This will require benchmarking.
Changelog
TODO
Migration Guide
TODO