bevy_transform/
plugins.rs1use bevy_app::{App, Plugin, PostStartup, PostUpdate};
2use bevy_ecs::schedule::{IntoSystemConfigs, IntoSystemSetConfigs, SystemSet};
3use bevy_hierarchy::ValidParentCheckPlugin;
4
5use crate::{
6 prelude::{GlobalTransform, Transform},
7 systems::{propagate_transforms, sync_simple_transforms},
8};
9
10#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)]
12pub enum TransformSystem {
13 TransformPropagate,
15}
16
17#[derive(Default)]
19pub struct TransformPlugin;
20
21impl Plugin for TransformPlugin {
22 fn build(&self, app: &mut App) {
23 #[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)]
26 struct PropagateTransformsSet;
27
28 app.register_type::<Transform>()
29 .register_type::<GlobalTransform>()
30 .add_plugins(ValidParentCheckPlugin::<GlobalTransform>::default())
31 .configure_sets(
32 PostStartup,
33 PropagateTransformsSet.in_set(TransformSystem::TransformPropagate),
34 )
35 .add_systems(
37 PostStartup,
38 (
39 sync_simple_transforms
40 .in_set(TransformSystem::TransformPropagate)
41 .ambiguous_with(PropagateTransformsSet),
45 propagate_transforms.in_set(PropagateTransformsSet),
46 ),
47 )
48 .configure_sets(
49 PostUpdate,
50 PropagateTransformsSet.in_set(TransformSystem::TransformPropagate),
51 )
52 .add_systems(
53 PostUpdate,
54 (
55 sync_simple_transforms
56 .in_set(TransformSystem::TransformPropagate)
57 .ambiguous_with(PropagateTransformsSet),
58 propagate_transforms.in_set(PropagateTransformsSet),
59 ),
60 );
61 }
62}