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
entities_iter()onEntityMapperto get an iterator of foreign entities #13703Solution
mappingsto theEntityMappertrait, which returns an iterator over currently trackedEntitytoEntitymappings.DynEntityMapperas an object safe alternative toEntityMapper.assert_object_safeas a helper for ensuring traits are object safe.Testing
entity_mapper_iterationwhich tests theSceneEntityMapperimplementation ofEntityMapper::mappings.DynEntityMapper,DynEqandDynHashare object safe.Changelog
mappingstoEntityMappertrait.Migration Guide
EntityMapperyourself, you can use the below as a stub implementation:EntityMapperas a trait object (dyn EntityMapper), instead usedyn DynEntityMapperand its associated methods.Notes
VecfromEntityMapperinstead of animpl Iteratorto preserve its object safety. This is a simpler option, but also forces an allocation where it isn't strictly needed. I've opted for this split intoDynEntityMapperandEntityMapperas it's been done several times across Bevy already, and provides maximum flexibility to users.assert_object_safeis an empty function, since the assertion actually happens once you try to use adyn Tfor some traitT. I have still added this function to clearly document what object safety is within Bevy, and to create a standard way to communicate that a given trait must be object safe.