goud_engine/ecs/app/builtin_plugins.rs
1//! Built-in plugins that ship with the engine.
2//!
3//! These plugins provide core engine functionality like transform propagation.
4
5use super::plugin::{Plugin, PluginGroup};
6use super::App;
7use crate::ecs::schedule::CoreStage;
8use crate::ecs::systems::TransformPropagationSystem;
9
10/// Plugin that adds the transform propagation system to PostUpdate.
11///
12/// This plugin registers [`TransformPropagationSystem`] in the
13/// [`CoreStage::PostUpdate`] stage, ensuring that global transforms are
14/// recomputed after all user systems have run.
15///
16/// # Example
17///
18/// ```rust,ignore
19/// use goud_engine::ecs::app::App;
20/// use goud_engine::ecs::app::TransformPropagationPlugin;
21///
22/// let mut app = App::new();
23/// app.add_plugin(TransformPropagationPlugin);
24/// ```
25#[derive(Debug, Default, Clone)]
26pub struct TransformPropagationPlugin;
27
28impl Plugin for TransformPropagationPlugin {
29 fn build(&self, app: &mut App) {
30 app.add_system(CoreStage::PostUpdate, TransformPropagationSystem::new());
31 }
32
33 fn name(&self) -> &'static str {
34 "TransformPropagationPlugin"
35 }
36}
37
38/// A plugin group that adds all default engine plugins.
39///
40/// Currently includes:
41/// - [`TransformPropagationPlugin`]: Automatic transform hierarchy propagation
42///
43/// # Example
44///
45/// ```rust,ignore
46/// use goud_engine::ecs::app::App;
47/// use goud_engine::ecs::DefaultPlugins;
48///
49/// let mut app = App::new_with_defaults();
50/// // Or manually:
51/// let mut app = App::new();
52/// app.add_plugin_group(DefaultPlugins);
53/// ```
54#[derive(Debug, Default, Clone)]
55pub struct DefaultPlugins;
56
57impl PluginGroup for DefaultPlugins {
58 fn build(self, app: &mut App) {
59 app.add_plugin(TransformPropagationPlugin);
60 }
61}