generic component propagation #17575
Open
+556
−0
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
add functionality to allow propagating components to children. requested originally for
RenderLayers
but can be useful more generally.Solution
HierarchyPropagatePlugin<C, F=()>
which schedules systems to propagate components through entities matchingF
Propagate<C: Component + Clone + PartialEq>
which will causeC
to be added to all childrenmore niche features:
PropagateStop<C>
which stops the propagation at this entityPropagateOver<C>
which allows the propagation to continue to children, but doesn't add/remove/modify aC
on this entity itselfTesting
see tests inline
Notes
bevy_ecs
but it requires aPlugin
so I put it inbevy_app
, doesn't really belong there though.update_reparented
which has to check the parent of every moved entity. since the entirety is opt-in i think it's acceptable but i could possibly use(Changed<Children>, With<Inherited<C>>)
instead if it's a concern