1extern crate oxygengine_core as core;
2
3pub mod component;
4pub mod device;
5pub mod resources;
6pub mod system;
7
8pub mod prelude {
9 pub use crate::{
10 component::*,
11 device::*,
12 resources::{controller::*, stack::*},
13 system::*,
14 };
15}
16
17pub mod __internal {
18 pub use toml;
19}
20
21use crate::{
22 component::InputStackInstance,
23 resources::{controller::InputController, stack::InputStack},
24 system::{input_system, InputSystemResources},
25};
26use core::{
27 app::AppBuilder,
28 ecs::pipeline::{PipelineBuilder, PipelineBuilderError},
29 prefab::PrefabManager,
30};
31
32pub fn bundle_installer<PB, ICS>(
33 builder: &mut AppBuilder<PB>,
34 mut input_controller_setup: ICS,
35) -> Result<(), PipelineBuilderError>
36where
37 PB: PipelineBuilder,
38 ICS: FnMut(&mut InputController),
39{
40 let mut input = InputController::default();
41 input_controller_setup(&mut input);
42 builder.install_resource(input);
43 builder.install_resource(InputStack::default());
44 builder.install_system::<InputSystemResources>("input", input_system, &[])?;
45 Ok(())
46}
47
48pub fn prefabs_installer(prefabs: &mut PrefabManager) {
49 prefabs.register_component_factory::<InputStackInstance>("InputStackInstance");
50}
51
52#[macro_export]
53macro_rules! include_input_mappings {
54 ($path:literal) => {
55 $crate::__internal::toml::from_str::<$crate::resources::controller::InputMappings>(
56 include_str!($path),
57 )
58 .unwrap_or_else(|error| {
59 panic!(
60 "Could not deserialize input bindings for: {}. Error: {}",
61 $path, error,
62 )
63 })
64 };
65}