@@ -1401,6 +1401,25 @@ impl World {
1401
1401
/// use this in cases where the actual types are not known at compile time.**
1402
1402
#[ inline]
1403
1403
pub fn get_resource_mut_by_id ( & mut self , component_id : ComponentId ) -> Option < MutUntyped < ' _ > > {
1404
+ // SAFETY: unique world access
1405
+ unsafe { self . get_resource_unchecked_mut_by_id ( component_id) }
1406
+ }
1407
+
1408
+ /// Gets a resource to the resource with the id [`ComponentId`] if it exists.
1409
+ /// The returned pointer may be used to modify the resource, as long as the mutable borrow
1410
+ /// of the [`World`] is still valid.
1411
+ ///
1412
+ /// **You should prefer to use the typed API [`World::get_resource_mut`] where possible and only
1413
+ /// use this in cases where the actual types are not known at compile time.**
1414
+ ///
1415
+ /// # Safety
1416
+ /// This will allow aliased mutable access to the given resource type. The caller must ensure
1417
+ /// that there is either only one mutable access or multiple immutable accesses at a time.
1418
+ #[ inline]
1419
+ pub unsafe fn get_resource_unchecked_mut_by_id (
1420
+ & self ,
1421
+ component_id : ComponentId ,
1422
+ ) -> Option < MutUntyped < ' _ > > {
1404
1423
let info = self . components . get_info ( component_id) ?;
1405
1424
if !info. is_send_and_sync ( ) {
1406
1425
self . validate_non_send_access_untyped ( info. name ( ) ) ;
@@ -1479,7 +1498,7 @@ impl World {
1479
1498
component_id : ComponentId ,
1480
1499
) -> Option < MutUntyped < ' _ > > {
1481
1500
self . components ( ) . get_info ( component_id) ?;
1482
- // SAFETY: entity_location is valid, component_id is valid as checked by the line above
1501
+ // SAFETY: entity_location is valid, component_id is valid as checked by the line above, world access is unique
1483
1502
unsafe {
1484
1503
get_mut_by_id (
1485
1504
self ,
0 commit comments