Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ imported_assets
.web-asset-cache
examples/large_scenes/bistro/assets/*
examples/large_scenes/caldera_hotel/assets/*
examples/asset/saved_assets
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure what this is for? The example asset+meta is already tracked by git, and the example doesn't add new ones.


# Bevy Examples
example_showcase_config.ron
Expand Down
12 changes: 12 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2015,6 +2015,18 @@ description = "Demonstrates various methods to load assets"
category = "Assets"
wasm = false

[[example]]
name = "asset_saving"
path = "examples/asset/asset_saving.rs"
doc-scrape-examples = true
required-features = ["bevy_picking", "sprite_picking"]

[package.metadata.example.asset_saving]
name = "Asset Saving"
description = "Demonstrates how to save an asset (with subassets)"
category = "Assets"
wasm = true

[[example]]
name = "asset_settings"
path = "examples/asset/asset_settings.rs"
Expand Down
3 changes: 2 additions & 1 deletion crates/bevy_asset/src/processor/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use alloc::{
string::{String, ToString},
vec::Vec,
};
use bevy_ecs::error::BevyError;
use bevy_reflect::TypePath;
use bevy_tasks::{BoxedFuture, ConditionalSendFuture};
use core::marker::PhantomData;
Expand Down Expand Up @@ -160,7 +161,7 @@ pub enum ProcessError {
WrongMetaType,
#[error("Encountered an error while saving the asset: {0}")]
#[from(ignore)]
AssetSaveError(Box<dyn core::error::Error + Send + Sync + 'static>),
AssetSaveError(BevyError),
#[error("Encountered an error while transforming the asset: {0}")]
#[from(ignore)]
AssetTransformError(Box<dyn core::error::Error + Send + Sync + 'static>),
Expand Down
47 changes: 5 additions & 42 deletions crates/bevy_asset/src/processor/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ use crate::{
AssetProcessor, GetProcessorError, LoadTransformAndSave, LogEntry, Process, ProcessContext,
ProcessError, ProcessorState, ProcessorTransactionLog, ProcessorTransactionLogFactory,
},
saver::AssetSaver,
saver::{tests::CoolTextSaver, AssetSaver},
tests::{
read_asset_as_string, read_meta_as_string, run_app_until, CoolText, CoolTextLoader,
CoolTextRon, SubText,
Expand Down Expand Up @@ -426,43 +426,6 @@ fn run_app_until_finished_processing(app: &mut App, guard: RwLockWriteGuard<'_,
});
}

#[derive(TypePath)]
struct CoolTextSaver;

impl AssetSaver for CoolTextSaver {
type Asset = CoolText;
type Settings = ();
type OutputLoader = CoolTextLoader;
type Error = std::io::Error;

async fn save(
&self,
writer: &mut crate::io::Writer,
asset: crate::saver::SavedAsset<'_, Self::Asset>,
_: &Self::Settings,
) -> Result<(), Self::Error> {
let ron = CoolTextRon {
text: asset.text.clone(),
sub_texts: asset
.iter_labels()
.map(|label| asset.get_labeled::<SubText, _>(label).unwrap().text.clone())
.collect(),
dependencies: asset
.dependencies
.iter()
.map(|handle| handle.path().unwrap().path())
.map(|path| path.to_str().unwrap().to_string())
.collect(),
// NOTE: We can't handle embedded dependencies in any way, since we need to write to
// another file to do so.
embedded_dependencies: vec![],
};
let ron = ron::ser::to_string_pretty(&ron, PrettyConfig::new().new_line("\n")).unwrap();
writer.write_all(ron.as_bytes()).await?;
Ok(())
}
}

// Note: while we allow any Fn, since closures are unnameable types, creating a processor with a
// closure cannot be used (since we need to include the name of the transformer in the meta
// file).
Expand Down Expand Up @@ -637,7 +600,7 @@ fn asset_processor_transforms_asset_with_meta() {
source_dir.insert_meta_text(path, r#"(
meta_format_version: "1.0",
asset: Process(
processor: "bevy_asset::processor::process::LoadTransformAndSave<bevy_asset::tests::CoolTextLoader, bevy_asset::processor::tests::RootAssetTransformer<bevy_asset::processor::tests::AddText, bevy_asset::tests::CoolText>, bevy_asset::processor::tests::CoolTextSaver>",
processor: "bevy_asset::processor::process::LoadTransformAndSave<bevy_asset::tests::CoolTextLoader, bevy_asset::processor::tests::RootAssetTransformer<bevy_asset::processor::tests::AddText, bevy_asset::tests::CoolText>, bevy_asset::saver::tests::CoolTextSaver>",
settings: (
loader_settings: (),
transformer_settings: (),
Expand Down Expand Up @@ -846,7 +809,7 @@ impl AssetSaver for FakeBsnSaver {
async fn save(
&self,
writer: &mut crate::io::Writer,
asset: crate::saver::SavedAsset<'_, Self::Asset>,
asset: crate::saver::SavedAsset<'_, '_, Self::Asset>,
_settings: &Self::Settings,
) -> Result<(), Self::Error> {
use std::io::{Error, ErrorKind};
Expand Down Expand Up @@ -1336,7 +1299,7 @@ fn nested_loads_of_processed_asset_reprocesses_on_reload() {
async fn save(
&self,
writer: &mut crate::io::Writer,
asset: crate::saver::SavedAsset<'_, Self::Asset>,
asset: crate::saver::SavedAsset<'_, '_, Self::Asset>,
_settings: &Self::Settings,
) -> Result<<Self::OutputLoader as AssetLoader>::Settings, Self::Error> {
let serialized = serialize_as_leaf(asset.get().value.clone());
Expand Down Expand Up @@ -1759,7 +1722,7 @@ fn writes_default_meta_for_processor() {
r#"(
meta_format_version: "1.0",
asset: Process(
processor: "bevy_asset::processor::process::LoadTransformAndSave<bevy_asset::tests::CoolTextLoader, bevy_asset::processor::tests::RootAssetTransformer<bevy_asset::processor::tests::AddText, bevy_asset::tests::CoolText>, bevy_asset::processor::tests::CoolTextSaver>",
processor: "bevy_asset::processor::process::LoadTransformAndSave<bevy_asset::tests::CoolTextLoader, bevy_asset::processor::tests::RootAssetTransformer<bevy_asset::processor::tests::AddText, bevy_asset::tests::CoolText>, bevy_asset::saver::tests::CoolTextSaver>",
settings: (
loader_settings: (),
transformer_settings: (),
Expand Down
Loading