#[cfg(feature = "bevy")]
use bevy_app::App;
#[cfg(feature = "bevy")]
use bevy_asset::{AssetPlugin, AssetServer};
#[cfg(feature = "bevy")]
use bevy_asset::{Handle, LoadState};
#[cfg(feature = "bevy")]
use bevy_ecs::prelude::{Res, ResMut};
#[cfg(feature = "bevy")]
use bevy_ecs::resource::Resource;
#[cfg(feature = "bevy")]
use bevy_ecs::system::RunSystemOnce;
#[cfg(feature = "bevy")]
use bevy_internal::MinimalPlugins;
use micro_ldtk::ldtk::Project;
#[derive(Default, Resource)]
#[cfg(feature = "bevy")]
pub struct LevelHandle(Handle<Project>);
macro_rules! test_loads_assets {
($file_name: literal = $cfg_version: literal) => {
#[test]
#[cfg(all(feature = "bevy", feature = $cfg_version))]
fn loads_ldtk_file() {
static ASSET_PATH: &str = $file_name;
let mut app = App::new();
app.init_resource::<LevelHandle>()
.add_plugins((MinimalPlugins, AssetPlugin::default()));
app.add_plugins(micro_ldtk::MicroLDTKPlugin);
app.update();
app.world_mut()
.run_system_once(
|assets: Res<AssetServer>, mut handle: ResMut<LevelHandle>| {
*handle = LevelHandle(assets.load(ASSET_PATH))
},
)
.expect("Failed to load LDTK file");
app.update();
let mut status: LoadState = app
.world_mut()
.run_system_once(|assets: Res<AssetServer>, handle: Res<LevelHandle>| {
assets
.get_load_state(handle.0.id())
.expect("Unable to get load state")
})
.expect("Failed to get load state");
while matches!(status, LoadState::Loading) {
status = app
.world_mut()
.run_system_once(|assets: Res<AssetServer>, handle: Res<LevelHandle>| {
assets
.get_load_state(handle.0.id())
.expect("Unable to get load state")
})
.expect("Failed to get load state");
}
if !status.is_loaded() {
panic!("Failed to load LDTK file: {:?}", status);
}
}
};
}
test_loads_assets!("ldtk_v1_0_0.ldtk" = "ldtk_1_0_0");
test_loads_assets!("ldtk_v1_1_0.ldtk" = "ldtk_1_1_0");
test_loads_assets!("ldtk_v1_1_1.ldtk" = "ldtk_1_1_1");
test_loads_assets!("ldtk_v1_1_2.ldtk" = "ldtk_1_1_2");
test_loads_assets!("ldtk_v1_2_0.ldtk" = "ldtk_1_2_0");
test_loads_assets!("ldtk_v1_2_1.ldtk" = "ldtk_1_2_1");
test_loads_assets!("ldtk_v1_2_2.ldtk" = "ldtk_1_2_2");
test_loads_assets!("ldtk_v1_2_3.ldtk" = "ldtk_1_2_3");
test_loads_assets!("ldtk_v1_2_4.ldtk" = "ldtk_1_2_4");
test_loads_assets!("ldtk_v1_2_5.ldtk" = "ldtk_1_2_5");
test_loads_assets!("ldtk_v1_3_0.ldtk" = "ldtk_1_3_0");
test_loads_assets!("ldtk_v1_4_0.ldtk" = "ldtk_1_4_0");
test_loads_assets!("ldtk_v1_4_1.ldtk" = "ldtk_1_4_1");
test_loads_assets!("ldtk_v1_5_3.ldtk" = "ldtk_1_5_3");