oxygengine_input/
lib.rs

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}