oxygengine_navigation/
lib.rs

1extern crate oxygengine_core as core;
2
3pub mod asset_protocols;
4pub mod components;
5pub mod resources;
6pub mod systems;
7
8pub mod prelude {
9    pub use crate::{
10        asset_protocols::{nav_grid::*, nav_mesh::*, *},
11        components::*,
12        resources::{nav_grids::*, nav_meshes::*, *},
13        systems::*,
14    };
15}
16
17use crate::{
18    asset_protocols::{nav_grid::NavGridAssetProtocol, nav_mesh::NavMeshAssetProtocol},
19    components::{NavAgent, SimpleNavDriverTag},
20    resources::{nav_grids::NavGrids, nav_meshes::NavMeshes},
21    systems::{
22        nav_agent_maintain_system, simple_nav_driver_system, NavAgentMaintainSystemResources,
23        SimpleNavDriverSystemResources,
24    },
25};
26use core::{
27    app::AppBuilder,
28    assets::database::AssetsDatabase,
29    ecs::pipeline::{PipelineBuilder, PipelineBuilderError},
30    prefab::PrefabManager,
31};
32
33pub fn bundle_installer<PB>(builder: &mut AppBuilder<PB>, _: ()) -> Result<(), PipelineBuilderError>
34where
35    PB: PipelineBuilder,
36{
37    builder.install_resource(NavMeshes::default());
38    builder.install_resource(NavGrids::default());
39    builder.install_system::<NavAgentMaintainSystemResources>(
40        "nav-agent-maintain",
41        nav_agent_maintain_system,
42        &[],
43    )?;
44    builder.install_system::<SimpleNavDriverSystemResources>(
45        "simple-nav-driver",
46        simple_nav_driver_system,
47        &["nav-agent-maintain"],
48    )?;
49    Ok(())
50}
51
52pub fn protocols_installer(database: &mut AssetsDatabase) {
53    database.register(NavMeshAssetProtocol);
54    database.register(NavGridAssetProtocol);
55}
56
57pub fn prefabs_installer(prefabs: &mut PrefabManager) {
58    prefabs.register_component_factory::<SimpleNavDriverTag>("NavAgent");
59    prefabs.register_component_factory::<NavAgent>("NavAgent");
60}