
# Objective - Fixes #16892 ## Solution - Removed `TypeRegistryPlugin` (`Name` is now automatically registered with a default `App`) - Moved `TaskPoolPlugin` to `bevy_app` - Moved `FrameCountPlugin` to `bevy_diagnostic` - Deleted now-empty `bevy_core` ## Testing - CI ## Migration Guide - `TypeRegistryPlugin` no longer exists. If you can't use a default `App` but still need `Name` registered, do so manually with `app.register_type::<Name>()`. - References to `TaskPoolPlugin` and associated types will need to import it from `bevy_app` instead of `bevy_core` - References to `FrameCountPlugin` and associated types will need to import it from `bevy_diagnostic` instead of `bevy_core` ## Notes This strategy was agreed upon by Cart and several other members in [Discord](https://discord.com/channels/691052431525675048/692572690833473578/1319137218312278077).
123 lines
4.9 KiB
Rust
123 lines
4.9 KiB
Rust
use bevy_app::{plugin_group, Plugin};
|
|
|
|
plugin_group! {
|
|
/// This plugin group will add all the default plugins for a *Bevy* application:
|
|
pub struct DefaultPlugins {
|
|
bevy_app:::PanicHandlerPlugin,
|
|
bevy_log:::LogPlugin,
|
|
bevy_app:::TaskPoolPlugin,
|
|
bevy_diagnostic:::FrameCountPlugin,
|
|
bevy_time:::TimePlugin,
|
|
bevy_transform:::TransformPlugin,
|
|
bevy_hierarchy:::HierarchyPlugin,
|
|
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,
|
|
#[custom(cfg(not(target_arch = "wasm32")))]
|
|
bevy_app:::TerminalCtrlCHandlerPlugin,
|
|
#[cfg(feature = "bevy_asset")]
|
|
bevy_asset:::AssetPlugin,
|
|
#[cfg(feature = "bevy_scene")]
|
|
bevy_scene:::ScenePlugin,
|
|
#[cfg(feature = "bevy_winit")]
|
|
bevy_winit:::WinitPlugin,
|
|
#[cfg(feature = "bevy_render")]
|
|
bevy_render:::RenderPlugin,
|
|
// NOTE: Load this after renderer initialization so that it knows about the supported
|
|
// compressed texture formats.
|
|
#[cfg(feature = "bevy_render")]
|
|
bevy_render::texture:::ImagePlugin,
|
|
#[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_sprite")]
|
|
bevy_sprite:::SpritePlugin,
|
|
#[cfg(feature = "bevy_text")]
|
|
bevy_text:::TextPlugin,
|
|
#[cfg(feature = "bevy_ui")]
|
|
bevy_ui:::UiPlugin,
|
|
#[cfg(feature = "bevy_pbr")]
|
|
bevy_pbr:::PbrPlugin,
|
|
// NOTE: Load this after renderer initialization so that it knows about the supported
|
|
// compressed texture formats.
|
|
#[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_state")]
|
|
bevy_state::app:::StatesPlugin,
|
|
#[cfg(feature = "bevy_dev_tools")]
|
|
bevy_dev_tools:::DevToolsPlugin,
|
|
#[cfg(feature = "bevy_ci_testing")]
|
|
bevy_dev_tools::ci_testing:::CiTestingPlugin,
|
|
#[plugin_group]
|
|
#[cfg(feature = "bevy_picking")]
|
|
bevy_picking:::DefaultPickingPlugins,
|
|
#[doc(hidden)]
|
|
:IgnoreAmbiguitiesPlugin,
|
|
}
|
|
/// [`DefaultPlugins`] obeys *Cargo* *feature* flags. Users may exert control over this plugin group
|
|
/// by disabling `default-features` in their `Cargo.toml` and enabling only those features
|
|
/// that they wish to use.
|
|
///
|
|
/// [`DefaultPlugins`] contains all the plugins typically required to build
|
|
/// a *Bevy* application which includes a *window* and presentation components.
|
|
/// For the absolute minimum number of plugins needed to run a Bevy application, see [`MinimalPlugins`].
|
|
}
|
|
|
|
#[derive(Default)]
|
|
struct IgnoreAmbiguitiesPlugin;
|
|
|
|
impl Plugin for IgnoreAmbiguitiesPlugin {
|
|
#[allow(unused_variables)] // Variables are used depending on enabled features
|
|
fn build(&self, app: &mut bevy_app::App) {
|
|
// bevy_ui owns the Transform and cannot be animated
|
|
#[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! {
|
|
/// This plugin group will add the minimal plugins for a *Bevy* application:
|
|
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,
|
|
}
|
|
/// This plugin group represents the absolute minimum, bare-bones, bevy application.
|
|
/// Use this if you want to have absolute control over the plugins used.
|
|
///
|
|
/// It includes a [schedule runner (`ScheduleRunnerPlugin`)](crate::app::ScheduleRunnerPlugin)
|
|
/// to provide functionality that would otherwise be driven by a windowed application's
|
|
/// *event loop* or *message loop*.
|
|
}
|