diff --git a/crates/bevy_asset/src/loader.rs b/crates/bevy_asset/src/loader.rs index 86eabe8226..f405b6122e 100644 --- a/crates/bevy_asset/src/loader.rs +++ b/crates/bevy_asset/src/loader.rs @@ -29,15 +29,15 @@ impl Asset for T where T: TypeUuid + AssetDynamic + TypeUuidDynamic {} impl AssetDynamic for T where T: Send + Sync + 'static + TypeUuidDynamic {} -pub struct LoadedAsset { - pub(crate) value: Option>, +pub struct LoadedAsset { + pub(crate) value: Option, pub(crate) dependencies: Vec>, } -impl LoadedAsset { - pub fn new(value: T) -> Self { +impl LoadedAsset { + pub fn new(value: T) -> Self { Self { - value: Some(Box::new(value)), + value: Some(value), dependencies: Vec::new(), } } @@ -53,10 +53,27 @@ impl LoadedAsset { } } +pub(crate) struct BoxedLoadedAsset { + pub(crate) value: Option>, + pub(crate) dependencies: Vec>, +} + +impl From> for BoxedLoadedAsset { + fn from(asset: LoadedAsset) -> Self { + BoxedLoadedAsset { + value: match asset.value { + Some(value) => Some(Box::new(value)), + None => None, + }, + dependencies: asset.dependencies, + } + } +} + pub struct LoadContext<'a> { pub(crate) ref_change_channel: &'a RefChangeChannel, pub(crate) asset_io: &'a dyn AssetIo, - pub(crate) labeled_assets: HashMap, LoadedAsset>, + pub(crate) labeled_assets: HashMap, BoxedLoadedAsset>, pub(crate) path: &'a Path, pub(crate) version: usize, } @@ -85,13 +102,14 @@ impl<'a> LoadContext<'a> { self.labeled_assets.contains_key(&Some(label.to_string())) } - pub fn set_default_asset(&mut self, asset: LoadedAsset) { - self.labeled_assets.insert(None, asset); + pub fn set_default_asset(&mut self, asset: LoadedAsset) { + self.labeled_assets.insert(None, asset.into()); } - pub fn set_labeled_asset(&mut self, label: &str, asset: LoadedAsset) -> Handle { + pub fn set_labeled_asset(&mut self, label: &str, asset: LoadedAsset) -> Handle { assert!(!label.is_empty()); - self.labeled_assets.insert(Some(label.to_string()), asset); + self.labeled_assets + .insert(Some(label.to_string()), asset.into()); self.get_handle(AssetPath::new_ref(self.path(), Some(label))) }