Skip to main content

bevy_ldtk_asset/
plugin.rs

1#![allow(missing_docs)]
2
3use bevy_app::{App, Plugin};
4use bevy_asset::AssetApp;
5
6use crate::entity::EntityInstance;
7use crate::entity_definition::EntityDefinition;
8use crate::enum_definition::EnumDefinition;
9use crate::iid::Iid;
10use crate::layer::LayerInstance;
11use crate::layer_definition::LayerDefinition;
12use crate::level::{Level, LevelBackground};
13use crate::project::Project;
14use crate::project_loader::ProjectLoader;
15use crate::tileset_definition::TilesetDefinition;
16use crate::world::World;
17
18/// The top level Bevy plugin!
19///
20/// Use this to enable the features of this plugin within your Bevy app!
21///
22/// See [Plugins](https://bevyengine.org/learn/quick-start/getting-started/plugins/)
23/// from The Bevy Book for details.
24#[derive(Debug)]
25pub struct BevyLdtkAssetPlugin;
26
27impl Plugin for BevyLdtkAssetPlugin {
28    fn build(&self, app: &mut App) {
29        app //
30            .init_asset::<EntityInstance>()
31            .init_asset::<LayerInstance>()
32            .init_asset::<Level>()
33            .init_asset::<Project>()
34            .init_asset::<World>()
35            .init_asset::<EntityDefinition>()
36            .init_asset::<LayerDefinition>()
37            .init_asset::<TilesetDefinition>()
38            .init_asset::<EnumDefinition>()
39            .init_asset_loader::<ProjectLoader>()
40            .register_asset_reflect::<EntityInstance>()
41            .register_asset_reflect::<LayerInstance>()
42            .register_asset_reflect::<Level>()
43            .register_asset_reflect::<Project>()
44            .register_asset_reflect::<World>()
45            .register_asset_reflect::<EntityDefinition>()
46            .register_asset_reflect::<LayerDefinition>()
47            .register_asset_reflect::<TilesetDefinition>()
48            .register_asset_reflect::<EnumDefinition>()
49            .register_type::<Iid>()
50            .register_type::<LevelBackground>();
51
52        #[cfg(feature = "asset_messages_debug")]
53        {
54            use bevy_app::Update;
55
56            use crate::systems::asset_messages_debug::asset_messages_debug_output;
57
58            app.add_systems(
59                Update,
60                (
61                    asset_messages_debug_output::<Project>,
62                    asset_messages_debug_output::<World>,
63                    asset_messages_debug_output::<Level>,
64                    asset_messages_debug_output::<LayerInstance>,
65                    asset_messages_debug_output::<EntityInstance>,
66                ),
67            );
68        }
69    }
70}