Keybee is a semantic input binding library. It's currently an early proof of concept that has been extracted from a larger game project, modified, and not well tested.
Keybee is built around straightforward core primitives:
- Session
holds all state for an application
- Action
defines anything a player can do, like jump or move
- ActionSet
groups together related actions
- Bindings
assigns inputs to actions
winit
: Enable support for winit eventsgilrs
: Enable support for gil-rs events```rust use keybee::{Session, ButtonAction, Clamped, Axis2dAction};
let session = keybee::Session::new();
let gameplay = session.createactionset("gameplay");
let jump = gameplay.createaction::
// Keybee will have support for deserializing bindings from files, but for now, // this isn't quite done. session.use_bindings(todo!("load bindings from somewhere"));
loop {
// With the winit
feature enabled:
// session.handlewinitevent::<()>(todo!("pass winit events"));
// With the `gilrs` feature enabled:
// session.handle_gilrs_event(todo!("pass gil-rs events"));
if jump.get() {
println!("Player jumped!");
}
let translate = movement.get();
if translate != (0.0, 0.0) {
println!("Player movement vector: {:?}", translate);
}
// At the end of every game tick, run `end_update` to reset relative axis
// movements and button presses.
session.end_update();
} ```
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.