# bevy_simple_camera_controller
Work in progress!
3d camera controller made for Bevy 0.14.0
I am new to rust and Bevy. This project will change as my understanding of both increases.
An attempt to make it easy to add camera controller to a bevy project. The main focus is ease of use.
## Camera types
- Free flight
- Top down
- Orbit
- Custom camera through builder pattern
## Input
- Keyboard
- Mouse
- Custom key binding for Keyboard
## Features
- Capture cursor on focus. Cursor is allways in the middle of the screen (escape to cancel)
- Hide cursor.
## Example
### Free flight
Move camera with WASD.
Rotate camera with mouse.
```rust
mod common;
use bevy_simple_camera_controller::prelude::*;
use bevy::prelude::*;
use common::utils;
fn main() {
let mut app = App::new();
app.add_plugins((
DefaultPlugins,
// 1: Setup camera
FreeFlightControllerBuilder::default().build()
));
app.add_systems(Startup, (
// 2: Create camera
CameraControllerPlugin::create_camera,
utils::setup_example_scene,
));
app.run();
}
```
### Top Down
Move camera with WASD.
```rust
mod common;
use bevy_simple_camera_controller::prelude::*;
use bevy::prelude::*;
use common::utils;
fn main() {
let mut app = App::new();
app.add_plugins((
DefaultPlugins,
// 1: Setup camera
TopDownControllerBuilder::default().build()
));
app.add_systems(Startup, (
// 2: Create camera
CameraControllerPlugin::create_camera,
utils::setup_example_scene,
));
app.run();
}
```
### Orbit
Rotate camera with mouse
```rust
mod common;
use bevy_simple_camera_controller::prelude::*;
use bevy::prelude::*;
use common::utils;
fn main() {
let mut app = App::new();
app.add_plugins((
DefaultPlugins,
// 1: Setup camera
OrbitControllerBuilder::default().
with_grab_cursor().
set_rotation_speed(2.0).
build()
));
app.add_systems(Startup, (
// 2: Create camera
CameraControllerPlugin::create_camera,
// Adds CameraOrbitTag to cube in order to set it as rotation target
utils::setup_example_scene,
));
app.run();
}
```
## Compatibility
| `0.14`| `0.1.0` |