Skip to content

Commit cf7d180

Browse files
committed
Make nested immediate loads also return the handle to the asset.
1 parent 55ed39a commit cf7d180

File tree

2 files changed

+27
-16
lines changed

2 files changed

+27
-16
lines changed

crates/bevy_asset/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -719,7 +719,7 @@ mod tests {
719719
let mut ron: CoolTextRon = ron::de::from_bytes(&bytes)?;
720720
let mut embedded = String::new();
721721
for dep in ron.embedded_dependencies {
722-
let loaded = load_context
722+
let (_, loaded) = load_context
723723
.loader()
724724
.immediate()
725725
.load::<CoolText>(&dep)

crates/bevy_asset/src/loader_builders.rs

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -387,23 +387,29 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
387387
self,
388388
path: &AssetPath<'static>,
389389
asset_type_id: Option<TypeId>,
390-
) -> Result<(Arc<dyn ErasedAssetLoader>, NestedErasedAssetRef<'builder>), LoadDirectError> {
390+
) -> Result<
391+
(
392+
UntypedHandle,
393+
Arc<dyn ErasedAssetLoader>,
394+
NestedErasedAssetRef<'builder>,
395+
),
396+
LoadDirectError,
397+
> {
391398
if path.label().is_some() {
392399
return Err(LoadDirectError::RequestedSubasset(path.clone()));
393400
}
401+
let asset_server = self.load_context.asset_server.clone();
394402
let (mut meta, loader, mut reader) = if let Some(reader) = self.mode.reader {
395403
let loader = if let Some(asset_type_id) = asset_type_id {
396-
self.load_context
397-
.asset_server
404+
asset_server
398405
.get_asset_loader_with_asset_type_id(asset_type_id)
399406
.await
400407
.map_err(|error| LoadDirectError::LoadError {
401408
dependency: path.clone(),
402409
error: error.into(),
403410
})?
404411
} else {
405-
self.load_context
406-
.asset_server
412+
asset_server
407413
.get_path_asset_loader(path)
408414
.await
409415
.map_err(|error| LoadDirectError::LoadError {
@@ -414,9 +420,7 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
414420
let meta = loader.default_meta();
415421
(meta, loader, ReaderRef::Borrowed(reader))
416422
} else {
417-
let (meta, loader, reader) = self
418-
.load_context
419-
.asset_server
423+
let (meta, loader, reader) = asset_server
420424
.get_meta_loader_and_reader(path, asset_type_id)
421425
.await
422426
.map_err(|error| LoadDirectError::LoadError {
@@ -434,7 +438,13 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
434438
.load_context
435439
.load_direct_internal(path.clone(), meta.as_ref(), &*loader, reader.as_mut())
436440
.await?;
437-
Ok((loader, asset))
441+
442+
let handle = asset_server.get_or_create_path_handle_erased(
443+
path,
444+
asset.get_asset().asset_type_id(),
445+
None,
446+
);
447+
Ok((handle, loader, asset))
438448
}
439449
}
440450

@@ -452,11 +462,11 @@ impl<'builder> NestedLoader<'_, 'builder, StaticTyped, Immediate<'builder, '_>>
452462
pub async fn load<'p, A: Asset>(
453463
self,
454464
path: impl Into<AssetPath<'p>>,
455-
) -> Result<NestedAssetRef<'builder, A>, LoadDirectError> {
465+
) -> Result<(Handle<A>, NestedAssetRef<'builder, A>), LoadDirectError> {
456466
let path = path.into().into_owned();
457467
self.load_internal(&path, Some(TypeId::of::<A>()))
458468
.await
459-
.and_then(move |(loader, untyped_asset)| {
469+
.and_then(move |(handle, loader, untyped_asset)| {
460470
untyped_asset
461471
.downcast::<A>()
462472
.map_err(|_| LoadDirectError::LoadError {
@@ -468,6 +478,7 @@ impl<'builder> NestedLoader<'_, 'builder, StaticTyped, Immediate<'builder, '_>>
468478
loader_name: loader.type_name(),
469479
},
470480
})
481+
.map(|asset| (handle.typed(), asset))
471482
})
472483
}
473484
}
@@ -482,12 +493,12 @@ impl<'builder> NestedLoader<'_, 'builder, DynamicTyped, Immediate<'builder, '_>>
482493
pub async fn load(
483494
self,
484495
path: impl Into<AssetPath<'_>>,
485-
) -> Result<NestedErasedAssetRef<'builder>, LoadDirectError> {
496+
) -> Result<(UntypedHandle, NestedErasedAssetRef<'builder>), LoadDirectError> {
486497
let path = path.into().into_owned();
487498
let asset_type_id = Some(self.typing.asset_type_id);
488499
self.load_internal(&path, asset_type_id)
489500
.await
490-
.map(|(_, asset)| asset)
501+
.map(|(handle, _, asset)| (handle, asset))
491502
}
492503
}
493504

@@ -498,10 +509,10 @@ impl<'builder> NestedLoader<'_, 'builder, UnknownTyped, Immediate<'builder, '_>>
498509
pub async fn load(
499510
self,
500511
path: impl Into<AssetPath<'_>>,
501-
) -> Result<NestedErasedAssetRef<'builder>, LoadDirectError> {
512+
) -> Result<(UntypedHandle, NestedErasedAssetRef<'builder>), LoadDirectError> {
502513
let path = path.into().into_owned();
503514
self.load_internal(&path, None)
504515
.await
505-
.map(|(_, asset)| asset)
516+
.map(|(handle, _, asset)| (handle, asset))
506517
}
507518
}

0 commit comments

Comments
 (0)