# `bevy_map_camera`
[](https://docs.rs/bevy_map_camera)
[](https://crates.io/crates/bevy_map_camera)
A 3D camera controller inspired by Google Maps, [f4maps](https://demo.f4map.com/) and [Charge Finder](https://chargefinder.com/nearby).

Based upon LookTransform, LookAngles and Orbital Camera Controller from [`smooth-bevy-cameras`](https://github.com/bonsairobo/smooth-bevy-cameras).
## Features
- Orbital camera
- Zoom towards pointer
- Grab pan
- Configurable height
- Camera target follows XZ-plane
- Support for Perspective and Orthographic projection
- Smoothed movement
- Customizable keyboard/mouse controls
- Touch support
- One finger pan
- Two finger rotate
- Pinch to zoom
- Supports Easing though [`bevy_easings`](https://github.com/vleue/bevy_easings), part of `default` features.
- Implemented for `LookTransform`
- Supports Tweening through [`bevy_tweening`](https://github.com/djeedai/bevy_tweening), requires `bevy_tweening` feature.
- Lenses
- `LookTransformLens`
- `GrabHeightLens`
## Quick Start
```rs
use bevy::prelude::*;
use bevy_map_cam::{MapCamera, LookTransform, MapCameraPlugin};
fn main() {
let mut app = App::new();
app.add_plugins(DefaultPlugins);
app.add_plugins(MapCameraPlugin::default());
app.add_systems(Startup, setup);
app.run();
}
fn setup(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
) {
// plane
commands.spawn((
Mesh3d(meshes.add(Plane3d::default().mesh().size(10., 10.))),
MeshMaterial3d(materials.add(Color::from(DARK_GREEN))),
));
// Camera
commands.spawn(MapCamera);
}
```
Check out the [projection example](https://github.com/oscrim/bevy_map_camera/blob/main/examples/projection.rs) to see how to change between Perspective and Orthographic.
## Compatible Bevy versions
The `main` branch is compatible with the latest Bevy release.
| 0.2 | 0.15 |
| 0.1 | 0.14 |