#[allow(clippy::module_inception)] mod camera; mod camera_driver_node; mod projection; pub use camera::*; pub use camera_driver_node::*; pub use projection::*; use crate::{render_graph::RenderGraph, ExtractSchedule, Render, RenderApp, RenderSet}; use bevy_app::{App, Plugin}; use bevy_ecs::schedule::IntoSystemConfigs; #[derive(Default)] pub struct CameraPlugin; impl Plugin for CameraPlugin { fn build(&self, app: &mut App) { app.register_type::() .register_type::() .register_type::>() .register_type::() .register_type::() .register_type::() .add_plugin(CameraProjectionPlugin::::default()) .add_plugin(CameraProjectionPlugin::::default()) .add_plugin(CameraProjectionPlugin::::default()); if let Ok(render_app) = app.get_sub_app_mut(RenderApp) { render_app .init_resource::() .add_systems(ExtractSchedule, extract_cameras) .add_systems(Render, sort_cameras.in_set(RenderSet::Prepare)); let camera_driver_node = CameraDriverNode::new(&mut render_app.world); let mut render_graph = render_app.world.resource_mut::(); render_graph.add_node(crate::main_graph::node::CAMERA_DRIVER, camera_driver_node); } } }