Skip to content

Commit 4687646

Browse files
committed
Make nested immediate loads also return the handle to the asset.
1 parent f72df32 commit 4687646

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
@@ -386,23 +386,29 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
386386
self,
387387
path: &AssetPath<'static>,
388388
asset_type_id: Option<TypeId>,
389-
) -> Result<(Arc<dyn ErasedAssetLoader>, NestedErasedAssetRef<'builder>), LoadDirectError> {
389+
) -> Result<
390+
(
391+
UntypedHandle,
392+
Arc<dyn ErasedAssetLoader>,
393+
NestedErasedAssetRef<'builder>,
394+
),
395+
LoadDirectError,
396+
> {
390397
if path.label().is_some() {
391398
return Err(LoadDirectError::RequestedSubasset(path.clone()));
392399
}
400+
let asset_server = self.load_context.asset_server.clone();
393401
let (mut meta, loader, mut reader) = if let Some(reader) = self.mode.reader {
394402
let loader = if let Some(asset_type_id) = asset_type_id {
395-
self.load_context
396-
.asset_server
403+
asset_server
397404
.get_asset_loader_with_asset_type_id(asset_type_id)
398405
.await
399406
.map_err(|error| LoadDirectError::LoadError {
400407
dependency: path.clone(),
401408
error: error.into(),
402409
})?
403410
} else {
404-
self.load_context
405-
.asset_server
411+
asset_server
406412
.get_path_asset_loader(path)
407413
.await
408414
.map_err(|error| LoadDirectError::LoadError {
@@ -413,9 +419,7 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
413419
let meta = loader.default_meta();
414420
(meta, loader, ReaderRef::Borrowed(reader))
415421
} else {
416-
let (meta, loader, reader) = self
417-
.load_context
418-
.asset_server
422+
let (meta, loader, reader) = asset_server
419423
.get_meta_loader_and_reader(path, asset_type_id)
420424
.await
421425
.map_err(|error| LoadDirectError::LoadError {
@@ -433,7 +437,13 @@ impl<'builder, 'reader, T> NestedLoader<'_, 'builder, T, Immediate<'builder, 're
433437
.load_context
434438
.load_direct_internal(path.clone(), meta.as_ref(), &*loader, reader.as_mut())
435439
.await?;
436-
Ok((loader, asset))
440+
441+
let handle = asset_server.get_or_create_path_handle_erased(
442+
path,
443+
asset.get_asset().asset_type_id(),
444+
None,
445+
);
446+
Ok((handle, loader, asset))
437447
}
438448
}
439449

@@ -451,11 +461,11 @@ impl<'builder> NestedLoader<'_, 'builder, StaticTyped, Immediate<'builder, '_>>
451461
pub async fn load<'p, A: Asset>(
452462
self,
453463
path: impl Into<AssetPath<'p>>,
454-
) -> Result<NestedAssetRef<'builder, A>, LoadDirectError> {
464+
) -> Result<(Handle<A>, NestedAssetRef<'builder, A>), LoadDirectError> {
455465
let path = path.into().into_owned();
456466
self.load_internal(&path, Some(TypeId::of::<A>()))
457467
.await
458-
.and_then(move |(loader, untyped_asset)| {
468+
.and_then(move |(handle, loader, untyped_asset)| {
459469
untyped_asset
460470
.downcast::<A>()
461471
.map_err(|_| LoadDirectError::LoadError {
@@ -467,6 +477,7 @@ impl<'builder> NestedLoader<'_, 'builder, StaticTyped, Immediate<'builder, '_>>
467477
loader_name: loader.type_name(),
468478
},
469479
})
480+
.map(|asset| (handle.typed(), asset))
470481
})
471482
}
472483
}
@@ -481,12 +492,12 @@ impl<'builder> NestedLoader<'_, 'builder, DynamicTyped, Immediate<'builder, '_>>
481492
pub async fn load(
482493
self,
483494
path: impl Into<AssetPath<'_>>,
484-
) -> Result<NestedErasedAssetRef<'builder>, LoadDirectError> {
495+
) -> Result<(UntypedHandle, NestedErasedAssetRef<'builder>), LoadDirectError> {
485496
let path = path.into().into_owned();
486497
let asset_type_id = Some(self.typing.asset_type_id);
487498
self.load_internal(&path, asset_type_id)
488499
.await
489-
.map(|(_, asset)| asset)
500+
.map(|(handle, _, asset)| (handle, asset))
490501
}
491502
}
492503

@@ -497,10 +508,10 @@ impl<'builder> NestedLoader<'_, 'builder, UnknownTyped, Immediate<'builder, '_>>
497508
pub async fn load(
498509
self,
499510
path: impl Into<AssetPath<'_>>,
500-
) -> Result<NestedErasedAssetRef<'builder>, LoadDirectError> {
511+
) -> Result<(UntypedHandle, NestedErasedAssetRef<'builder>), LoadDirectError> {
501512
let path = path.into().into_owned();
502513
self.load_internal(&path, None)
503514
.await
504-
.map(|(_, asset)| asset)
515+
.map(|(handle, _, asset)| (handle, asset))
505516
}
506517
}

0 commit comments

Comments
 (0)