Crate bevy_pancam

Crate bevy_pancam 

Source
Expand description

§bevy_pancam

crates.io MIT/Apache 2.0 crates.io docs.rs

A 2d camera plugin for bevy that works with orthographic cameras.

The motivation is that this could be used for something like a map editor for a 2d game.

§Controls

Behaves similarly to common online map applications:

  • Click and drag to move the camera
  • Scroll to zoom
  • Hold keyboard buttons to move the camera

§Usage

Add the plugin to your app

App::new()
    .add_plugins((DefaultPlugins, PanCamPlugin::default()))
    .run();

Add the component to an orthographic camera:

commands.spawn((
    Camera2d,
    PanCam::default(),
))

This is enough to get going with sensible defaults.

Alternatively, set the fields of the PanCam component to customize behavior:

commands.spawn((
    Camera2d,
    PanCam {
        grab_buttons: vec![MouseButton::Left, MouseButton::Middle], // which buttons should drag the camera
        move_keys: DirectionKeys {      // the keyboard buttons used to move the camera
            up:    vec![KeyCode::KeyQ], // initalize the struct like this or use the provided methods for
            down:  vec![KeyCode::KeyW], // common key combinations
            left:  vec![KeyCode::KeyE],
            right: vec![KeyCode::KeyR],
        },
        speed: 400., // the speed for the keyboard movement
        enabled: true, // when false, controls are disabled. See toggle example.
        zoom_to_cursor: true, // whether to zoom towards the mouse or the center of the screen
        min_scale: 1., // prevent the camera from zooming too far in
        max_scale: 40., // prevent the camera from zooming too far out
        min_x: f32::NEG_INFINITY, // minimum x position of the camera window
        max_x: f32::INFINITY, // maximum x position of the camera window
        min_y: f32::NEG_INFINITY, // minimum y position of the camera window
        max_y: f32::INFINITY, // maximum y position of the camera window
    },
));

See the simple and toggle examples.

§Cargo features

  • bevy_egui_<major>_<minor> makes pancam cameras not react when the mouse or keyboard focus is on widgets created with the specific bevy_egui release. The feature is suffixed with the egui version because bevy_egui typically releases multiple breaking versions per Bevy release, and we don’t want to be forced to break on every bevy_egui release.

§Bevy Version Support

The main branch targets the latest bevy release.

bevybevy_pancam
0.180.20, main
0.170.19
0.160.18
0.150.16, 0.17
0.140.12, 0.13, 0.14, 0.15
0.130.11
0.120.10
0.110.9
0.100.8
0.90.7,
0.80.5, 0.6
0.70.3, 0.4
0.60.2
0.50.1

§License

bevy_pancam 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.

§Contributions

PRs welcome!

Structs§

DirectionKeys
Which keys move the camera in particular directions for keyboard movement
PanCam
A component that adds panning camera controls to an orthographic camera
PanCamClampBounds
Trigger this event after changing the camera bounds potentially outside the safe zone.
PanCamPlugin
Plugin that adds the necessary systems for PanCam components to work
PanCamSystems
System set to allow ordering of PanCamPlugin