use bevy_app::{plugin_group, Plugin};
plugin_group! {
pub struct DefaultPlugins {
bevy_app:::PanicHandlerPlugin,
#[cfg(feature = "bevy_log")]
bevy_log:::LogPlugin,
bevy_app:::TaskPoolPlugin,
bevy_diagnostic:::FrameCountPlugin,
bevy_time:::TimePlugin,
bevy_transform:::TransformPlugin,
bevy_diagnostic:::DiagnosticsPlugin,
bevy_input:::InputPlugin,
#[custom(cfg(not(feature = "bevy_window")))]
bevy_app:::ScheduleRunnerPlugin,
#[cfg(feature = "bevy_window")]
bevy_window:::WindowPlugin,
#[cfg(feature = "bevy_window")]
bevy_a11y:::AccessibilityPlugin,
#[cfg(feature = "std")]
#[custom(cfg(any(all(unix, not(target_os = "horizon")), windows)))]
bevy_app:::TerminalCtrlCHandlerPlugin,
#[cfg(feature = "bevy_asset")]
#[custom(cfg(any(feature = "http", feature = "https")))]
bevy_asset::io::web:::WebAssetPlugin,
#[cfg(feature = "bevy_asset")]
bevy_asset:::AssetPlugin,
#[cfg(feature = "bevy_scene")]
bevy_scene:::ScenePlugin,
#[cfg(feature = "bevy_winit")]
bevy_winit:::WinitPlugin,
#[custom(cfg(all(feature = "dlss", not(feature = "force_disable_dlss"))))]
bevy_anti_alias::dlss:::DlssInitPlugin,
#[cfg(feature = "bevy_render")]
bevy_render:::RenderPlugin,
#[cfg(feature = "bevy_image")]
bevy_image:::ImagePlugin,
#[cfg(feature = "bevy_mesh")]
bevy_mesh:::MeshPlugin,
#[cfg(feature = "bevy_camera")]
bevy_camera:::CameraPlugin,
#[cfg(feature = "bevy_light")]
bevy_light:::LightPlugin,
#[cfg(feature = "bevy_render")]
#[custom(cfg(all(not(target_arch = "wasm32"), feature = "multi_threaded")))]
bevy_render::pipelined_rendering:::PipelinedRenderingPlugin,
#[cfg(feature = "bevy_core_pipeline")]
bevy_core_pipeline:::CorePipelinePlugin,
#[cfg(feature = "bevy_post_process")]
bevy_post_process:::PostProcessPlugin,
#[cfg(feature = "bevy_anti_alias")]
bevy_anti_alias:::AntiAliasPlugin,
#[cfg(feature = "bevy_sprite")]
bevy_sprite:::SpritePlugin,
#[cfg(feature = "bevy_sprite_render")]
bevy_sprite_render:::SpriteRenderPlugin,
#[cfg(feature = "bevy_text")]
bevy_text:::TextPlugin,
#[cfg(feature = "bevy_ui")]
bevy_ui:::UiPlugin,
#[cfg(feature = "bevy_ui_render")]
bevy_ui_render:::UiRenderPlugin,
#[cfg(feature = "bevy_pbr")]
bevy_pbr:::PbrPlugin,
#[cfg(feature = "bevy_gltf")]
bevy_gltf:::GltfPlugin,
#[cfg(feature = "bevy_audio")]
bevy_audio:::AudioPlugin,
#[cfg(feature = "bevy_gilrs")]
bevy_gilrs:::GilrsPlugin,
#[cfg(feature = "bevy_animation")]
bevy_animation:::AnimationPlugin,
#[cfg(feature = "bevy_gizmos")]
bevy_gizmos:::GizmoPlugin,
#[cfg(feature = "bevy_gizmos_render")]
bevy_gizmos_render:::GizmoRenderPlugin,
#[cfg(feature = "bevy_state")]
bevy_state::app:::StatesPlugin,
#[cfg(feature = "bevy_ci_testing")]
bevy_dev_tools::ci_testing:::CiTestingPlugin,
#[cfg(feature = "hotpatching")]
bevy_app::hotpatch:::HotPatchPlugin,
#[plugin_group]
#[cfg(feature = "bevy_picking")]
bevy_picking:::DefaultPickingPlugins,
#[doc(hidden)]
:IgnoreAmbiguitiesPlugin,
}
}
#[derive(Default)]
struct IgnoreAmbiguitiesPlugin;
impl Plugin for IgnoreAmbiguitiesPlugin {
#[expect(
clippy::allow_attributes,
reason = "`unused_variables` is not always linted"
)]
#[allow(
unused_variables,
reason = "The `app` parameter is used only if a combination of crates that contain ambiguities with each other are enabled."
)]
fn build(&self, app: &mut bevy_app::App) {
#[cfg(all(feature = "bevy_animation", feature = "bevy_ui"))]
if app.is_plugin_added::<bevy_animation::AnimationPlugin>()
&& app.is_plugin_added::<bevy_ui::UiPlugin>()
{
app.ignore_ambiguity(
bevy_app::PostUpdate,
bevy_animation::advance_animations,
bevy_ui::ui_layout_system,
);
app.ignore_ambiguity(
bevy_app::PostUpdate,
bevy_animation::animate_targets,
bevy_ui::ui_layout_system,
);
}
}
}
plugin_group! {
pub struct MinimalPlugins {
bevy_app:::TaskPoolPlugin,
bevy_diagnostic:::FrameCountPlugin,
bevy_time:::TimePlugin,
bevy_app:::ScheduleRunnerPlugin,
#[cfg(feature = "bevy_ci_testing")]
bevy_dev_tools::ci_testing:::CiTestingPlugin,
}
}