Add camera shakes to your 2d Bevy game with three lines of code.
- Zero configuration required
- Sensible defaults
- Batteries included (default noise)
- Compatible with bevy_pancam
Add the plugin:
app.add_plugins(TraumaPlugin);Simply add a component to your camera:
commands.spawn((Camera2d, Shake::default()));Make it shake:
fn shake(mut shake: Single<&mut Shake>, keys: Res<ButtonInput<KeyCode>>) {
if keys.just_pressed(KeyCode::Space) {
shake.add_trauma(0.2);
}
}There is also a convenience system param for applying trauma to all Shakes:
fn shake(mut shake: Shakes, keys: Res<ButtonInput<KeyCode>>) {
if keys.just_pressed(KeyCode::Space) {
shakes.add_trauma(0.2);
}
}And an event, if you prefer that:
fn shake(mut commands: Commands, keys: Res<ButtonInput<KeyCode>>) {
if keys.just_pressed(KeyCode::Space) {
commands.trigger(TraumaEvent(0.2));
}
}And even a command:
fn shake(mut commands: Commands, keys: Res<ButtonInput<KeyCode>>) {
if keys.just_pressed(KeyCode::Space) {
info!("Adding small trauma");
commands.add_trauma(0.2);
}
}Maybe I went a little overboard and I should remove one of those ways, in any case, they can be toggled through the features: system_param, events, commands.
Optionally add ShakeSettings, if you're not happy with the defaults.
commands.spawn((
Camera2d,
Shake::default(),
ShakeSettings {
amplitude: 200.,
trauma_power: 3.,
decay_per_second: 0.3,
frequency: 4.,
octaves: 2,
},
PanCam::default(),
));The main branch targets the latest bevy release.
| bevy | bevy_trauma_shake |
|---|---|
| 0.17 | 0.6, main |
| 0.16 | 0.5 |
| 0.15 | 0.4 |
| 0.14 | 0.3 |
| 0.13 | 0.2 |
| 0.12 | 0.1 |
bevy_trauma_shake is dual-licensed under either
- MIT License (./LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (./LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
at your option.
- https://www.youtube.com/watch?v=tu-Qe66AvtY
bevy_camera_shake: 2D and 3D shakes and more configuration options. I used this a lot for reference, but I wanted a simpler API.
PRs welcome!