Bevy State Machines
State Machines
Interact with the Rive State Machine in Bevy.
For more information on Rive State Machines see the respective runtime and editor documentation.
Reading/Writing Inputs
Imports needed:
use rive_bevy::{ events::{self, InputValue}, RivePlugin, RiveStateMachine, SceneTarget, SpriteEntity, StateMachine, };
The following code demonstrates reading and updating a Boolean state machine input.
Number and Trigger inputs can be accessed using get_number
and get_trigger
respectively.
fn update_state_machine_system( kbd: Res<Input<KeyCode>>, query: Query<(Entity, &mut RiveStateMachine)>, ) { if kbd.just_pressed(KeyCode::Return) { // Get the State Machine and its Entity let (_, state_machine) = query.get_single().expect("State machine not found"); // Read the current value of an input let center_hover_current = state_machine.get_bool("centerHover").unwrap().get(); // Update the input state_machine .get_bool("centerHover") .unwrap() .set(!center_hover_current); } }
Alternatively, you can update an input using Bevy's EventWriter:
fn update_state_machine_system( kbd: Res<Input<KeyCode>>, query: Query<(Entity, &RiveStateMachine)>, mut input_events: EventWriter<events::Input>, ) { if kbd.just_pressed(KeyCode::Return) { // Get the State Machine and its Entity let (entity, _) = query.get_single().expect("State machine not found"); // Send a new value to the input using Bevy events. input_events.send(events::Input { state_machine: entity, name: "shoot".into(), // name of the input value: events::InputValue::Trigger, }); } }
Additional Resources
Rive Bevy inputs example
In this doc