1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
pub mod app;
pub mod constants;
pub mod gui;
pub mod materials;
pub mod nodes;
pub mod resources;
pub mod systems;

#[allow(ambiguous_glob_reexports)]
pub mod prelude {
    #[cfg(feature = "desktop")]
    pub use crate::app::desktop::*;
    #[cfg(feature = "web")]
    pub use crate::app::web::*;

    pub use crate::{
        app::*,
        constants::material_uniforms::*,
        gui::*,
        materials::*,
        nodes::{spatial::*, sprite::*, text::*, *},
        resources::{audio_player::*, camera::*, renderables::*, spatial_queries::*, *},
        systems::{audio_player::*, camera::*, render_prototype_stage::*, *},
    };
}

use crate::{
    resources::{
        audio_player::AudioPlayer, camera::Camera, renderables::Renderables,
        spatial_queries::SpatialQueries,
    },
    systems::{
        audio_player::{audio_player_system, AudioPlayerResources},
        camera::{camera_system, CameraSystemResources},
        render_prototype_stage::{
            ha_render_prototype_stage_system, HaRenderPrototypeStageSystemCache,
            HaRenderPrototypeStageSystemResources,
        },
    },
};
use oxygengine_core::{
    app::AppBuilder,
    ecs::pipeline::{PipelineBuilder, PipelineBuilderError},
};

pub fn bundle_installer<PB, F>(
    builder: &mut AppBuilder<PB>,
    mut f: F,
) -> Result<(), PipelineBuilderError>
where
    PB: PipelineBuilder,
    F: FnMut(&mut Renderables, &mut Camera),
{
    let mut renderables = Renderables::default();
    let mut camera = Camera::default();
    f(&mut renderables, &mut camera);

    builder.install_resource(renderables);
    builder.install_resource(camera);
    builder.install_resource(AudioPlayer::default());
    builder.install_resource(SpatialQueries::default());
    builder.install_resource(HaRenderPrototypeStageSystemCache::default());

    builder.install_system::<CameraSystemResources>("camera", camera_system, &[])?;
    builder.install_system::<HaRenderPrototypeStageSystemResources>(
        "render-prototype-stage",
        ha_render_prototype_stage_system,
        &[],
    )?;
    builder.install_system::<AudioPlayerResources>("audio-player", audio_player_system, &[])?;

    Ok(())
}