Skip to content

Commit

Permalink
Add AppTypeRegistry Resource to bevy_app
Browse files Browse the repository at this point in the history
  • Loading branch information
irate-devil committed Aug 5, 2022
1 parent 3bcfbb2 commit c999eea
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 12 deletions.
12 changes: 9 additions & 3 deletions crates/bevy_app/src/app.rs
@@ -1,5 +1,6 @@
use crate::{CoreStage, Plugin, PluginGroup, PluginGroupBuilder, StartupSchedule, StartupStage};
pub use bevy_derive::AppLabel;
use bevy_derive::{Deref, DerefMut};
use bevy_ecs::{
event::{Event, Events},
prelude::{FromWorld, IntoExclusiveSystem},
Expand All @@ -22,6 +23,11 @@ bevy_utils::define_label!(
AppLabelId,
);

/// The [`Resource`] that stores the [`App`]'s [`TypeRegistry`](bevy_reflect::TypeRegistry).
#[cfg(feature = "bevy_reflect")]
#[derive(Resource, Clone, Deref, DerefMut, Default)]
pub struct AppTypeRegistry(pub bevy_reflect::TypeRegistryArc);

#[allow(clippy::needless_doctest_main)]
/// A container of app logic and data.
///
Expand Down Expand Up @@ -74,7 +80,7 @@ impl Default for App {
fn default() -> Self {
let mut app = App::empty();
#[cfg(feature = "bevy_reflect")]
app.init_resource::<bevy_reflect::TypeRegistryArc>();
app.init_resource::<AppTypeRegistry>();

app.add_default_stages()
.add_event::<AppExit>()
Expand Down Expand Up @@ -878,7 +884,7 @@ impl App {
#[cfg(feature = "bevy_reflect")]
pub fn register_type<T: bevy_reflect::GetTypeRegistration>(&mut self) -> &mut Self {
{
let registry = self.world.resource_mut::<bevy_reflect::TypeRegistryArc>();
let registry = self.world.resource_mut::<AppTypeRegistry>();
registry.write().register::<T>();
}
self
Expand Down Expand Up @@ -911,7 +917,7 @@ impl App {
&mut self,
) -> &mut Self {
{
let registry = self.world.resource_mut::<bevy_reflect::TypeRegistryArc>();
let registry = self.world.resource_mut::<AppTypeRegistry>();
registry.write().register_type_data::<T, D>();
}
self
Expand Down
5 changes: 1 addition & 4 deletions crates/bevy_ecs/src/reflect.rs
Expand Up @@ -9,7 +9,7 @@ use crate::{
};
use bevy_reflect::{
impl_from_reflect_value, impl_reflect_value, FromType, Reflect, ReflectDeserialize,
ReflectSerialize, TypeRegistryArc,
ReflectSerialize,
};

/// A struct used to operate on reflected [`Component`] of a type.
Expand Down Expand Up @@ -316,6 +316,3 @@ impl<C: Component + MapEntities> FromType<C> for ReflectMapEntities {
}
}
}

// We cannot implement this in bevy_reflect, or we would create a cyclic dependendency
impl Resource for TypeRegistryArc {}
3 changes: 2 additions & 1 deletion crates/bevy_scene/src/dynamic_scene.rs
@@ -1,5 +1,6 @@
use crate::{serde::SceneSerializer, Scene, SceneSpawnError};
use anyhow::Result;
use bevy_app::AppTypeRegistry;
use bevy_ecs::{
entity::EntityMap,
reflect::{ReflectComponent, ReflectMapEntities},
Expand Down Expand Up @@ -84,7 +85,7 @@ impl DynamicScene {
world: &mut World,
entity_map: &mut EntityMap,
) -> Result<(), SceneSpawnError> {
let registry = world.resource::<TypeRegistryArc>().clone();
let registry = world.resource::<AppTypeRegistry>().clone();
let type_registry = registry.read();

for scene_entity in &self.entities {
Expand Down
5 changes: 3 additions & 2 deletions crates/bevy_scene/src/scene_loader.rs
@@ -1,5 +1,6 @@
use crate::serde::SceneDeserializer;
use anyhow::Result;
use bevy_app::AppTypeRegistry;
use bevy_asset::{AssetLoader, LoadContext, LoadedAsset};
use bevy_ecs::world::{FromWorld, World};
use bevy_reflect::TypeRegistryArc;
Expand All @@ -13,9 +14,9 @@ pub struct SceneLoader {

impl FromWorld for SceneLoader {
fn from_world(world: &mut World) -> Self {
let type_registry = world.resource::<TypeRegistryArc>();
let type_registry = world.resource::<AppTypeRegistry>();
SceneLoader {
type_registry: (*type_registry).clone(),
type_registry: type_registry.0.clone(),
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions crates/bevy_scene/src/scene_spawner.rs
@@ -1,4 +1,5 @@
use crate::{DynamicScene, Scene};
use bevy_app::AppTypeRegistry;
use bevy_asset::{AssetEvent, Assets, Handle};
use bevy_ecs::{
entity::{Entity, EntityMap},
Expand All @@ -8,7 +9,6 @@ use bevy_ecs::{
world::{Mut, World},
};
use bevy_hierarchy::{AddChild, Parent};
use bevy_reflect::TypeRegistryArc;
use bevy_utils::{tracing::error, HashMap};
use thiserror::Error;
use uuid::Uuid;
Expand Down Expand Up @@ -164,7 +164,7 @@ impl SceneSpawner {
let mut instance_info = InstanceInfo {
entity_map: EntityMap::default(),
};
let type_registry = world.resource::<TypeRegistryArc>().clone();
let type_registry = world.resource::<AppTypeRegistry>().clone();
let type_registry = type_registry.read();
world.resource_scope(|world, scenes: Mut<Assets<Scene>>| {
let scene =
Expand Down

0 comments on commit c999eea

Please sign in to comment.