bevy-simple-state-machine

Crates.iobevy-simple-state-machine
lib.rsbevy-simple-state-machine
version0.6.0
sourcesrc
created_at2022-08-07 12:22:46.299009
updated_at2024-02-17 21:44:41.419923
descriptionA rudimentary animation state machine system for Bevy
homepage
repositoryhttps://github.com/LucaRickler/bevy-simple-state-machine
max_upload_size
id640196
size33,776
Luca Rickler (LucaRickler)

documentation

README

Bevy Simple State Machine

Crates.io docs MIT/Apache 2.0

Plugin for the Bevy Engine which implements a rudimentary animation state machine system.

To use this, you have to add the SimpleStateMachinePlugin to you app:

App::new()
    .add_plugins(DefaultPlugins)
    .add_plugins(SimpleStateMachinePlugin::new());

And then insert an AnimationStateMachine component on your entities:

fn setup(mut commands: Commands) {
    let starting_state = "idle";
    let my_states_map = HashMap::from([
        ("idle".to_string(), AnimationState{
            name: "idle".to_string(),
            clip: idle_clip_handle,
            interruptible: true,
        }),
        ("run".to_string(), AnimationState{
            name: "run".to_string(),
            clip: run_clip_handle,
            interruptible: true,
        }),
    ]);
    let my_states_transitions_vec = vec![
        StateMachineTransition::immediate(
            AnimationStateRef::from_string("idle"),
            AnimationStateRef::from_string("run"),
            StateMachineTrigger::from(|vars| vars["run"].is_bool(true)),
        ),
    ];
    let state_machine_vars = HashMap::from([
        ("run".to_string(), StateMachineVariableType::Bool(false)),    
    ]);
     
    commands.spawn_bundle(SpatialBundle::default())
        .insert(AnimationPlayer::default())
        .insert(AnimationStateMachine::new(
            starting_state,
            my_states_map,
            my_states_transitions_vec,
            state_machine_vars,
        ));
}

And then you can control it changing the values of the state machine variables

state_machine.update_variable("run", StateMachineVariableType::Bool(true));

Currently supported features:

  • Custom transition conditions
  • Transitions from wildcard state AnyState
  • Events emitted on transition end
  • Internal state machine variables

Currently, transitions end on the same frame they are triggered.


Bevy Compatibility:

Bevy Version Plugin Version
0.13 main
0.13 0.6.0
0.12 0.5.0
0.11 0.4.0
0.10 0.3.0
0.9 0.2.0
0.8 0.1.0
Commit count: 22

cargo fmt