From e6fced1e0cb796a377f67566b15870721fba6e36 Mon Sep 17 00:00:00 2001 From: pablo-lua Date: Sat, 28 Sep 2024 19:13:30 -0300 Subject: [PATCH 1/4] [add] Added Resource impl for Unit type --- crates/bevy_ecs/src/world/component_constants.rs | 5 +++++ crates/bevy_ecs/src/world/mod.rs | 1 + 2 files changed, 6 insertions(+) diff --git a/crates/bevy_ecs/src/world/component_constants.rs b/crates/bevy_ecs/src/world/component_constants.rs index ead0e5ac9f676..6b279732bace7 100644 --- a/crates/bevy_ecs/src/world/component_constants.rs +++ b/crates/bevy_ecs/src/world/component_constants.rs @@ -14,6 +14,9 @@ pub const ON_REPLACE: ComponentId = ComponentId::new(2); /// [`ComponentId`] for [`OnRemove`] pub const ON_REMOVE: ComponentId = ComponentId::new(3); +/// [`ComponentId`] for [`()`] as a [`Resource`] +pub const UNIT: ComponentId = ComponentId::new(4); + /// Trigger emitted when a component is added to an entity. See [`crate::component::ComponentHooks::on_add`] /// for more information. #[derive(Event, Debug)] @@ -41,3 +44,5 @@ pub struct OnReplace; #[cfg_attr(feature = "bevy_reflect", derive(Reflect))] #[cfg_attr(feature = "bevy_reflect", reflect(Debug))] pub struct OnRemove; + +impl Resource for () {} diff --git a/crates/bevy_ecs/src/world/mod.rs b/crates/bevy_ecs/src/world/mod.rs index 80a05e2a18f76..c7139f90b86c8 100644 --- a/crates/bevy_ecs/src/world/mod.rs +++ b/crates/bevy_ecs/src/world/mod.rs @@ -176,6 +176,7 @@ impl World { assert_eq!(ON_INSERT, self.register_component::()); assert_eq!(ON_REPLACE, self.register_component::()); assert_eq!(ON_REMOVE, self.register_component::()); + assert_eq!(UNIT, self.init_resource::<()>()) } /// Creates a new empty [`World`]. /// From 9e85a6fd86fa691eb7b6e8069548832f262a4462 Mon Sep 17 00:00:00 2001 From: pablo-lua Date: Sat, 28 Sep 2024 19:50:19 -0300 Subject: [PATCH 2/4] [fix] Add fixing ; --- crates/bevy_ecs/src/world/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_ecs/src/world/mod.rs b/crates/bevy_ecs/src/world/mod.rs index c7139f90b86c8..c058551783f98 100644 --- a/crates/bevy_ecs/src/world/mod.rs +++ b/crates/bevy_ecs/src/world/mod.rs @@ -176,7 +176,7 @@ impl World { assert_eq!(ON_INSERT, self.register_component::()); assert_eq!(ON_REPLACE, self.register_component::()); assert_eq!(ON_REMOVE, self.register_component::()); - assert_eq!(UNIT, self.init_resource::<()>()) + assert_eq!(UNIT, self.init_resource::<()>()); } /// Creates a new empty [`World`]. /// From afa629a8b7ab3384a0f3ab4764426b373d7344af Mon Sep 17 00:00:00 2001 From: pablo-lua Date: Sat, 28 Sep 2024 19:59:02 -0300 Subject: [PATCH 3/4] [rem] Removed Unit type in World from tests that used iter_resources --- crates/bevy_ecs/src/world/mod.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/bevy_ecs/src/world/mod.rs b/crates/bevy_ecs/src/world/mod.rs index c058551783f98..28a1dd8bc49be 100644 --- a/crates/bevy_ecs/src/world/mod.rs +++ b/crates/bevy_ecs/src/world/mod.rs @@ -3170,6 +3170,9 @@ mod tests { #[test] fn iter_resources() { let mut world = World::new(); + // () is a dummy resource and will be removed for this test. + world.remove_resource::<()>(); + world.insert_resource(TestResource(42)); world.insert_resource(TestResource2("Hello, world!".to_string())); world.insert_resource(TestResource3); @@ -3196,6 +3199,9 @@ mod tests { #[test] fn iter_resources_mut() { let mut world = World::new(); + // () is a dummy resource and will be removed for this test. + world.remove_resource::<()>(); + world.insert_resource(TestResource(42)); world.insert_resource(TestResource2("Hello, world!".to_string())); world.insert_resource(TestResource3); From edad4cc7e33065f9ed63f3c54a070f527e1990e2 Mon Sep 17 00:00:00 2001 From: pablo-lua Date: Sat, 28 Sep 2024 20:39:22 -0300 Subject: [PATCH 4/4] [alt] Changed Approach to only implement Resource, but not use Unit type the other way --- crates/bevy_ecs/src/system/system_param.rs | 2 ++ crates/bevy_ecs/src/world/component_constants.rs | 5 ----- crates/bevy_ecs/src/world/mod.rs | 7 ------- 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/crates/bevy_ecs/src/system/system_param.rs b/crates/bevy_ecs/src/system/system_param.rs index fdcf36a018ba3..25c3100c90747 100644 --- a/crates/bevy_ecs/src/system/system_param.rs +++ b/crates/bevy_ecs/src/system/system_param.rs @@ -724,6 +724,8 @@ impl_param_set!(); )] pub trait Resource: Send + Sync + 'static {} +impl Resource for () {} + // SAFETY: Res only reads a single World resource unsafe impl<'a, T: Resource> ReadOnlySystemParam for Res<'a, T> {} diff --git a/crates/bevy_ecs/src/world/component_constants.rs b/crates/bevy_ecs/src/world/component_constants.rs index 6b279732bace7..ead0e5ac9f676 100644 --- a/crates/bevy_ecs/src/world/component_constants.rs +++ b/crates/bevy_ecs/src/world/component_constants.rs @@ -14,9 +14,6 @@ pub const ON_REPLACE: ComponentId = ComponentId::new(2); /// [`ComponentId`] for [`OnRemove`] pub const ON_REMOVE: ComponentId = ComponentId::new(3); -/// [`ComponentId`] for [`()`] as a [`Resource`] -pub const UNIT: ComponentId = ComponentId::new(4); - /// Trigger emitted when a component is added to an entity. See [`crate::component::ComponentHooks::on_add`] /// for more information. #[derive(Event, Debug)] @@ -44,5 +41,3 @@ pub struct OnReplace; #[cfg_attr(feature = "bevy_reflect", derive(Reflect))] #[cfg_attr(feature = "bevy_reflect", reflect(Debug))] pub struct OnRemove; - -impl Resource for () {} diff --git a/crates/bevy_ecs/src/world/mod.rs b/crates/bevy_ecs/src/world/mod.rs index 28a1dd8bc49be..80a05e2a18f76 100644 --- a/crates/bevy_ecs/src/world/mod.rs +++ b/crates/bevy_ecs/src/world/mod.rs @@ -176,7 +176,6 @@ impl World { assert_eq!(ON_INSERT, self.register_component::()); assert_eq!(ON_REPLACE, self.register_component::()); assert_eq!(ON_REMOVE, self.register_component::()); - assert_eq!(UNIT, self.init_resource::<()>()); } /// Creates a new empty [`World`]. /// @@ -3170,9 +3169,6 @@ mod tests { #[test] fn iter_resources() { let mut world = World::new(); - // () is a dummy resource and will be removed for this test. - world.remove_resource::<()>(); - world.insert_resource(TestResource(42)); world.insert_resource(TestResource2("Hello, world!".to_string())); world.insert_resource(TestResource3); @@ -3199,9 +3195,6 @@ mod tests { #[test] fn iter_resources_mut() { let mut world = World::new(); - // () is a dummy resource and will be removed for this test. - world.remove_resource::<()>(); - world.insert_resource(TestResource(42)); world.insert_resource(TestResource2("Hello, world!".to_string())); world.insert_resource(TestResource3);