Ales Katona 978f998cdd | 6 years ago | |
---|---|---|
src | 6 years ago | |
.gitignore | 6 years ago | |
.gitlab-ci.yml | 6 years ago | |
Cargo.toml | 6 years ago | |
LICENSE | 6 years ago | |
README.md | 6 years ago |
README.md
prongs
Input handling schema written in rust. Backend agnostic, provides serializability, assignment and unified interface for working with inputs. Keyboard, mouse and controllers supported.
Current backends include Piston and Gilrs with more on the way.
Using prongs library
To use the prongs library include it in your Cargo.toml
file. You MUST specify a backend via features e.g.
[dependencies]
prongs = { version = "1.0.0", features = ["backend_piston"] }
Documentation
Examples
See examples repo
Design
Prongs provides a specific backend Schema struct that unifies and simplifies working with input events. The goal is to provide serializability, input assigning and unify the interface for working with inputs. Main target audience are game developer and engine developers.
The main workhorse of the prongs is the Schema. It is a combination of:
- A keymap (input -> user action mapping)
- Assigning functionality (create mapping by actuating controls)
- Processing functionality (apply mapping in main loop)
- Unified interface and simplification
Prongs abstracts input events into a three layered structure. The layers are:
- Class of input, e.g. mouse or keyboard or controller
- Instance of input, e.g. key "k", mouse button #2 or axis #2
- State of input, e.g. button pressed/released or value of axis
This is expressed best in the InputCause enum.
The library does not run any event loop due to various differences between how backends handle the event loop. To use prongs you need to define an actions type that will identify the mappings on input events. For example:
enum Actions
{
Up,
Down,
Left,
Right,
}
You then need to "hook" the process_event
function into your main event loop for processing. This will
map the input event into the action you specified when you assigned or loaded the Schema configuration.
Assigning the mapping from input events to user actions is done by using the assign_input
function. This
can be used to assign actions to input events individually as required (e.g. in a menu when something gets clicked).
Note that assign_input
handles required de-duplication (e.g. it won't consider a button release as a separate mapping to a button press).
Because the Schema object is fully serializable you can also load existing setup from any previously stored one.
Development
To build you need to specify the required backends e.g. cargo build --features backend_piston,backend_gilrs
Same goes for testing cargo test --features backend_piston,backend_gilrs
If you don't specify a backend the tests for it will not be compiled and won't run.