oxygengine_ai/
lib.rs

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}