Reflection cleanup (#1536)
This is an effort to provide the correct `#[reflect_value(...)]` attributes where they are needed. Supersedes #1533 and resolves #1528. --- I am working under the following assumptions (thanks to @bjorn3 and @Davier for advice here): - Any `enum` that derives `Reflect` and one or more of { `Serialize`, `Deserialize`, `PartialEq`, `Hash` } needs a `#[reflect_value(...)]` attribute containing the same subset of { `Serialize`, `Deserialize`, `PartialEq`, `Hash` } that is present on the derive. - Same as above for `struct` and `#[reflect(...)]`, respectively. - If a `struct` is used as a component, it should also have `#[reflect(Component)]` - All reflected types should be registered in their plugins I treated the following as components (added `#[reflect(Component)]` if necessary): - `bevy_render` - `struct RenderLayers` - `bevy_transform` - `struct GlobalTransform` - `struct Parent` - `struct Transform` - `bevy_ui` - `struct Style` Not treated as components: - `bevy_math` - `struct Size<T>` - `struct Rect<T>` - Note: The updates for `Size<T>` and `Rect<T>` in `bevy::math::geometry` required using @Davier's suggestion to add `+ PartialEq` to the trait bound. I then registered the specific types used over in `bevy_ui` such as `Size<Val>`, etc. in `bevy_ui`'s plugin, since `bevy::math` does not contain a plugin. - `bevy_render` - `struct Color` - `struct PipelineSpecialization` - `struct ShaderSpecialization` - `enum PrimitiveTopology` - `enum IndexFormat` Not Addressed: - I am not searching for components in Bevy that are _not_ reflected. So if there are components that are not reflected that should be reflected, that will need to be figured out in another PR. - I only added `#[reflect(...)]` or `#[reflect_value(...)]` entries for the set of four traits { `Serialize`, `Deserialize`, `PartialEq`, `Hash` } _if they were derived via `#[derive(...)]`_. I did not look for manual trait implementations of the same set of four, nor did I consider any traits outside the four. Are those other possibilities something that needs to be looked into?
This commit is contained in:
		
							parent
							
								
									514723295e
								
							
						
					
					
						commit
						faeccd7a09
					
				@ -18,6 +18,7 @@ pub mod prelude {
 | 
			
		||||
 | 
			
		||||
use bevy_app::prelude::*;
 | 
			
		||||
use bevy_ecs::{entity::Entity, system::IntoSystem};
 | 
			
		||||
use bevy_utils::HashSet;
 | 
			
		||||
use std::ops::Range;
 | 
			
		||||
 | 
			
		||||
/// Adds core functionality to Apps.
 | 
			
		||||
@ -36,6 +37,8 @@ impl Plugin for CorePlugin {
 | 
			
		||||
        app.init_resource::<Time>()
 | 
			
		||||
            .init_resource::<EntityLabels>()
 | 
			
		||||
            .init_resource::<FixedTimesteps>()
 | 
			
		||||
            .register_type::<HashSet<String>>()
 | 
			
		||||
            .register_type::<Option<String>>()
 | 
			
		||||
            .register_type::<Entity>()
 | 
			
		||||
            .register_type::<Name>()
 | 
			
		||||
            .register_type::<Labels>()
 | 
			
		||||
 | 
			
		||||
@ -4,18 +4,19 @@ use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign};
 | 
			
		||||
 | 
			
		||||
/// A two dimensional "size" as defined by a width and height
 | 
			
		||||
#[derive(Copy, Clone, PartialEq, Debug, Reflect)]
 | 
			
		||||
pub struct Size<T: Reflect = f32> {
 | 
			
		||||
#[reflect(PartialEq)]
 | 
			
		||||
pub struct Size<T: Reflect + PartialEq = f32> {
 | 
			
		||||
    pub width: T,
 | 
			
		||||
    pub height: T,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Reflect> Size<T> {
 | 
			
		||||
impl<T: Reflect + PartialEq> Size<T> {
 | 
			
		||||
    pub fn new(width: T, height: T) -> Self {
 | 
			
		||||
        Size { width, height }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Default + Reflect> Default for Size<T> {
 | 
			
		||||
impl<T: Default + Reflect + PartialEq> Default for Size<T> {
 | 
			
		||||
    fn default() -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            width: Default::default(),
 | 
			
		||||
@ -26,14 +27,15 @@ impl<T: Default + Reflect> Default for Size<T> {
 | 
			
		||||
 | 
			
		||||
/// A rect, as defined by its "side" locations
 | 
			
		||||
#[derive(Copy, Clone, PartialEq, Debug, Reflect)]
 | 
			
		||||
pub struct Rect<T: Reflect> {
 | 
			
		||||
#[reflect(PartialEq)]
 | 
			
		||||
pub struct Rect<T: Reflect + PartialEq> {
 | 
			
		||||
    pub left: T,
 | 
			
		||||
    pub right: T,
 | 
			
		||||
    pub top: T,
 | 
			
		||||
    pub bottom: T,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Reflect> Rect<T> {
 | 
			
		||||
impl<T: Reflect + PartialEq> Rect<T> {
 | 
			
		||||
    pub fn all(value: T) -> Self
 | 
			
		||||
    where
 | 
			
		||||
        T: Clone,
 | 
			
		||||
@ -47,7 +49,7 @@ impl<T: Reflect> Rect<T> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Default + Reflect> Default for Rect<T> {
 | 
			
		||||
impl<T: Default + Reflect + PartialEq> Default for Rect<T> {
 | 
			
		||||
    fn default() -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            left: Default::default(),
 | 
			
		||||
@ -58,7 +60,7 @@ impl<T: Default + Reflect> Default for Rect<T> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Reflect> Add<Vec2> for Size<T>
 | 
			
		||||
impl<T: Reflect + PartialEq> Add<Vec2> for Size<T>
 | 
			
		||||
where
 | 
			
		||||
    T: Add<f32, Output = T>,
 | 
			
		||||
{
 | 
			
		||||
@ -72,7 +74,7 @@ where
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Reflect> AddAssign<Vec2> for Size<T>
 | 
			
		||||
impl<T: Reflect + PartialEq> AddAssign<Vec2> for Size<T>
 | 
			
		||||
where
 | 
			
		||||
    T: AddAssign<f32>,
 | 
			
		||||
{
 | 
			
		||||
@ -82,7 +84,7 @@ where
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Reflect> Sub<Vec2> for Size<T>
 | 
			
		||||
impl<T: Reflect + PartialEq> Sub<Vec2> for Size<T>
 | 
			
		||||
where
 | 
			
		||||
    T: Sub<f32, Output = T>,
 | 
			
		||||
{
 | 
			
		||||
@ -96,7 +98,7 @@ where
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Reflect> SubAssign<Vec2> for Size<T>
 | 
			
		||||
impl<T: Reflect + PartialEq> SubAssign<Vec2> for Size<T>
 | 
			
		||||
where
 | 
			
		||||
    T: SubAssign<f32>,
 | 
			
		||||
{
 | 
			
		||||
@ -106,7 +108,7 @@ where
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Reflect> Mul<f32> for Size<T>
 | 
			
		||||
impl<T: Reflect + PartialEq> Mul<f32> for Size<T>
 | 
			
		||||
where
 | 
			
		||||
    T: Mul<f32, Output = T>,
 | 
			
		||||
{
 | 
			
		||||
@ -120,7 +122,7 @@ where
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Reflect> MulAssign<f32> for Size<T>
 | 
			
		||||
impl<T: Reflect + PartialEq> MulAssign<f32> for Size<T>
 | 
			
		||||
where
 | 
			
		||||
    T: MulAssign<f32>,
 | 
			
		||||
{
 | 
			
		||||
@ -130,7 +132,7 @@ where
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Reflect> Div<f32> for Size<T>
 | 
			
		||||
impl<T: Reflect + PartialEq> Div<f32> for Size<T>
 | 
			
		||||
where
 | 
			
		||||
    T: Div<f32, Output = T>,
 | 
			
		||||
{
 | 
			
		||||
@ -144,7 +146,7 @@ where
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Reflect> DivAssign<f32> for Size<T>
 | 
			
		||||
impl<T: Reflect + PartialEq> DivAssign<f32> for Size<T>
 | 
			
		||||
where
 | 
			
		||||
    T: DivAssign<f32>,
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
use crate::{
 | 
			
		||||
    map_partial_eq, serde::Serializable, DynamicMap, List, ListIter, Map, MapIter, Reflect,
 | 
			
		||||
    ReflectDeserialize, ReflectMut, ReflectRef,
 | 
			
		||||
    map_partial_eq, serde::Serializable, DynamicMap, FromType, GetTypeRegistration, List, ListIter,
 | 
			
		||||
    Map, MapIter, Reflect, ReflectDeserialize, ReflectMut, ReflectRef, TypeRegistration,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use bevy_reflect_derive::impl_reflect_value;
 | 
			
		||||
@ -112,6 +112,14 @@ impl<T: Reflect> Reflect for Vec<T> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T: Reflect + for<'de> Deserialize<'de>> GetTypeRegistration for Vec<T> {
 | 
			
		||||
    fn get_type_registration() -> TypeRegistration {
 | 
			
		||||
        let mut registration = TypeRegistration::of::<Vec<T>>();
 | 
			
		||||
        registration.insert::<ReflectDeserialize>(FromType::<Vec<T>>::from_type());
 | 
			
		||||
        registration
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<K: Reflect + Clone + Eq + Hash, V: Reflect + Clone> Map for HashMap<K, V> {
 | 
			
		||||
    fn get(&self, key: &dyn Reflect) -> Option<&dyn Reflect> {
 | 
			
		||||
        key.downcast_ref::<K>()
 | 
			
		||||
@ -207,6 +215,18 @@ impl<K: Reflect + Clone + Eq + Hash, V: Reflect + Clone> Reflect for HashMap<K,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<K, V> GetTypeRegistration for HashMap<K, V>
 | 
			
		||||
where
 | 
			
		||||
    K: Reflect + Clone + Eq + Hash + for<'de> Deserialize<'de>,
 | 
			
		||||
    V: Reflect + Clone + for<'de> Deserialize<'de>,
 | 
			
		||||
{
 | 
			
		||||
    fn get_type_registration() -> TypeRegistration {
 | 
			
		||||
        let mut registration = TypeRegistration::of::<HashMap<K, V>>();
 | 
			
		||||
        registration.insert::<ReflectDeserialize>(FromType::<HashMap<K, V>>::from_type());
 | 
			
		||||
        registration
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Reflect for Cow<'static, str> {
 | 
			
		||||
    fn type_name(&self) -> &str {
 | 
			
		||||
        std::any::type_name::<Self>()
 | 
			
		||||
@ -266,3 +286,11 @@ impl Reflect for Cow<'static, str> {
 | 
			
		||||
        Some(Serializable::Borrowed(self))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl GetTypeRegistration for Cow<'static, str> {
 | 
			
		||||
    fn get_type_registration() -> TypeRegistration {
 | 
			
		||||
        let mut registration = TypeRegistration::of::<Cow<'static, str>>();
 | 
			
		||||
        registration.insert::<ReflectDeserialize>(FromType::<Cow<'static, str>>::from_type());
 | 
			
		||||
        registration
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -194,6 +194,7 @@ mod tests {
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn reflect_complex_patch() {
 | 
			
		||||
        #[derive(Reflect, Eq, PartialEq, Debug)]
 | 
			
		||||
        #[reflect(PartialEq)]
 | 
			
		||||
        struct Foo {
 | 
			
		||||
            a: u32,
 | 
			
		||||
            #[reflect(ignore)]
 | 
			
		||||
@ -205,6 +206,7 @@ mod tests {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #[derive(Reflect, Eq, PartialEq, Debug)]
 | 
			
		||||
        #[reflect(PartialEq)]
 | 
			
		||||
        struct Bar {
 | 
			
		||||
            x: u32,
 | 
			
		||||
        }
 | 
			
		||||
@ -317,6 +319,7 @@ mod tests {
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn reflect_take() {
 | 
			
		||||
        #[derive(Reflect, Debug, PartialEq)]
 | 
			
		||||
        #[reflect(PartialEq)]
 | 
			
		||||
        struct Bar {
 | 
			
		||||
            x: u32,
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -43,7 +43,7 @@ pub type Layer = u8;
 | 
			
		||||
///
 | 
			
		||||
/// Entities without this component belong to layer `0`.
 | 
			
		||||
#[derive(Copy, Clone, Reflect, PartialEq, Eq, PartialOrd, Ord)]
 | 
			
		||||
#[reflect(Component)]
 | 
			
		||||
#[reflect(Component, PartialEq)]
 | 
			
		||||
pub struct RenderLayers(LayerMask);
 | 
			
		||||
 | 
			
		||||
impl std::fmt::Debug for RenderLayers {
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ use crate::{
 | 
			
		||||
use bevy_asset::Handle;
 | 
			
		||||
use bevy_core::{Byteable, Bytes};
 | 
			
		||||
use bevy_math::{Vec3, Vec4};
 | 
			
		||||
use bevy_reflect::Reflect;
 | 
			
		||||
use bevy_reflect::{Reflect, ReflectDeserialize};
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
use std::ops::{Add, AddAssign, Mul, MulAssign};
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@ use std::ops::{Add, AddAssign, Mul, MulAssign};
 | 
			
		||||
/// RGBA color in the Linear sRGB colorspace (often colloquially referred to as "linear", "RGB", or "linear RGB").
 | 
			
		||||
#[repr(C)]
 | 
			
		||||
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, Reflect)]
 | 
			
		||||
#[reflect(PartialEq, Serialize, Deserialize)]
 | 
			
		||||
pub struct Color {
 | 
			
		||||
    red: f32,
 | 
			
		||||
    green: f32,
 | 
			
		||||
 | 
			
		||||
@ -39,11 +39,12 @@ use bevy_app::prelude::*;
 | 
			
		||||
use bevy_asset::{AddAsset, AssetStage};
 | 
			
		||||
use bevy_ecs::schedule::StageLabel;
 | 
			
		||||
use camera::{
 | 
			
		||||
    ActiveCameras, Camera, OrthographicProjection, PerspectiveProjection, VisibleEntities,
 | 
			
		||||
    ActiveCameras, Camera, DepthCalculation, OrthographicProjection, PerspectiveProjection,
 | 
			
		||||
    RenderLayers, ScalingMode, VisibleEntities, WindowOrigin,
 | 
			
		||||
};
 | 
			
		||||
use pipeline::{
 | 
			
		||||
    IndexFormat, PipelineCompiler, PipelineDescriptor, PipelineSpecialization, PrimitiveTopology,
 | 
			
		||||
    ShaderSpecialization,
 | 
			
		||||
    ShaderSpecialization, VertexBufferLayout,
 | 
			
		||||
};
 | 
			
		||||
use render_graph::{
 | 
			
		||||
    base::{self, BaseRenderGraphConfig, MainPass},
 | 
			
		||||
@ -125,6 +126,7 @@ impl Plugin for RenderPlugin {
 | 
			
		||||
        .add_asset::<Shader>()
 | 
			
		||||
        .add_asset::<PipelineDescriptor>()
 | 
			
		||||
        .register_type::<Camera>()
 | 
			
		||||
        .register_type::<DepthCalculation>()
 | 
			
		||||
        .register_type::<Draw>()
 | 
			
		||||
        .register_type::<Visible>()
 | 
			
		||||
        .register_type::<RenderPipelines>()
 | 
			
		||||
@ -137,6 +139,10 @@ impl Plugin for RenderPlugin {
 | 
			
		||||
        .register_type::<PrimitiveTopology>()
 | 
			
		||||
        .register_type::<IndexFormat>()
 | 
			
		||||
        .register_type::<PipelineSpecialization>()
 | 
			
		||||
        .register_type::<RenderLayers>()
 | 
			
		||||
        .register_type::<ScalingMode>()
 | 
			
		||||
        .register_type::<VertexBufferLayout>()
 | 
			
		||||
        .register_type::<WindowOrigin>()
 | 
			
		||||
        .init_resource::<ClearColor>()
 | 
			
		||||
        .init_resource::<RenderGraph>()
 | 
			
		||||
        .init_resource::<PipelineCompiler>()
 | 
			
		||||
 | 
			
		||||
@ -5,12 +5,13 @@ use crate::{
 | 
			
		||||
    shader::{Shader, ShaderError},
 | 
			
		||||
};
 | 
			
		||||
use bevy_asset::{Assets, Handle};
 | 
			
		||||
use bevy_reflect::Reflect;
 | 
			
		||||
use bevy_reflect::{Reflect, ReflectDeserialize};
 | 
			
		||||
use bevy_utils::{HashMap, HashSet};
 | 
			
		||||
use once_cell::sync::Lazy;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Eq, PartialEq, Debug, Reflect)]
 | 
			
		||||
#[reflect(PartialEq)]
 | 
			
		||||
pub struct PipelineSpecialization {
 | 
			
		||||
    pub shader_specialization: ShaderSpecialization,
 | 
			
		||||
    pub primitive_topology: PrimitiveTopology,
 | 
			
		||||
@ -41,6 +42,7 @@ impl PipelineSpecialization {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Eq, PartialEq, Debug, Default, Reflect, Serialize, Deserialize)]
 | 
			
		||||
#[reflect(PartialEq, Serialize, Deserialize)]
 | 
			
		||||
pub struct ShaderSpecialization {
 | 
			
		||||
    pub shader_defs: HashSet<String>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
use crate::texture::TextureFormat;
 | 
			
		||||
use bevy_reflect::Reflect;
 | 
			
		||||
use bevy_reflect::{Reflect, ReflectDeserialize};
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug)]
 | 
			
		||||
@ -89,6 +89,7 @@ pub enum CompareFunction {
 | 
			
		||||
 | 
			
		||||
/// Describes how the VertexAttributes should be interpreted while rendering
 | 
			
		||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize, Reflect)]
 | 
			
		||||
#[reflect_value(Serialize, Deserialize, PartialEq, Hash)]
 | 
			
		||||
pub enum PrimitiveTopology {
 | 
			
		||||
    PointList = 0,
 | 
			
		||||
    LineList = 1,
 | 
			
		||||
@ -227,6 +228,7 @@ impl Default for BlendOperation {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize, Reflect)]
 | 
			
		||||
#[reflect_value(Hash, PartialEq, Serialize, Deserialize)]
 | 
			
		||||
pub enum IndexFormat {
 | 
			
		||||
    Uint16 = 0,
 | 
			
		||||
    Uint32 = 1,
 | 
			
		||||
 | 
			
		||||
@ -48,6 +48,7 @@ impl Plugin for SpritePlugin {
 | 
			
		||||
        app.add_asset::<ColorMaterial>()
 | 
			
		||||
            .add_asset::<TextureAtlas>()
 | 
			
		||||
            .register_type::<Sprite>()
 | 
			
		||||
            .register_type::<SpriteResizeMode>()
 | 
			
		||||
            .add_system_to_stage(CoreStage::PostUpdate, sprite_system.system())
 | 
			
		||||
            .add_system_to_stage(
 | 
			
		||||
                CoreStage::PostUpdate,
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ use bevy_reflect::Reflect;
 | 
			
		||||
use std::ops::Mul;
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, PartialEq, Clone, Copy, Reflect)]
 | 
			
		||||
#[reflect(Component)]
 | 
			
		||||
#[reflect(Component, PartialEq)]
 | 
			
		||||
pub struct GlobalTransform {
 | 
			
		||||
    pub translation: Vec3,
 | 
			
		||||
    pub rotation: Quat,
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ use bevy_reflect::Reflect;
 | 
			
		||||
use std::ops::{Deref, DerefMut};
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Copy, Clone, Eq, PartialEq, Reflect)]
 | 
			
		||||
#[reflect(Component, MapEntities)]
 | 
			
		||||
#[reflect(Component, MapEntities, PartialEq)]
 | 
			
		||||
pub struct Parent(pub Entity);
 | 
			
		||||
 | 
			
		||||
// TODO: We need to impl either FromWorld or Default so Parent can be registered as Properties.
 | 
			
		||||
@ -42,7 +42,7 @@ impl DerefMut for Parent {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Copy, Clone, Eq, PartialEq, Reflect)]
 | 
			
		||||
#[reflect(Component, MapEntities)]
 | 
			
		||||
#[reflect(Component, MapEntities, PartialEq)]
 | 
			
		||||
pub struct PreviousParent(pub(crate) Entity);
 | 
			
		||||
 | 
			
		||||
impl MapEntities for PreviousParent {
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ use bevy_reflect::Reflect;
 | 
			
		||||
use std::ops::Mul;
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, PartialEq, Clone, Copy, Reflect)]
 | 
			
		||||
#[reflect(Component)]
 | 
			
		||||
#[reflect(Component, PartialEq)]
 | 
			
		||||
pub struct Transform {
 | 
			
		||||
    pub translation: Vec3,
 | 
			
		||||
    pub rotation: Quat,
 | 
			
		||||
 | 
			
		||||
@ -9,6 +9,7 @@ pub mod update;
 | 
			
		||||
pub mod widget;
 | 
			
		||||
 | 
			
		||||
pub use anchors::*;
 | 
			
		||||
use bevy_math::{Rect, Size};
 | 
			
		||||
use bevy_render::RenderStage;
 | 
			
		||||
pub use flex::*;
 | 
			
		||||
pub use focus::*;
 | 
			
		||||
@ -47,6 +48,21 @@ pub mod system {
 | 
			
		||||
impl Plugin for UiPlugin {
 | 
			
		||||
    fn build(&self, app: &mut AppBuilder) {
 | 
			
		||||
        app.init_resource::<FlexSurface>()
 | 
			
		||||
            .register_type::<AlignContent>()
 | 
			
		||||
            .register_type::<AlignItems>()
 | 
			
		||||
            .register_type::<AlignSelf>()
 | 
			
		||||
            .register_type::<Direction>()
 | 
			
		||||
            .register_type::<Display>()
 | 
			
		||||
            .register_type::<FlexDirection>()
 | 
			
		||||
            .register_type::<FlexWrap>()
 | 
			
		||||
            .register_type::<JustifyContent>()
 | 
			
		||||
            .register_type::<Node>()
 | 
			
		||||
            .register_type::<PositionType>()
 | 
			
		||||
            .register_type::<Size<f32>>()
 | 
			
		||||
            .register_type::<Size<Val>>()
 | 
			
		||||
            .register_type::<Rect<Val>>()
 | 
			
		||||
            .register_type::<Style>()
 | 
			
		||||
            .register_type::<Val>()
 | 
			
		||||
            .add_stage_before(CoreStage::PostUpdate, UiStage::Ui, SystemStage::parallel())
 | 
			
		||||
            .add_system_to_stage(CoreStage::PreUpdate, ui_focus_system.system())
 | 
			
		||||
            // add these stages to front because these must run before transform update systems
 | 
			
		||||
 | 
			
		||||
@ -50,6 +50,7 @@ impl AddAssign<f32> for Val {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, PartialEq, Debug, Reflect)]
 | 
			
		||||
#[reflect(Component, PartialEq)]
 | 
			
		||||
pub struct Style {
 | 
			
		||||
    pub display: Display,
 | 
			
		||||
    pub position_type: PositionType,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user