Crate leafwing_input_playback
source ·Expand description
§About
An input recording and playback library for the [Bevy] game engine in Rust. Test your games and applications without breaking a sweat. Support Tool Assisted Speedruns (TAS) effortlessly. Make crazy game mechanics where your player’s inputs are echoed??
This crate currently captures the following input modes:
- keyboard
- mouse
- gamepad
If you need more, please feel free to file an issue or open a PR!
§Getting started
If you’re new to this crate, check out the input_playback
example to get a good overview of how it all works in practice.
§Playback-powered testing
This crate can be used to capture, save to disk, and then play back user inputs in a macro-like fashion. This serialization-based workflow is a natural (if somewhat brittle) fit for testing UI, app logic and gameplay elements of your Bevy apps.
Simply toggle on InputCapturePlugin
, set a PlaybackFilePath
, perform your inputs and then close the app.
Then, when evaluating tests, loop through each saved input sample, and run your app with the InputPlaybackPlugin
, providing a PlaybackFilePath
corresponding to the input sample you are testing.
AppExit
events are also captured, your tests will close down automatically when they’re complete.
Modules§
- Counts (and updates) the frame of the app
- Captures user input from assorted raw
Event
types. - Reads user input from a single
TimestampedInputs
resource. - Serialization and deserialization of
TimestampedInputs
data - Unifies (and time-stamp) various
bevy::input
andbevy::window
input events. These are first unified into aInputEvent
enum, then timestamped to create aTimestampedInputEvent
. Those timestamped events are finally stored inside of aTimestampedInputs
resource, which should be used for input capture and playback.