1pub mod components;
2pub mod resources;
3pub mod systems;
4
5pub mod prelude {
6 pub use crate::{components::*, resources::*, systems::*, AiSystemInstallerSetup};
7}
8
9pub use emergent;
10
11use crate::{
12 components::AiInstance,
13 resources::AiBehaviors,
14 systems::{ai_system, AiSystemResources},
15};
16use oxygengine_core::{
17 app::AppBuilder,
18 ecs::{
19 pipeline::{PipelineBuilder, PipelineBuilderError},
20 Component,
21 },
22 prefab::PrefabManager,
23};
24
25pub struct AiSystemInstallerSetup<'a, C>
26where
27 C: Component,
28{
29 pub postfix: &'a str,
30 pub behaviors: AiBehaviors<C>,
31}
32
33pub fn ai_system_installer<PB, C>(
34 builder: &mut AppBuilder<PB>,
35 setup: AiSystemInstallerSetup<C>,
36) -> Result<(), PipelineBuilderError>
37where
38 PB: PipelineBuilder,
39 C: Component,
40{
41 builder.install_resource(setup.behaviors);
42 builder.install_system::<AiSystemResources<C>>(
43 &format!("ai-system-{}", setup.postfix),
44 ai_system::<C>,
45 &[],
46 )?;
47 Ok(())
48}
49
50pub fn ai_prefab_installer<C>(postfix: &str, prefabs: &mut PrefabManager)
51where
52 C: Component + Default,
53{
54 prefabs.register_component_factory::<AiInstance<C>>(&format!("AiInstance-{}", postfix));
55}