From 029de16001c149183e5c55fd864bfe3306d02ab6 Mon Sep 17 00:00:00 2001 From: Carter Anderson Date: Wed, 2 Dec 2020 20:19:00 -0800 Subject: [PATCH] fix scene loading --- crates/bevy_asset/src/assets.rs | 2 + crates/bevy_asset/src/handle.rs | 53 ++++++++++--------- crates/bevy_audio/src/audio.rs | 10 ++-- crates/bevy_core/src/label.rs | 3 +- crates/bevy_pbr/src/entity.rs | 2 +- .../src/render_graph/forward_pipeline/mod.rs | 6 +-- crates/bevy_render/src/camera/camera.rs | 3 +- crates/bevy_render/src/camera/projection.rs | 4 +- .../src/camera/visible_entities.rs | 3 +- crates/bevy_render/src/draw.rs | 3 +- .../src/pipeline/render_pipelines.rs | 3 +- crates/bevy_render/src/render_graph/base.rs | 3 +- crates/bevy_scene/src/scene_spawner.rs | 37 ++++++++----- crates/bevy_sprite/src/entity.rs | 8 +-- crates/bevy_sprite/src/lib.rs | 5 +- crates/bevy_sprite/src/render/mod.rs | 10 ++-- crates/bevy_text/src/draw.rs | 13 +++-- .../bevy_transform/src/components/children.rs | 4 +- .../src/components/global_transform.rs | 3 +- .../bevy_transform/src/components/parent.rs | 6 +-- crates/bevy_ui/src/entity.rs | 12 ++--- crates/bevy_ui/src/render/mod.rs | 6 +-- 22 files changed, 116 insertions(+), 83 deletions(-) diff --git a/crates/bevy_asset/src/assets.rs b/crates/bevy_asset/src/assets.rs index 83cbeccc9433d..42f3a086fceed 100644 --- a/crates/bevy_asset/src/assets.rs +++ b/crates/bevy_asset/src/assets.rs @@ -3,6 +3,7 @@ use crate::{ }; use bevy_app::{prelude::Events, AppBuilder}; use bevy_ecs::{FromResources, ResMut}; +use bevy_reflect::RegisterTypeBuilder; use bevy_utils::HashMap; use crossbeam_channel::Sender; use std::fmt::Debug; @@ -219,6 +220,7 @@ impl AddAsset for AppBuilder { self.add_resource(assets) .add_system_to_stage(super::stage::ASSET_EVENTS, Assets::::asset_event_system) .add_system_to_stage(crate::stage::LOAD_ASSETS, update_asset_storage_system::) + .register_type::>() .add_event::>() } diff --git a/crates/bevy_asset/src/handle.rs b/crates/bevy_asset/src/handle.rs index 491d33831480c..ad39e3438a69b 100644 --- a/crates/bevy_asset/src/handle.rs +++ b/crates/bevy_asset/src/handle.rs @@ -9,7 +9,7 @@ use crate::{ path::{AssetPath, AssetPathId}, Asset, Assets, }; -use bevy_reflect::{Reflect, ReflectDeserialize}; +use bevy_reflect::{Reflect, ReflectComponent, ReflectDeserialize}; use bevy_utils::Uuid; use crossbeam_channel::{Receiver, Sender}; use serde::{Deserialize, Serialize}; @@ -57,9 +57,10 @@ impl HandleId { /// /// Handles contain a unique id that corresponds to a specific asset in the [Assets](crate::Assets) collection. #[derive(Reflect)] +#[reflect(Component)] pub struct Handle where - T: 'static, + T: Asset, { pub id: HandleId, #[reflect(ignore)] @@ -82,17 +83,6 @@ impl Debug for HandleType { } } -impl Handle { - // TODO: remove "uuid" parameter whenever rust support type constraints in const fns - pub const fn weak_from_u64(uuid: Uuid, id: u64) -> Self { - Self { - id: HandleId::new(uuid, id), - handle_type: HandleType::Weak, - marker: PhantomData, - } - } -} - impl Handle { pub(crate) fn strong(id: HandleId, ref_change_sender: Sender) -> Self { ref_change_sender.send(RefChange::Increment(id)).unwrap(); @@ -111,7 +101,7 @@ impl Handle { } } - pub fn as_weak(&self) -> Handle { + pub fn as_weak(&self) -> Handle { Handle { id: self.id, handle_type: HandleType::Weak, @@ -152,7 +142,7 @@ impl Handle { } } -impl Drop for Handle { +impl Drop for Handle { fn drop(&mut self) { match self.handle_type { HandleType::Strong(ref sender) => { @@ -164,45 +154,51 @@ impl Drop for Handle { } } -impl From> for HandleId { +impl From> for HandleId { fn from(value: Handle) -> Self { value.id } } +impl From for HandleId { + fn from(value: HandleUntyped) -> Self { + value.id + } +} + impl From<&str> for HandleId { fn from(value: &str) -> Self { AssetPathId::from(value).into() } } -impl From<&Handle> for HandleId { +impl From<&Handle> for HandleId { fn from(value: &Handle) -> Self { value.id } } -impl Hash for Handle { +impl Hash for Handle { fn hash(&self, state: &mut H) { Hash::hash(&self.id, state); } } -impl PartialEq for Handle { +impl PartialEq for Handle { fn eq(&self, other: &Self) -> bool { self.id == other.id } } -impl Eq for Handle {} +impl Eq for Handle {} -impl PartialOrd for Handle { +impl PartialOrd for Handle { fn partial_cmp(&self, other: &Self) -> Option { Some(self.id.cmp(&other.id)) } } -impl Ord for Handle { +impl Ord for Handle { fn cmp(&self, other: &Self) -> Ordering { self.id.cmp(&other.id) } @@ -214,7 +210,7 @@ impl Default for Handle { } } -impl Debug for Handle { +impl Debug for Handle { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> { let name = std::any::type_name::().split("::").last().unwrap(); write!(f, "{:?}Handle<{}>({:?})", self.handle_type, name, self.id) @@ -231,8 +227,8 @@ impl Clone for Handle { } // SAFE: T is phantom data and Handle::id is an integer -unsafe impl Send for Handle {} -unsafe impl Sync for Handle {} +unsafe impl Send for Handle {} +unsafe impl Sync for Handle {} /// A non-generic version of [Handle] /// @@ -244,6 +240,13 @@ pub struct HandleUntyped { } impl HandleUntyped { + pub const fn weak_from_u64(uuid: Uuid, id: u64) -> Self { + Self { + id: HandleId::new(uuid, id), + handle_type: HandleType::Weak, + } + } + pub(crate) fn strong(id: HandleId, ref_change_sender: Sender) -> Self { ref_change_sender.send(RefChange::Increment(id)).unwrap(); Self { diff --git a/crates/bevy_audio/src/audio.rs b/crates/bevy_audio/src/audio.rs index 0c6d0ef80e6be..7a7fe12b3f99f 100644 --- a/crates/bevy_audio/src/audio.rs +++ b/crates/bevy_audio/src/audio.rs @@ -1,17 +1,17 @@ use crate::{AudioSource, Decodable}; -use bevy_asset::Handle; +use bevy_asset::{Asset, Handle}; use parking_lot::RwLock; use std::{collections::VecDeque, fmt}; /// The external struct used to play audio pub struct Audio

where - P: Decodable, + P: Asset + Decodable, { pub queue: RwLock>>, } -impl

fmt::Debug for Audio

+impl fmt::Debug for Audio

where P: Decodable, { @@ -22,7 +22,7 @@ where impl

Default for Audio

where - P: Decodable, + P: Asset + Decodable, { fn default() -> Self { Self { @@ -33,7 +33,7 @@ where impl

Audio

where - P: Decodable, + P: Asset + Decodable,

::Decoder: rodio::Source + Send + Sync, <

::Decoder as Iterator>::Item: rodio::Sample + Send + Sync, { diff --git a/crates/bevy_core/src/label.rs b/crates/bevy_core/src/label.rs index ebcceb490bc1e..26309477e7843 100644 --- a/crates/bevy_core/src/label.rs +++ b/crates/bevy_core/src/label.rs @@ -1,5 +1,5 @@ use bevy_ecs::prelude::*; -use bevy_reflect::Reflect; +use bevy_reflect::{Reflect, ReflectComponent}; use bevy_utils::{HashMap, HashSet}; use std::{ borrow::Cow, @@ -9,6 +9,7 @@ use std::{ /// A collection of labels #[derive(Default, Reflect)] +#[reflect(Component)] pub struct Labels { labels: HashSet>, } diff --git a/crates/bevy_pbr/src/entity.rs b/crates/bevy_pbr/src/entity.rs index 4c355e90b2d89..c3dde08d8bf44 100644 --- a/crates/bevy_pbr/src/entity.rs +++ b/crates/bevy_pbr/src/entity.rs @@ -25,7 +25,7 @@ impl Default for PbrBundle { fn default() -> Self { Self { render_pipelines: RenderPipelines::from_pipelines(vec![RenderPipeline::new( - FORWARD_PIPELINE_HANDLE, + FORWARD_PIPELINE_HANDLE.typed(), )]), mesh: Default::default(), material: Default::default(), diff --git a/crates/bevy_pbr/src/render_graph/forward_pipeline/mod.rs b/crates/bevy_pbr/src/render_graph/forward_pipeline/mod.rs index b8dbd80204bb0..8a3c17e6e1718 100644 --- a/crates/bevy_pbr/src/render_graph/forward_pipeline/mod.rs +++ b/crates/bevy_pbr/src/render_graph/forward_pipeline/mod.rs @@ -1,4 +1,4 @@ -use bevy_asset::{Assets, Handle}; +use bevy_asset::{Assets, HandleUntyped}; use bevy_reflect::TypeUuid; use bevy_render::{ pipeline::{ @@ -10,8 +10,8 @@ use bevy_render::{ texture::TextureFormat, }; -pub const FORWARD_PIPELINE_HANDLE: Handle = - Handle::weak_from_u64(PipelineDescriptor::TYPE_UUID, 13148362314012771389); +pub const FORWARD_PIPELINE_HANDLE: HandleUntyped = + HandleUntyped::weak_from_u64(PipelineDescriptor::TYPE_UUID, 13148362314012771389); pub(crate) fn build_forward_pipeline(shaders: &mut Assets) -> PipelineDescriptor { PipelineDescriptor { diff --git a/crates/bevy_render/src/camera/camera.rs b/crates/bevy_render/src/camera/camera.rs index 0818b18d40c1e..98ddfd64bf4dd 100644 --- a/crates/bevy_render/src/camera/camera.rs +++ b/crates/bevy_render/src/camera/camera.rs @@ -2,10 +2,11 @@ use super::CameraProjection; use bevy_app::prelude::{EventReader, Events}; use bevy_ecs::{Added, Component, Entity, Local, Query, QuerySet, Res}; use bevy_math::Mat4; -use bevy_reflect::Reflect; +use bevy_reflect::{Reflect, ReflectComponent}; use bevy_window::{WindowCreated, WindowId, WindowResized, Windows}; #[derive(Default, Debug, Reflect)] +#[reflect(Component)] pub struct Camera { pub projection_matrix: Mat4, pub name: Option, diff --git a/crates/bevy_render/src/camera/projection.rs b/crates/bevy_render/src/camera/projection.rs index 22996001eb75d..b213f49b81dcc 100644 --- a/crates/bevy_render/src/camera/projection.rs +++ b/crates/bevy_render/src/camera/projection.rs @@ -1,6 +1,6 @@ use super::DepthCalculation; use bevy_math::Mat4; -use bevy_reflect::{Reflect, ReflectDeserialize}; +use bevy_reflect::{Reflect, ReflectComponent, ReflectDeserialize}; use serde::{Deserialize, Serialize}; pub trait CameraProjection { @@ -10,6 +10,7 @@ pub trait CameraProjection { } #[derive(Debug, Clone, Reflect)] +#[reflect(Component)] pub struct PerspectiveProjection { pub fov: f32, pub aspect_ratio: f32, @@ -51,6 +52,7 @@ pub enum WindowOrigin { } #[derive(Debug, Clone, Reflect)] +#[reflect(Component)] pub struct OrthographicProjection { pub left: f32, pub right: f32, diff --git a/crates/bevy_render/src/camera/visible_entities.rs b/crates/bevy_render/src/camera/visible_entities.rs index 2daf62a29ba50..132e0fd9d7f8b 100644 --- a/crates/bevy_render/src/camera/visible_entities.rs +++ b/crates/bevy_render/src/camera/visible_entities.rs @@ -2,7 +2,7 @@ use super::{Camera, DepthCalculation}; use crate::Draw; use bevy_core::FloatOrd; use bevy_ecs::{Entity, Query, With}; -use bevy_reflect::Reflect; +use bevy_reflect::{Reflect, ReflectComponent}; use bevy_transform::prelude::GlobalTransform; #[derive(Debug)] @@ -12,6 +12,7 @@ pub struct VisibleEntity { } #[derive(Default, Debug, Reflect)] +#[reflect(Component)] pub struct VisibleEntities { #[reflect(ignore)] pub value: Vec, diff --git a/crates/bevy_render/src/draw.rs b/crates/bevy_render/src/draw.rs index eb94cfb4e282e..fbda6c4d13c3d 100644 --- a/crates/bevy_render/src/draw.rs +++ b/crates/bevy_render/src/draw.rs @@ -8,7 +8,7 @@ use crate::{ }; use bevy_asset::{Assets, Handle}; use bevy_ecs::{Query, Res, ResMut, SystemParam}; -use bevy_reflect::Reflect; +use bevy_reflect::{Reflect, ReflectComponent}; use std::{ops::Range, sync::Arc}; use thiserror::Error; @@ -45,6 +45,7 @@ pub enum RenderCommand { /// A component that indicates how to draw an entity. #[derive(Debug, Clone, Reflect)] +#[reflect(Component)] pub struct Draw { pub is_visible: bool, pub is_transparent: bool, diff --git a/crates/bevy_render/src/pipeline/render_pipelines.rs b/crates/bevy_render/src/pipeline/render_pipelines.rs index dc7597101f4fb..562207959935c 100644 --- a/crates/bevy_render/src/pipeline/render_pipelines.rs +++ b/crates/bevy_render/src/pipeline/render_pipelines.rs @@ -7,7 +7,7 @@ use crate::{ }; use bevy_asset::{Assets, Handle}; use bevy_ecs::{Query, Res, ResMut}; -use bevy_reflect::Reflect; +use bevy_reflect::{Reflect, ReflectComponent}; use bevy_utils::HashSet; #[derive(Debug, Default, Clone, Reflect)] @@ -40,6 +40,7 @@ impl RenderPipeline { } #[derive(Debug, Clone, Reflect)] +#[reflect(Component)] pub struct RenderPipelines { pub pipelines: Vec, #[reflect(ignore)] diff --git a/crates/bevy_render/src/render_graph/base.rs b/crates/bevy_render/src/render_graph/base.rs index e112181ca8ad3..fd787ef52bedf 100644 --- a/crates/bevy_render/src/render_graph/base.rs +++ b/crates/bevy_render/src/render_graph/base.rs @@ -10,11 +10,12 @@ use crate::{ texture::{Extent3d, TextureDescriptor, TextureDimension, TextureFormat, TextureUsage}, Color, }; -use bevy_reflect::Reflect; +use bevy_reflect::{Reflect, ReflectComponent}; use bevy_window::WindowId; /// A component that indicates that an entity should be drawn in the "main pass" #[derive(Default, Reflect)] +#[reflect(Component)] pub struct MainPass; #[derive(Debug)] diff --git a/crates/bevy_scene/src/scene_spawner.rs b/crates/bevy_scene/src/scene_spawner.rs index b25f50a9044a8..05f5175b88727 100644 --- a/crates/bevy_scene/src/scene_spawner.rs +++ b/crates/bevy_scene/src/scene_spawner.rs @@ -34,8 +34,10 @@ pub struct SceneSpawner { #[derive(Error, Debug)] pub enum SceneSpawnError { - #[error("scene contains an unregistered component")] + #[error("scene contains the unregistered component `{type_name}`. consider adding `#[reflect(Component)]` to your type")] UnregisteredComponent { type_name: String }, + #[error("scene contains the unregistered type `{type_name}`. consider registering the type using `app.register_type::()`")] + UnregisteredType { type_name: String }, #[error("scene does not exist")] NonExistentScene { handle: Handle }, #[error("scene does not exist")] @@ -118,7 +120,7 @@ impl SceneSpawner { for component in scene_entity.components.iter() { let registration = type_registry .get_with_name(component.type_name()) - .ok_or_else(|| SceneSpawnError::UnregisteredComponent { + .ok_or_else(|| SceneSpawnError::UnregisteredType { type_name: component.type_name().to_string(), })?; let reflect_component = @@ -166,17 +168,24 @@ impl SceneSpawner { .entry(*scene_entity) .or_insert_with(|| world.reserve_entity()); for type_info in archetype.types() { - if let Some(registration) = type_registry.get(type_info.id()) { - if let Some(component_reflect) = registration.data::() { - component_reflect.copy_component( - &scene.world, - world, - resources, - *scene_entity, - entity, - ); + let registration = type_registry.get(type_info.id()).ok_or_else(|| { + SceneSpawnError::UnregisteredType { + type_name: type_info.type_name().to_string(), } - } + })?; + let reflect_component = + registration.data::().ok_or_else(|| { + SceneSpawnError::UnregisteredComponent { + type_name: registration.name().to_string(), + } + })?; + reflect_component.copy_component( + &scene.world, + world, + resources, + *scene_entity, + entity, + ); } } } @@ -278,7 +287,9 @@ pub fn scene_spawner_system(world: &mut World, resources: &mut Resources) { } scene_spawner.despawn_queued_scenes(world).unwrap(); - scene_spawner.spawn_queued_scenes(world, resources).unwrap(); + scene_spawner + .spawn_queued_scenes(world, resources) + .unwrap_or_else(|err| panic!("{}", err)); scene_spawner .update_spawned_scenes(world, resources, &updated_spawned_scenes) .unwrap(); diff --git a/crates/bevy_sprite/src/entity.rs b/crates/bevy_sprite/src/entity.rs index ace55688b503a..0a6ce971ebfd8 100644 --- a/crates/bevy_sprite/src/entity.rs +++ b/crates/bevy_sprite/src/entity.rs @@ -27,9 +27,9 @@ pub struct SpriteBundle { impl Default for SpriteBundle { fn default() -> Self { Self { - mesh: QUAD_HANDLE, + mesh: QUAD_HANDLE.typed(), render_pipelines: RenderPipelines::from_pipelines(vec![RenderPipeline::new( - SPRITE_PIPELINE_HANDLE, + SPRITE_PIPELINE_HANDLE.typed(), )]), draw: Draw { is_transparent: true, @@ -65,13 +65,13 @@ impl Default for SpriteSheetBundle { fn default() -> Self { Self { render_pipelines: RenderPipelines::from_pipelines(vec![RenderPipeline::new( - SPRITE_SHEET_PIPELINE_HANDLE, + SPRITE_SHEET_PIPELINE_HANDLE.typed(), )]), draw: Draw { is_transparent: true, ..Default::default() }, - mesh: QUAD_HANDLE, + mesh: QUAD_HANDLE.typed(), main_pass: MainPass, sprite: Default::default(), texture_atlas: Default::default(), diff --git a/crates/bevy_sprite/src/lib.rs b/crates/bevy_sprite/src/lib.rs index ad7cb32df6198..73edcc67dc1b0 100644 --- a/crates/bevy_sprite/src/lib.rs +++ b/crates/bevy_sprite/src/lib.rs @@ -25,7 +25,7 @@ pub mod prelude { } use bevy_app::prelude::*; -use bevy_asset::{AddAsset, Assets, Handle}; +use bevy_asset::{AddAsset, Assets, Handle, HandleUntyped}; use bevy_math::Vec2; use bevy_reflect::{RegisterTypeBuilder, TypeUuid}; use bevy_render::{ @@ -38,7 +38,8 @@ use sprite::sprite_system; #[derive(Default)] pub struct SpritePlugin; -pub const QUAD_HANDLE: Handle = Handle::weak_from_u64(Mesh::TYPE_UUID, 14240461981130137526); +pub const QUAD_HANDLE: HandleUntyped = + HandleUntyped::weak_from_u64(Mesh::TYPE_UUID, 14240461981130137526); impl Plugin for SpritePlugin { fn build(&self, app: &mut AppBuilder) { diff --git a/crates/bevy_sprite/src/render/mod.rs b/crates/bevy_sprite/src/render/mod.rs index 1e248923500a2..221df7cb95091 100644 --- a/crates/bevy_sprite/src/render/mod.rs +++ b/crates/bevy_sprite/src/render/mod.rs @@ -1,5 +1,5 @@ use crate::{ColorMaterial, Sprite, TextureAtlas, TextureAtlasSprite}; -use bevy_asset::{Assets, Handle}; +use bevy_asset::{Assets, HandleUntyped}; use bevy_ecs::Resources; use bevy_reflect::TypeUuid; use bevy_render::{ @@ -13,11 +13,11 @@ use bevy_render::{ texture::TextureFormat, }; -pub const SPRITE_PIPELINE_HANDLE: Handle = - Handle::weak_from_u64(PipelineDescriptor::TYPE_UUID, 2785347840338765446); +pub const SPRITE_PIPELINE_HANDLE: HandleUntyped = + HandleUntyped::weak_from_u64(PipelineDescriptor::TYPE_UUID, 2785347840338765446); -pub const SPRITE_SHEET_PIPELINE_HANDLE: Handle = - Handle::weak_from_u64(PipelineDescriptor::TYPE_UUID, 9016885805180281612); +pub const SPRITE_SHEET_PIPELINE_HANDLE: HandleUntyped = + HandleUntyped::weak_from_u64(PipelineDescriptor::TYPE_UUID, 9016885805180281612); pub fn build_sprite_sheet_pipeline(shaders: &mut Assets) -> PipelineDescriptor { PipelineDescriptor { diff --git a/crates/bevy_text/src/draw.rs b/crates/bevy_text/src/draw.rs index 3af242af91e74..6a12fc01b5960 100644 --- a/crates/bevy_text/src/draw.rs +++ b/crates/bevy_text/src/draw.rs @@ -3,6 +3,7 @@ use bevy_render::{ color::Color, draw::{Draw, DrawContext, DrawError, Drawable}, mesh, + mesh::Mesh, pipeline::{PipelineSpecialization, VertexBufferDescriptor}, prelude::Msaa, renderer::{AssetRenderResourceBindings, BindGroup, RenderResourceBindings, RenderResourceId}, @@ -58,7 +59,7 @@ impl<'a> Drawable for DrawableText<'a> { fn draw(&mut self, draw: &mut Draw, context: &mut DrawContext) -> Result<(), DrawError> { context.set_pipeline( draw, - &bevy_sprite::SPRITE_SHEET_PIPELINE_HANDLE, + &bevy_sprite::SPRITE_SHEET_PIPELINE_HANDLE.typed(), &PipelineSpecialization { sample_count: self.msaa.samples, vertex_buffer_descriptor: self.font_quad_vertex_descriptor.clone(), @@ -69,7 +70,10 @@ impl<'a> Drawable for DrawableText<'a> { let render_resource_context = &**context.render_resource_context; if let Some(RenderResourceId::Buffer(vertex_attribute_buffer_id)) = render_resource_context - .get_asset_resource(&bevy_sprite::QUAD_HANDLE, mesh::VERTEX_ATTRIBUTE_BUFFER_ID) + .get_asset_resource( + &bevy_sprite::QUAD_HANDLE.typed::(), + mesh::VERTEX_ATTRIBUTE_BUFFER_ID, + ) { draw.set_vertex_buffer(0, vertex_attribute_buffer_id, 0); } else { @@ -78,7 +82,10 @@ impl<'a> Drawable for DrawableText<'a> { let mut indices = 0..0; if let Some(RenderResourceId::Buffer(quad_index_buffer)) = render_resource_context - .get_asset_resource(&bevy_sprite::QUAD_HANDLE, mesh::INDEX_BUFFER_ASSET_INDEX) + .get_asset_resource( + &bevy_sprite::QUAD_HANDLE.typed::(), + mesh::INDEX_BUFFER_ASSET_INDEX, + ) { draw.set_index_buffer(quad_index_buffer, 0); if let Some(buffer_info) = render_resource_context.get_buffer_info(quad_index_buffer) { diff --git a/crates/bevy_transform/src/components/children.rs b/crates/bevy_transform/src/components/children.rs index 80c4c85f14531..e3a0c380f68a5 100644 --- a/crates/bevy_transform/src/components/children.rs +++ b/crates/bevy_transform/src/components/children.rs @@ -1,10 +1,10 @@ use bevy_ecs::{Entity, MapEntities}; -use bevy_reflect::{Reflect, ReflectMapEntities}; +use bevy_reflect::{Reflect, ReflectComponent, ReflectMapEntities}; use smallvec::SmallVec; use std::ops::Deref; #[derive(Default, Clone, Debug, Reflect)] -#[reflect(MapEntities)] +#[reflect(Component, MapEntities)] pub struct Children(pub(crate) SmallVec<[Entity; 8]>); impl MapEntities for Children { diff --git a/crates/bevy_transform/src/components/global_transform.rs b/crates/bevy_transform/src/components/global_transform.rs index f900192b2b43d..ad567e3e0e982 100644 --- a/crates/bevy_transform/src/components/global_transform.rs +++ b/crates/bevy_transform/src/components/global_transform.rs @@ -1,9 +1,10 @@ use super::Transform; use bevy_math::{Mat3, Mat4, Quat, Vec3}; -use bevy_reflect::Reflect; +use bevy_reflect::{Reflect, ReflectComponent}; use std::ops::Mul; #[derive(Debug, PartialEq, Clone, Copy, Reflect)] +#[reflect(Component)] pub struct GlobalTransform { pub translation: Vec3, pub rotation: Quat, diff --git a/crates/bevy_transform/src/components/parent.rs b/crates/bevy_transform/src/components/parent.rs index 698e804fa0a10..3379988de426e 100644 --- a/crates/bevy_transform/src/components/parent.rs +++ b/crates/bevy_transform/src/components/parent.rs @@ -1,9 +1,9 @@ use bevy_ecs::{Entity, FromResources, MapEntities}; -use bevy_reflect::{Reflect, ReflectMapEntities}; +use bevy_reflect::{Reflect, ReflectComponent, ReflectMapEntities}; use std::ops::{Deref, DerefMut}; #[derive(Debug, Copy, Clone, Eq, PartialEq, Reflect)] -#[reflect(MapEntities)] +#[reflect(Component, MapEntities)] pub struct Parent(pub Entity); // TODO: We need to impl either FromResources or Default so Parent can be registered as Properties. @@ -41,7 +41,7 @@ impl DerefMut for Parent { } #[derive(Debug, Copy, Clone, Eq, PartialEq, Reflect)] -#[reflect(MapEntities)] +#[reflect(Component, MapEntities)] pub struct PreviousParent(pub(crate) Entity); impl MapEntities for PreviousParent { diff --git a/crates/bevy_ui/src/entity.rs b/crates/bevy_ui/src/entity.rs index 41c01b30e1175..0857a84df7cfe 100644 --- a/crates/bevy_ui/src/entity.rs +++ b/crates/bevy_ui/src/entity.rs @@ -31,9 +31,9 @@ pub struct NodeBundle { impl Default for NodeBundle { fn default() -> Self { NodeBundle { - mesh: QUAD_HANDLE, + mesh: QUAD_HANDLE.typed(), render_pipelines: RenderPipelines::from_pipelines(vec![RenderPipeline::new( - UI_PIPELINE_HANDLE, + UI_PIPELINE_HANDLE.typed(), )]), node: Default::default(), style: Default::default(), @@ -62,9 +62,9 @@ pub struct ImageBundle { impl Default for ImageBundle { fn default() -> Self { ImageBundle { - mesh: QUAD_HANDLE, + mesh: QUAD_HANDLE.typed(), render_pipelines: RenderPipelines::from_pipelines(vec![RenderPipeline::new( - UI_PIPELINE_HANDLE, + UI_PIPELINE_HANDLE.typed(), )]), node: Default::default(), image: Default::default(), @@ -127,9 +127,9 @@ impl Default for ButtonBundle { fn default() -> Self { ButtonBundle { button: Button, - mesh: QUAD_HANDLE, + mesh: QUAD_HANDLE.typed(), render_pipelines: RenderPipelines::from_pipelines(vec![RenderPipeline::new( - UI_PIPELINE_HANDLE, + UI_PIPELINE_HANDLE.typed(), )]), interaction: Default::default(), focus_policy: Default::default(), diff --git a/crates/bevy_ui/src/render/mod.rs b/crates/bevy_ui/src/render/mod.rs index 991f914574e9f..390c2379e562c 100644 --- a/crates/bevy_ui/src/render/mod.rs +++ b/crates/bevy_ui/src/render/mod.rs @@ -1,5 +1,5 @@ use crate::Node; -use bevy_asset::{Assets, Handle}; +use bevy_asset::{Assets, HandleUntyped}; use bevy_ecs::Resources; use bevy_reflect::TypeUuid; use bevy_render::{ @@ -18,8 +18,8 @@ use bevy_render::{ texture::TextureFormat, }; -pub const UI_PIPELINE_HANDLE: Handle = - Handle::weak_from_u64(PipelineDescriptor::TYPE_UUID, 3234320022263993878); +pub const UI_PIPELINE_HANDLE: HandleUntyped = + HandleUntyped::weak_from_u64(PipelineDescriptor::TYPE_UUID, 3234320022263993878); pub fn build_ui_pipeline(shaders: &mut Assets) -> PipelineDescriptor { PipelineDescriptor {