Skip to main content

rantz_camera2d/
plugins.rs

1use crate::prelude::*;
2use bevy::prelude::*;
3use rantz_spatial2d::prelude::*;
4
5/// The core plugin for camera2d, add this to your app
6pub struct CameraPlugin2D;
7
8impl Plugin for CameraPlugin2D {
9    fn build(&self, app: &mut App) {
10        self.register_types(app);
11        self.add_systems(app);
12    }
13}
14
15impl CameraPlugin2D {
16    fn register_types(&self, app: &mut App) {
17        app.register_type::<MainCamera>()
18            .register_type::<MainCameraShouldTarget>()
19            .register_type::<CameraStyle>()
20            .register_type::<DeadZone>()
21            .register_type::<CameraLerp>()
22            .register_type::<CameraLead>()
23            .register_type::<CameraTarget>();
24    }
25
26    fn add_systems(&self, app: &mut App) {
27        app.add_systems(
28            PostStartup,
29            set_initial_main_camera_target.before(SpatialSystems2D::Propagate),
30        )
31        .add_systems(
32            PostUpdate,
33            (
34                camera_follow_target,
35                main_camera_target_added,
36                main_camera_target_removed,
37            )
38                .before(SpatialSystems2D::Propagate),
39        );
40    }
41}