Skip to content

Commit 07c9760

Browse files
committed
Add AppTypeRegistry Resource to bevy_app
1 parent 45c7543 commit 07c9760

File tree

5 files changed

+17
-12
lines changed

5 files changed

+17
-12
lines changed

crates/bevy_app/src/app.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::{CoreStage, Plugin, PluginGroup, PluginGroupBuilder, StartupSchedule, StartupStage};
22
pub use bevy_derive::AppLabel;
3+
use bevy_derive::{Deref, DerefMut};
34
use bevy_ecs::{
45
event::{Event, Events},
56
prelude::{FromWorld, IntoExclusiveSystem},
@@ -22,6 +23,11 @@ bevy_utils::define_label!(
2223
AppLabelId,
2324
);
2425

26+
/// The [`Resource`] that stores the [`App`]'s [`TypeRegistry`](bevy_reflect::TypeRegistry).
27+
#[cfg(feature = "bevy_reflect")]
28+
#[derive(Resource, Clone, Deref, DerefMut, Default)]
29+
pub struct AppTypeRegistry(pub bevy_reflect::TypeRegistryArc);
30+
2531
#[allow(clippy::needless_doctest_main)]
2632
/// A container of app logic and data.
2733
///
@@ -74,7 +80,7 @@ impl Default for App {
7480
fn default() -> Self {
7581
let mut app = App::empty();
7682
#[cfg(feature = "bevy_reflect")]
77-
app.init_resource::<bevy_reflect::TypeRegistryArc>();
83+
app.init_resource::<AppTypeRegistry>();
7884

7985
app.add_default_stages()
8086
.add_event::<AppExit>()
@@ -878,7 +884,7 @@ impl App {
878884
#[cfg(feature = "bevy_reflect")]
879885
pub fn register_type<T: bevy_reflect::GetTypeRegistration>(&mut self) -> &mut Self {
880886
{
881-
let registry = self.world.resource_mut::<bevy_reflect::TypeRegistryArc>();
887+
let registry = self.world.resource_mut::<AppTypeRegistry>();
882888
registry.write().register::<T>();
883889
}
884890
self
@@ -911,7 +917,7 @@ impl App {
911917
&mut self,
912918
) -> &mut Self {
913919
{
914-
let registry = self.world.resource_mut::<bevy_reflect::TypeRegistryArc>();
920+
let registry = self.world.resource_mut::<AppTypeRegistry>();
915921
registry.write().register_type_data::<T, D>();
916922
}
917923
self

crates/bevy_ecs/src/reflect.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::{
99
};
1010
use bevy_reflect::{
1111
impl_from_reflect_value, impl_reflect_value, FromType, Reflect, ReflectDeserialize,
12-
ReflectSerialize, TypeRegistryArc,
12+
ReflectSerialize,
1313
};
1414

1515
/// A struct used to operate on reflected [`Component`] of a type.
@@ -316,6 +316,3 @@ impl<C: Component + MapEntities> FromType<C> for ReflectMapEntities {
316316
}
317317
}
318318
}
319-
320-
// We cannot implement this in bevy_reflect, or we would create a cyclic dependendency
321-
impl Resource for TypeRegistryArc {}

crates/bevy_scene/src/dynamic_scene.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::{serde::SceneSerializer, Scene, SceneSpawnError};
22
use anyhow::Result;
3+
use bevy_app::AppTypeRegistry;
34
use bevy_ecs::{
45
entity::EntityMap,
56
reflect::{ReflectComponent, ReflectMapEntities},
@@ -84,7 +85,7 @@ impl DynamicScene {
8485
world: &mut World,
8586
entity_map: &mut EntityMap,
8687
) -> Result<(), SceneSpawnError> {
87-
let registry = world.resource::<TypeRegistryArc>().clone();
88+
let registry = world.resource::<AppTypeRegistry>().clone();
8889
let type_registry = registry.read();
8990

9091
for scene_entity in &self.entities {

crates/bevy_scene/src/scene_loader.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::serde::SceneDeserializer;
22
use anyhow::Result;
3+
use bevy_app::AppTypeRegistry;
34
use bevy_asset::{AssetLoader, LoadContext, LoadedAsset};
45
use bevy_ecs::world::{FromWorld, World};
56
use bevy_reflect::TypeRegistryArc;
@@ -13,9 +14,9 @@ pub struct SceneLoader {
1314

1415
impl FromWorld for SceneLoader {
1516
fn from_world(world: &mut World) -> Self {
16-
let type_registry = world.resource::<TypeRegistryArc>();
17+
let type_registry = world.resource::<AppTypeRegistry>();
1718
SceneLoader {
18-
type_registry: (*type_registry).clone(),
19+
type_registry: type_registry.0.clone(),
1920
}
2021
}
2122
}

crates/bevy_scene/src/scene_spawner.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::{DynamicScene, Scene};
2+
use bevy_app::AppTypeRegistry;
23
use bevy_asset::{AssetEvent, Assets, Handle};
34
use bevy_ecs::{
45
entity::{Entity, EntityMap},
@@ -8,7 +9,6 @@ use bevy_ecs::{
89
world::{Mut, World},
910
};
1011
use bevy_hierarchy::{AddChild, Parent};
11-
use bevy_reflect::TypeRegistryArc;
1212
use bevy_utils::{tracing::error, HashMap};
1313
use thiserror::Error;
1414
use uuid::Uuid;
@@ -164,7 +164,7 @@ impl SceneSpawner {
164164
let mut instance_info = InstanceInfo {
165165
entity_map: EntityMap::default(),
166166
};
167-
let type_registry = world.resource::<TypeRegistryArc>().clone();
167+
let type_registry = world.resource::<AppTypeRegistry>().clone();
168168
let type_registry = type_registry.read();
169169
world.resource_scope(|world, scenes: Mut<Assets<Scene>>| {
170170
let scene =

0 commit comments

Comments
 (0)