bevy_ineffable 0.2.0

A simple-to-use input manager for bevy that empowers players and makes accessibility easy.
Documentation
use bevy::prelude::Reflect;

use crate::bindings::InputBinding;
use crate::input_action::InputKind;
use crate::processed::processor::Helper;
use crate::processed::stateful::axis_dual::StatefulDualAxisBinding;
use crate::processed::stateful::axis_single::StatefulSingleAxisBinding;
use crate::processed::stateful::continuous::StatefulContinuousBinding;
use crate::processed::stateful::pulse::StatefulPulseBinding;
use crate::processed::updating::InputSources;
use crate::resources::meta_data::IneffableMetaItem;

#[derive(Debug, Reflect, Clone)]
pub(crate) enum BoundAction {
    SingleAxis(StatefulSingleAxisBinding),
    DualAxis(StatefulDualAxisBinding),
    Continuous(StatefulContinuousBinding),
    Pulse(StatefulPulseBinding),
}

impl BoundAction {
    pub(crate) fn new(
        meta: &IneffableMetaItem,
        data: &[InputBinding],
        helper: &Helper<'_>,
    ) -> BoundAction {
        match meta.kind {
            InputKind::SingleAxis => {
                BoundAction::SingleAxis(StatefulSingleAxisBinding::new(data, helper))
            }
            InputKind::DualAxis => {
                BoundAction::DualAxis(StatefulDualAxisBinding::new(data, helper))
            }
            InputKind::Continuous => {
                BoundAction::Continuous(StatefulContinuousBinding::new(data, helper))
            }
            InputKind::Pulse => {
                BoundAction::Pulse(StatefulPulseBinding::new_from_vec(data, helper))
            }
        }
    }

    pub(crate) fn update(&mut self, sources: &mut InputSources<'_>) {
        match self {
            BoundAction::SingleAxis(binding) => binding.update(sources),
            BoundAction::DualAxis(binding) => binding.update(sources),
            BoundAction::Continuous(binding) => binding.update(sources),
            BoundAction::Pulse(binding) => binding.update(sources),
        };
    }
}