#bevy-plugin #recognition #gesture #template #mouse #mouse-position #recording

bevy_guessture

Bevy plugin wrapping the guessture crate’s gesture recognition API

2 unstable releases

0.2.0 Jul 20, 2024
0.1.0 Feb 23, 2024

#295 in Game dev

MIT license

41KB
384 lines

bevy_guessture

This library integrates the guessture library into the Bevy ecosystem. Its responsibilities include:

  • recording mouse position data in response to app-initiated events
  • providing mouse path data for a completed recording window to the app
  • storing app-accessible gesture templates
  • exposing gesture template serialization and asset loading mechanisms

Bevy apps using bevy_guessture are responsible for setting up gesture templates, triggering recording windows, and initiating gesture matching with the recorded mouse path data. There is an example app that demonstrates visual integration of gesture recognition, as well as serializing gesture information as a loadable asset.

To get started, install the GuessturePlugin in your app and prepare a set of guesture templates:

    App::new()
        .add_plugins(GuessturePlugin::default());

Then prepare a set of gesture templates:

fn setup(server: Res<AssetServer>) {
    let _handle: Handle<GestureTemplates> = server.load("data.gestures");
}

To start recording a potential gesture, send the appropriate event:

fn start_record(mut record_events: EventWriter<GestureRecord>) {
   record_events.send(GestureRecord::Start);
}

After later sending a GestureRecord::Stop event, wait for a RecordedPath event with the complete recording:

fn recorded_path(
    mut events: EventReader<RecordedPath>,
    mut state: ResMut<GestureState>,
) {
    for event in events.read() {
        let matched_template = find_matching_template_with_defaults(
            &state.templates,
            &event.path,
        );
        match matched_template {
            Ok((template, score)) =>
                println!("matched {} with score {}", template.name, score),
            Err(err) =>
                println!("failed to match: {:?}", err),
        }
    }
}

Bevy compatibility

bevy_guessture Bevy
main 0.14
0.2 0.14
0.1 0.13

Dependencies

~25–60MB
~1M SLoC