Use UnsafeWorldCell to increase code quality for SystemParam
#8174
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
The type
&Worldis currently in an awkward place, since it has two meanings:This makes
&Worlddifficult to reason about, and surprising to see in function signatures if one does not know about the interior mutable property.The type
UnsafeWorldCellwas added in #6404, which is meant to alleviate this confusion by adding a dedicated type for interior mutable world access. However, much of the engine still treats&Worldas an interior mutable-ish type. One of those places isSystemParam.Solution
Modify
SystemParam::get_paramto acceptUnsafeWorldCellinstead of&World. Simplify the safety invariants, since theUnsafeWorldCelltype encapsulates the concept of constrained world access.Changelog
SystemParam::get_paramnow accepts anUnsafeWorldCellinstead of&World. This type provides a high-level API for unsafe interior mutable world access.Migration Guide
For manual implementers of
SystemParam: the functionget_itemnow takesUnsafeWorldCellinstead of&World. To access world data, use:.get_entity(), which returns anUnsafeEntityCellwhich can be used to access component data.get_resource()and its variants, to access resource data.