2 unstable releases
0.2.0 | Jul 20, 2024 |
---|---|
0.1.0 | Feb 23, 2024 |
#295 in Game dev
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