use bevy_app::{App, Plugin, TaskPoolPlugin};
use bevy_asset::AssetPlugin;
use bevy_camera::CameraPlugin;
use bevy_core_pipeline::CorePipelinePlugin;
use bevy_diagnostic::FrameCountPlugin;
use bevy_image::ImagePlugin;
use bevy_light::LightPlugin;
use bevy_mesh::MeshPlugin;
use bevy_render::RenderPlugin;
use bevy_time::TimePlugin;
use bevy_transform::TransformPlugin;
use bevy_window::{ExitCondition, WindowPlugin};
pub struct Render3dPlugins;
impl Plugin for Render3dPlugins {
fn build(&self, app: &mut App) {
add_if_missing(app, TaskPoolPlugin::default());
add_if_missing(app, FrameCountPlugin);
add_if_missing(app, TimePlugin);
add_if_missing(app, TransformPlugin);
add_if_missing(
app,
WindowPlugin {
primary_window: None,
exit_condition: ExitCondition::DontExit,
..WindowPlugin::default()
},
);
add_if_missing(app, AssetPlugin::default());
add_if_missing(app, RenderPlugin::default());
add_if_missing(app, ImagePlugin::default());
add_if_missing(app, MeshPlugin);
add_if_missing(app, CameraPlugin);
add_if_missing(app, LightPlugin);
add_if_missing(app, CorePipelinePlugin);
}
}
fn add_if_missing<P: Plugin>(app: &mut App, plugin: P) {
if !app.is_plugin_added::<P>() {
app.add_plugins(plugin);
}
}