1use super::Mesh;
2use bevy_asset::Handle;
3use bevy_ecs::prelude::*;
4use bevy_math::Vec3;
5use bevy_reflect::prelude::*;
6use bytemuck::{Pod, Zeroable};
7use encase::ShaderType;
8use thiserror::Error;
9
10pub const MAX_TEXTURE_WIDTH: u32 = 2048;
13
14pub const MAX_MORPH_WEIGHTS: usize = 256;
16
17const MAX_COMPONENTS: u32 = MAX_TEXTURE_WIDTH * MAX_TEXTURE_WIDTH;
23
24#[derive(#[allow(unused_qualifications)]
#[automatically_derived]
impl ::core::fmt::Display for MorphBuildError {
fn fmt(&self, __formatter: &mut ::core::fmt::Formatter)
-> ::core::fmt::Result {
use ::thiserror::__private18::AsDisplay as _;
#[allow(unused_variables, deprecated, clippy ::
used_underscore_binding)]
match self {
MorphBuildError::TooManyAttributes { vertex_count, component_count
} =>
match (vertex_count.as_display(),
component_count.as_display()) {
(__display_vertex_count, __display_component_count) =>
__formatter.write_fmt(format_args!("Too many vertex components in morph target, max is {1}, got {2}×{3} = {0}",
*vertex_count * *component_count as usize, MAX_COMPONENTS,
__display_vertex_count, __display_component_count)),
},
MorphBuildError::TooManyTargets { target_count } =>
match (target_count.as_display(),) {
(__display_target_count,) =>
__formatter.write_fmt(format_args!("Bevy only supports up to {0} morph targets (individual poses), tried to create a model with {1} morph targets",
MAX_MORPH_WEIGHTS, __display_target_count)),
},
}
}
}Error, #[automatically_derived]
impl ::core::clone::Clone for MorphBuildError {
#[inline]
fn clone(&self) -> MorphBuildError {
match self {
MorphBuildError::TooManyAttributes {
vertex_count: __self_0, component_count: __self_1 } =>
MorphBuildError::TooManyAttributes {
vertex_count: ::core::clone::Clone::clone(__self_0),
component_count: ::core::clone::Clone::clone(__self_1),
},
MorphBuildError::TooManyTargets { target_count: __self_0 } =>
MorphBuildError::TooManyTargets {
target_count: ::core::clone::Clone::clone(__self_0),
},
}
}
}Clone, #[automatically_derived]
impl ::core::fmt::Debug for MorphBuildError {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
MorphBuildError::TooManyAttributes {
vertex_count: __self_0, component_count: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"TooManyAttributes", "vertex_count", __self_0,
"component_count", &__self_1),
MorphBuildError::TooManyTargets { target_count: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f,
"TooManyTargets", "target_count", &__self_0),
}
}
}Debug)]
25pub enum MorphBuildError {
26 #[error(
27 "Too many vertex components in morph target, max is {MAX_COMPONENTS}, \
28 got {vertex_count}×{component_count} = {}",
29 *vertex_count * *component_count as usize
30 )]
31 TooManyAttributes {
32 vertex_count: usize,
33 component_count: u32,
34 },
35 #[error(
36 "Bevy only supports up to {} morph targets (individual poses), tried to \
37 create a model with {target_count} morph targets",
38 MAX_MORPH_WEIGHTS
39 )]
40 TooManyTargets { target_count: usize },
41}
42
43#[derive(const _: () =
{
impl bevy_reflect::GetTypeRegistration for MorphWeights where {
fn get_type_registration() -> bevy_reflect::TypeRegistration {
let mut registration =
bevy_reflect::TypeRegistration::of::<Self>();
registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
registration.register_type_data::<ReflectComponent, Self>();
registration.register_type_data::<ReflectDefault, Self>();
registration
}
#[inline(never)]
fn register_type_dependencies(registry:
&mut bevy_reflect::TypeRegistry) {
<Vec<f32> as
bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
<Option<Handle<Mesh>> as
bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
}
}
impl bevy_reflect::Typed for MorphWeights where {
#[inline]
fn type_info() -> &'static bevy_reflect::TypeInfo {
static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
bevy_reflect::utility::NonGenericTypeInfoCell::new();
CELL.get_or_set(||
{
bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[bevy_reflect::NamedField::new::<Vec<f32>>("weights"),
bevy_reflect::NamedField::new::<Option<Handle<Mesh>>>("first_mesh")]))
})
}
}
#[allow(deprecated, reason =
"derives on a deprecated type shouldn't be considered a usage")]
impl bevy_reflect::TypePath for MorphWeights where {
fn type_path() -> &'static str {
"bevy_mesh::morph::MorphWeights"
}
fn short_type_path() -> &'static str { "MorphWeights" }
fn type_ident() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("MorphWeights")
}
fn crate_name() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("bevy_mesh::morph".split(':').next().unwrap())
}
fn module_path() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("bevy_mesh::morph")
}
}
impl bevy_reflect::Reflect for MorphWeights where {
#[inline]
fn into_any(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
self
}
#[inline]
fn as_any(&self) -> &dyn ::core::any::Any { self }
#[inline]
fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
#[inline]
fn into_reflect(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
self
}
#[inline]
fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
#[inline]
fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
self
}
#[inline]
fn set(&mut self,
value:
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
->
::core::result::Result<(),
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
*self = <dyn bevy_reflect::Reflect>::take(value)?;
::core::result::Result::Ok(())
}
}
#[allow(non_upper_case_globals)]
const _: () =
{
static __INVENTORY: ::inventory::Node =
::inventory::Node {
value: &{
bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<MorphWeights
as
bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
},
next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
};
#[link_section = ".text.startup"]
unsafe extern "C" fn __ctor() {
unsafe {
::inventory::ErasedNode::submit(__INVENTORY.value,
&__INVENTORY)
}
}
#[used]
#[link_section = ".init_array"]
static __CTOR: unsafe extern "C" fn() = __ctor;
};
impl bevy_reflect::structs::Struct for MorphWeights where {
fn field(&self, name: &str)
-> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
match name {
"weights" => ::core::option::Option::Some(&self.weights),
"first_mesh" =>
::core::option::Option::Some(&self.first_mesh),
_ => ::core::option::Option::None,
}
}
fn field_mut(&mut self, name: &str)
->
::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
match name {
"weights" =>
::core::option::Option::Some(&mut self.weights),
"first_mesh" =>
::core::option::Option::Some(&mut self.first_mesh),
_ => ::core::option::Option::None,
}
}
fn field_at(&self, index: usize)
-> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
match index {
0usize => ::core::option::Option::Some(&self.weights),
1usize => ::core::option::Option::Some(&self.first_mesh),
_ => ::core::option::Option::None,
}
}
fn field_at_mut(&mut self, index: usize)
->
::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
match index {
0usize => ::core::option::Option::Some(&mut self.weights),
1usize =>
::core::option::Option::Some(&mut self.first_mesh),
_ => ::core::option::Option::None,
}
}
fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
match index {
0usize => ::core::option::Option::Some("weights"),
1usize => ::core::option::Option::Some("first_mesh"),
_ => ::core::option::Option::None,
}
}
fn index_of_name(&self, name: &str)
-> ::core::option::Option<usize> {
match name {
"weights" => ::core::option::Option::Some(0usize),
"first_mesh" => ::core::option::Option::Some(1usize),
_ => ::core::option::Option::None,
}
}
fn field_len(&self) -> usize { 2usize }
fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
bevy_reflect::structs::FieldIter::new(self)
}
fn to_dynamic_struct(&self)
-> bevy_reflect::structs::DynamicStruct {
let mut dynamic: bevy_reflect::structs::DynamicStruct =
::core::default::Default::default();
dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
dynamic.insert_boxed("weights",
bevy_reflect::PartialReflect::to_dynamic(&self.weights));
dynamic.insert_boxed("first_mesh",
bevy_reflect::PartialReflect::to_dynamic(&self.first_mesh));
dynamic
}
}
impl bevy_reflect::PartialReflect for MorphWeights where {
#[inline]
fn get_represented_type_info(&self)
-> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
::core::option::Option::Some(<Self as
bevy_reflect::Typed>::type_info())
}
#[inline]
fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
-> ::core::result::Result<(), bevy_reflect::ApplyError> {
if let bevy_reflect::ReflectRef::Struct(struct_value) =
bevy_reflect::PartialReflect::reflect_ref(value) {
for (name, value) in
bevy_reflect::structs::Struct::iter_fields(struct_value) {
if let ::core::option::Option::Some(v) =
bevy_reflect::structs::Struct::field_mut(self, name) {
bevy_reflect::PartialReflect::try_apply(v, value)?;
}
}
} else {
return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
to_kind: bevy_reflect::ReflectKind::Struct,
});
}
::core::result::Result::Ok(())
}
#[inline]
fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
bevy_reflect::ReflectKind::Struct
}
#[inline]
fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
bevy_reflect::ReflectRef::Struct(self)
}
#[inline]
fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
bevy_reflect::ReflectMut::Struct(self)
}
#[inline]
fn reflect_owned(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
-> bevy_reflect::ReflectOwned {
bevy_reflect::ReflectOwned::Struct(self)
}
#[inline]
fn try_into_reflect(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
::core::result::Result::Ok(self)
}
#[inline]
fn try_as_reflect(&self)
-> ::core::option::Option<&dyn bevy_reflect::Reflect> {
::core::option::Option::Some(self)
}
#[inline]
fn try_as_reflect_mut(&mut self)
-> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
::core::option::Option::Some(self)
}
#[inline]
fn into_partial_reflect(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
self
}
#[inline]
fn as_partial_reflect(&self)
-> &dyn bevy_reflect::PartialReflect {
self
}
#[inline]
fn as_partial_reflect_mut(&mut self)
-> &mut dyn bevy_reflect::PartialReflect {
self
}
fn reflect_partial_eq(&self,
value: &dyn bevy_reflect::PartialReflect)
-> ::core::option::Option<bool> {
(bevy_reflect::structs::struct_partial_eq)(self, value)
}
fn reflect_partial_cmp(&self,
value: &dyn bevy_reflect::PartialReflect)
-> ::core::option::Option<::core::cmp::Ordering> {
(bevy_reflect::structs::struct_partial_cmp)(self, value)
}
fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
-> ::core::fmt::Result {
::core::fmt::Debug::fmt(self, f)
}
#[inline]
fn reflect_clone(&self)
->
::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
bevy_reflect::ReflectCloneError> {
::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
}
}
impl bevy_reflect::FromReflect for MorphWeights where {
fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
-> ::core::option::Option<Self> {
if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
bevy_reflect::PartialReflect::reflect_ref(reflect) {
let mut __this =
<Self as ::core::default::Default>::default();
if let ::core::option::Option::Some(__field) =
(||
<Vec<f32> as
bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
"weights")?))() {
__this.weights = __field;
}
if let ::core::option::Option::Some(__field) =
(||
<Option<Handle<Mesh>> as
bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
"first_mesh")?))() {
__this.first_mesh = __field;
}
::core::option::Option::Some(__this)
} else { ::core::option::Option::None }
}
}
};Reflect, #[automatically_derived]
impl ::core::default::Default for MorphWeights {
#[inline]
fn default() -> MorphWeights {
MorphWeights {
weights: ::core::default::Default::default(),
first_mesh: ::core::default::Default::default(),
}
}
}Default, #[automatically_derived]
impl ::core::fmt::Debug for MorphWeights {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "MorphWeights",
"weights", &self.weights, "first_mesh", &&self.first_mesh)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for MorphWeights {
#[inline]
fn clone(&self) -> MorphWeights {
MorphWeights {
weights: ::core::clone::Clone::clone(&self.weights),
first_mesh: ::core::clone::Clone::clone(&self.first_mesh),
}
}
}Clone, impl bevy_ecs::component::Component for MorphWeights where
Self: ::core::marker::Send + ::core::marker::Sync + 'static {
const STORAGE_TYPE: bevy_ecs::component::StorageType =
bevy_ecs::component::StorageType::Table;
type Mutability = bevy_ecs::component::Mutable;
fn register_required_components(_requiree:
bevy_ecs::component::ComponentId,
required_components:
&mut bevy_ecs::component::RequiredComponentsRegistrator) {}
fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
use bevy_ecs::component::{
DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
};
(&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
}
fn relationship_accessor()
->
::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
::core::option::Option::None
}
}Component)]
80#[reflect(Debug, Component, Default, Clone)]
81pub struct MorphWeights {
82 weights: Vec<f32>,
83 first_mesh: Option<Handle<Mesh>>,
85}
86
87impl MorphWeights {
88 pub fn new(
89 weights: Vec<f32>,
90 first_mesh: Option<Handle<Mesh>>,
91 ) -> Result<Self, MorphBuildError> {
92 if weights.len() > MAX_MORPH_WEIGHTS {
93 let target_count = weights.len();
94 return Err(MorphBuildError::TooManyTargets { target_count });
95 }
96 Ok(MorphWeights {
97 weights,
98 first_mesh,
99 })
100 }
101 pub fn first_mesh(&self) -> Option<&Handle<Mesh>> {
104 self.first_mesh.as_ref()
105 }
106 pub fn weights(&self) -> &[f32] {
107 &self.weights
108 }
109 pub fn weights_mut(&mut self) -> &mut [f32] {
110 &mut self.weights
111 }
112}
113
114#[derive(const _: () =
{
impl bevy_reflect::GetTypeRegistration for MeshMorphWeights where {
fn get_type_registration() -> bevy_reflect::TypeRegistration {
let mut registration =
bevy_reflect::TypeRegistration::of::<Self>();
registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
registration.register_type_data::<ReflectComponent, Self>();
registration
}
#[inline(never)]
fn register_type_dependencies(registry:
&mut bevy_reflect::TypeRegistry) {
<Vec<f32> as
bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
<Entity as
bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
}
}
impl bevy_reflect::Typed for MeshMorphWeights where {
#[inline]
fn type_info() -> &'static bevy_reflect::TypeInfo {
static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
bevy_reflect::utility::NonGenericTypeInfoCell::new();
CELL.get_or_set(||
{
bevy_reflect::TypeInfo::Enum(bevy_reflect::enums::EnumInfo::new::<Self>(&[bevy_reflect::enums::VariantInfo::Struct(bevy_reflect::enums::StructVariantInfo::new("Value",
&[bevy_reflect::NamedField::new::<Vec<f32>>("weights")])),
bevy_reflect::enums::VariantInfo::Tuple(bevy_reflect::enums::TupleVariantInfo::new("Reference",
&[bevy_reflect::UnnamedField::new::<Entity>(0usize)]))]))
})
}
}
#[allow(deprecated, reason =
"derives on a deprecated type shouldn't be considered a usage")]
impl bevy_reflect::TypePath for MeshMorphWeights where {
fn type_path() -> &'static str {
"bevy_mesh::morph::MeshMorphWeights"
}
fn short_type_path() -> &'static str { "MeshMorphWeights" }
fn type_ident() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("MeshMorphWeights")
}
fn crate_name() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("bevy_mesh::morph".split(':').next().unwrap())
}
fn module_path() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("bevy_mesh::morph")
}
}
impl bevy_reflect::Reflect for MeshMorphWeights where {
#[inline]
fn into_any(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
self
}
#[inline]
fn as_any(&self) -> &dyn ::core::any::Any { self }
#[inline]
fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
#[inline]
fn into_reflect(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
self
}
#[inline]
fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
#[inline]
fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
self
}
#[inline]
fn set(&mut self,
value:
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
->
::core::result::Result<(),
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
*self = <dyn bevy_reflect::Reflect>::take(value)?;
::core::result::Result::Ok(())
}
}
#[allow(non_upper_case_globals)]
const _: () =
{
static __INVENTORY: ::inventory::Node =
::inventory::Node {
value: &{
bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<MeshMorphWeights
as
bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
},
next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
};
#[link_section = ".text.startup"]
unsafe extern "C" fn __ctor() {
unsafe {
::inventory::ErasedNode::submit(__INVENTORY.value,
&__INVENTORY)
}
}
#[used]
#[link_section = ".init_array"]
static __CTOR: unsafe extern "C" fn() = __ctor;
};
impl bevy_reflect::enums::Enum for MeshMorphWeights where {
fn field(&self, __name_param: &str)
-> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
match self {
MeshMorphWeights::Value { weights: __value, .. } if
__name_param == "weights" =>
::core::option::Option::Some(__value),
_ => ::core::option::Option::None,
}
}
fn field_at(&self, __index_param: usize)
-> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
match self {
MeshMorphWeights::Value { weights: __value, .. } if
__index_param == 0usize =>
::core::option::Option::Some(__value),
MeshMorphWeights::Reference { 0: __value, .. } if
__index_param == 0usize =>
::core::option::Option::Some(__value),
_ => ::core::option::Option::None,
}
}
fn field_mut(&mut self, __name_param: &str)
->
::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
match self {
MeshMorphWeights::Value { weights: __value, .. } if
__name_param == "weights" =>
::core::option::Option::Some(__value),
_ => ::core::option::Option::None,
}
}
fn field_at_mut(&mut self, __index_param: usize)
->
::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
match self {
MeshMorphWeights::Value { weights: __value, .. } if
__index_param == 0usize =>
::core::option::Option::Some(__value),
MeshMorphWeights::Reference { 0: __value, .. } if
__index_param == 0usize =>
::core::option::Option::Some(__value),
_ => ::core::option::Option::None,
}
}
fn index_of(&self, __name_param: &str)
-> ::core::option::Option<usize> {
match self {
MeshMorphWeights::Value { .. } if __name_param == "weights"
=> ::core::option::Option::Some(0usize),
_ => ::core::option::Option::None,
}
}
fn name_at(&self, __index_param: usize)
-> ::core::option::Option<&str> {
match self {
MeshMorphWeights::Value { .. } if __index_param == 0usize =>
::core::option::Option::Some("weights"),
_ => ::core::option::Option::None,
}
}
fn iter_fields(&self) -> bevy_reflect::enums::VariantFieldIter {
bevy_reflect::enums::VariantFieldIter::new(self)
}
#[inline]
fn field_len(&self) -> usize {
match self {
MeshMorphWeights::Value { .. } => 1usize,
MeshMorphWeights::Reference { .. } => 1usize,
_ => 0,
}
}
#[inline]
fn variant_name(&self) -> &str {
match self {
MeshMorphWeights::Value { .. } => "Value",
MeshMorphWeights::Reference { .. } => "Reference",
_ =>
::core::panicking::panic("internal error: entered unreachable code"),
}
}
#[inline]
fn variant_index(&self) -> usize {
match self {
MeshMorphWeights::Value { .. } => 0usize,
MeshMorphWeights::Reference { .. } => 1usize,
_ =>
::core::panicking::panic("internal error: entered unreachable code"),
}
}
#[inline]
fn variant_type(&self) -> bevy_reflect::enums::VariantType {
match self {
MeshMorphWeights::Value { .. } =>
bevy_reflect::enums::VariantType::Struct,
MeshMorphWeights::Reference { .. } =>
bevy_reflect::enums::VariantType::Tuple,
_ =>
::core::panicking::panic("internal error: entered unreachable code"),
}
}
fn to_dynamic_enum(&self) -> bevy_reflect::enums::DynamicEnum {
bevy_reflect::enums::DynamicEnum::from_ref::<Self>(self)
}
}
impl bevy_reflect::PartialReflect for MeshMorphWeights where {
#[inline]
fn get_represented_type_info(&self)
-> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
::core::option::Option::Some(<Self as
bevy_reflect::Typed>::type_info())
}
#[inline]
fn try_apply(&mut self,
__value_param: &dyn bevy_reflect::PartialReflect)
-> ::core::result::Result<(), bevy_reflect::ApplyError> {
if let bevy_reflect::ReflectRef::Enum(__value_param) =
bevy_reflect::PartialReflect::reflect_ref(__value_param) {
if bevy_reflect::enums::Enum::variant_name(self) ==
bevy_reflect::enums::Enum::variant_name(__value_param) {
match bevy_reflect::enums::Enum::variant_type(__value_param)
{
bevy_reflect::enums::VariantType::Struct => {
for field in
bevy_reflect::enums::Enum::iter_fields(__value_param) {
let name = field.name().unwrap();
if let ::core::option::Option::Some(v) =
bevy_reflect::enums::Enum::field_mut(self, name) {
bevy_reflect::PartialReflect::try_apply(v, field.value())?;
}
}
}
bevy_reflect::enums::VariantType::Tuple => {
for (index, field) in
::core::iter::Iterator::enumerate(bevy_reflect::enums::Enum::iter_fields(__value_param))
{
if let ::core::option::Option::Some(v) =
bevy_reflect::enums::Enum::field_at_mut(self, index) {
bevy_reflect::PartialReflect::try_apply(v, field.value())?;
}
}
}
_ => {}
}
} else {
match bevy_reflect::enums::Enum::variant_name(__value_param)
{
"Value" => {
*self =
MeshMorphWeights::Value {
weights: {
let __weights = __value_param.field("weights");
let __weights =
__weights.ok_or(bevy_reflect::ApplyError::MissingEnumField {
variant_name: ::core::convert::Into::into("Value"),
field_name: ::core::convert::Into::into("weights"),
})?;
<Vec<f32> as
bevy_reflect::FromReflect>::from_reflect(__weights).ok_or(bevy_reflect::ApplyError::MismatchedTypes {
from_type: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(__weights)),
to_type: ::core::convert::Into::into(<Vec<f32> as
bevy_reflect::TypePath>::type_path()),
})?
},
}
}
"Reference" => {
*self =
MeshMorphWeights::Reference {
0: {
let __0 = __value_param.field_at(0usize);
let __0 =
__0.ok_or(bevy_reflect::ApplyError::MissingEnumField {
variant_name: ::core::convert::Into::into("Reference"),
field_name: ::core::convert::Into::into(".0"),
})?;
<Entity as
bevy_reflect::FromReflect>::from_reflect(__0).ok_or(bevy_reflect::ApplyError::MismatchedTypes {
from_type: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(__0)),
to_type: ::core::convert::Into::into(<Entity as
bevy_reflect::TypePath>::type_path()),
})?
},
}
}
name => {
return ::core::result::Result::Err(bevy_reflect::ApplyError::UnknownVariant {
enum_name: ::core::convert::Into::into(bevy_reflect::DynamicTypePath::reflect_type_path(self)),
variant_name: ::core::convert::Into::into(name),
});
}
}
}
} else {
return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
from_kind: bevy_reflect::PartialReflect::reflect_kind(__value_param),
to_kind: bevy_reflect::ReflectKind::Enum,
});
}
::core::result::Result::Ok(())
}
fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
bevy_reflect::ReflectKind::Enum
}
fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
bevy_reflect::ReflectRef::Enum(self)
}
fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
bevy_reflect::ReflectMut::Enum(self)
}
fn reflect_owned(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
-> bevy_reflect::ReflectOwned {
bevy_reflect::ReflectOwned::Enum(self)
}
#[inline]
fn try_into_reflect(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
::core::result::Result::Ok(self)
}
#[inline]
fn try_as_reflect(&self)
-> ::core::option::Option<&dyn bevy_reflect::Reflect> {
::core::option::Option::Some(self)
}
#[inline]
fn try_as_reflect_mut(&mut self)
-> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
::core::option::Option::Some(self)
}
#[inline]
fn into_partial_reflect(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
self
}
#[inline]
fn as_partial_reflect(&self)
-> &dyn bevy_reflect::PartialReflect {
self
}
#[inline]
fn as_partial_reflect_mut(&mut self)
-> &mut dyn bevy_reflect::PartialReflect {
self
}
fn reflect_hash(&self) -> ::core::option::Option<u64> {
(bevy_reflect::enums::enum_hash)(self)
}
fn reflect_partial_eq(&self,
value: &dyn bevy_reflect::PartialReflect)
-> ::core::option::Option<bool> {
(bevy_reflect::enums::enum_partial_eq)(self, value)
}
fn reflect_partial_cmp(&self,
value: &dyn bevy_reflect::PartialReflect)
-> ::core::option::Option<::core::cmp::Ordering> {
(bevy_reflect::enums::enum_partial_cmp)(self, value)
}
fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
-> ::core::fmt::Result {
::core::fmt::Debug::fmt(self, f)
}
#[inline]
fn reflect_clone(&self)
->
::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
bevy_reflect::ReflectCloneError> {
::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
}
}
impl bevy_reflect::FromReflect for MeshMorphWeights where {
fn from_reflect(__param0: &dyn bevy_reflect::PartialReflect)
-> ::core::option::Option<Self> {
if let bevy_reflect::ReflectRef::Enum(__param0) =
bevy_reflect::PartialReflect::reflect_ref(__param0) {
match bevy_reflect::enums::Enum::variant_name(__param0) {
"Value" =>
::core::option::Option::Some(MeshMorphWeights::Value {
weights: {
let __weights = __param0.field("weights");
let __weights = __weights?;
<Vec<f32> as
bevy_reflect::FromReflect>::from_reflect(__weights)?
},
}),
"Reference" =>
::core::option::Option::Some(MeshMorphWeights::Reference {
0: {
let __0 = __param0.field_at(0usize);
let __0 = __0?;
<Entity as bevy_reflect::FromReflect>::from_reflect(__0)?
},
}),
name => ::core::option::Option::None,
}
} else { ::core::option::Option::None }
}
}
};Reflect, #[automatically_derived]
impl ::core::fmt::Debug for MeshMorphWeights {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
MeshMorphWeights::Value { weights: __self_0 } =>
::core::fmt::Formatter::debug_struct_field1_finish(f, "Value",
"weights", &__self_0),
MeshMorphWeights::Reference(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Reference", &__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for MeshMorphWeights {
#[inline]
fn clone(&self) -> MeshMorphWeights {
match self {
MeshMorphWeights::Value { weights: __self_0 } =>
MeshMorphWeights::Value {
weights: ::core::clone::Clone::clone(__self_0),
},
MeshMorphWeights::Reference(__self_0) =>
MeshMorphWeights::Reference(::core::clone::Clone::clone(__self_0)),
}
}
}Clone, impl bevy_ecs::component::Component for MeshMorphWeights where
Self: ::core::marker::Send + ::core::marker::Sync + 'static {
const STORAGE_TYPE: bevy_ecs::component::StorageType =
bevy_ecs::component::StorageType::Table;
type Mutability = bevy_ecs::component::Mutable;
fn register_required_components(_requiree:
bevy_ecs::component::ComponentId,
required_components:
&mut bevy_ecs::component::RequiredComponentsRegistrator) {}
fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
use bevy_ecs::component::{
DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
};
(&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
}
fn map_entities<M: bevy_ecs::entity::EntityMapper>(this: &mut Self,
mapper: &mut M) {
use bevy_ecs::entity::MapEntities;
match this {
Self::Value { .. } => {}
Self::Reference { 0: __self0, .. } => {
__self0.map_entities(mapper);
}
_ => {}
}
}
fn relationship_accessor()
->
::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
::core::option::Option::None
}
}Component)]
119#[reflect(Debug, Component, Clone)]
120pub enum MeshMorphWeights {
121 Value {
122 weights: Vec<f32>,
123 },
124 Reference(#[entities] Entity),
130}
131
132#[derive(#[automatically_derived]
impl ::core::marker::Copy for MorphAttributes { }Copy, #[automatically_derived]
impl ::core::clone::Clone for MorphAttributes {
#[inline]
fn clone(&self) -> MorphAttributes {
let _: ::core::clone::AssertParamIsClone<Vec3>;
let _: ::core::clone::AssertParamIsClone<f32>;
*self
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for MorphAttributes {
#[inline]
fn eq(&self, other: &MorphAttributes) -> bool {
self.pad_a == other.pad_a && self.pad_b == other.pad_b &&
self.pad_c == other.pad_c && self.position == other.position
&& self.normal == other.normal &&
self.tangent == other.tangent
}
}PartialEq, #[automatically_derived]
impl ::core::fmt::Debug for MorphAttributes {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["position", "pad_a", "normal", "pad_b", "tangent", "pad_c"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.position, &self.pad_a, &self.normal, &self.pad_b,
&self.tangent, &&self.pad_c];
::core::fmt::Formatter::debug_struct_fields_finish(f,
"MorphAttributes", names, values)
}
}Debug, const _: () =
{
impl bevy_reflect::GetTypeRegistration for MorphAttributes where {
fn get_type_registration() -> bevy_reflect::TypeRegistration {
let mut registration =
bevy_reflect::TypeRegistration::of::<Self>();
registration.insert::<bevy_reflect::ReflectFromPtr>(bevy_reflect::FromType::<Self>::from_type());
registration.insert::<bevy_reflect::ReflectFromReflect>(bevy_reflect::FromType::<Self>::from_type());
registration.register_type_data::<ReflectDefault, Self>();
registration
}
#[inline(never)]
fn register_type_dependencies(registry:
&mut bevy_reflect::TypeRegistry) {
<Vec3 as
bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
<f32 as
bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
}
}
impl bevy_reflect::Typed for MorphAttributes where {
#[inline]
fn type_info() -> &'static bevy_reflect::TypeInfo {
static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
bevy_reflect::utility::NonGenericTypeInfoCell::new();
CELL.get_or_set(||
{
bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[bevy_reflect::NamedField::new::<Vec3>("position"),
bevy_reflect::NamedField::new::<f32>("pad_a"),
bevy_reflect::NamedField::new::<Vec3>("normal"),
bevy_reflect::NamedField::new::<f32>("pad_b"),
bevy_reflect::NamedField::new::<Vec3>("tangent"),
bevy_reflect::NamedField::new::<f32>("pad_c")]))
})
}
}
#[allow(deprecated, reason =
"derives on a deprecated type shouldn't be considered a usage")]
impl bevy_reflect::TypePath for MorphAttributes where {
fn type_path() -> &'static str {
"bevy_mesh::morph::MorphAttributes"
}
fn short_type_path() -> &'static str { "MorphAttributes" }
fn type_ident() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("MorphAttributes")
}
fn crate_name() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("bevy_mesh::morph".split(':').next().unwrap())
}
fn module_path() -> ::core::option::Option<&'static str> {
::core::option::Option::Some("bevy_mesh::morph")
}
}
impl bevy_reflect::Reflect for MorphAttributes where {
#[inline]
fn into_any(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
self
}
#[inline]
fn as_any(&self) -> &dyn ::core::any::Any { self }
#[inline]
fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
#[inline]
fn into_reflect(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
self
}
#[inline]
fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
#[inline]
fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
self
}
#[inline]
fn set(&mut self,
value:
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
->
::core::result::Result<(),
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
*self = <dyn bevy_reflect::Reflect>::take(value)?;
::core::result::Result::Ok(())
}
}
#[allow(non_upper_case_globals)]
const _: () =
{
static __INVENTORY: ::inventory::Node =
::inventory::Node {
value: &{
bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<MorphAttributes
as
bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
},
next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
};
#[link_section = ".text.startup"]
unsafe extern "C" fn __ctor() {
unsafe {
::inventory::ErasedNode::submit(__INVENTORY.value,
&__INVENTORY)
}
}
#[used]
#[link_section = ".init_array"]
static __CTOR: unsafe extern "C" fn() = __ctor;
};
impl bevy_reflect::structs::Struct for MorphAttributes where {
fn field(&self, name: &str)
-> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
match name {
"position" => ::core::option::Option::Some(&self.position),
"pad_a" => ::core::option::Option::Some(&self.pad_a),
"normal" => ::core::option::Option::Some(&self.normal),
"pad_b" => ::core::option::Option::Some(&self.pad_b),
"tangent" => ::core::option::Option::Some(&self.tangent),
"pad_c" => ::core::option::Option::Some(&self.pad_c),
_ => ::core::option::Option::None,
}
}
fn field_mut(&mut self, name: &str)
->
::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
match name {
"position" =>
::core::option::Option::Some(&mut self.position),
"pad_a" => ::core::option::Option::Some(&mut self.pad_a),
"normal" => ::core::option::Option::Some(&mut self.normal),
"pad_b" => ::core::option::Option::Some(&mut self.pad_b),
"tangent" =>
::core::option::Option::Some(&mut self.tangent),
"pad_c" => ::core::option::Option::Some(&mut self.pad_c),
_ => ::core::option::Option::None,
}
}
fn field_at(&self, index: usize)
-> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
match index {
0usize => ::core::option::Option::Some(&self.position),
1usize => ::core::option::Option::Some(&self.pad_a),
2usize => ::core::option::Option::Some(&self.normal),
3usize => ::core::option::Option::Some(&self.pad_b),
4usize => ::core::option::Option::Some(&self.tangent),
5usize => ::core::option::Option::Some(&self.pad_c),
_ => ::core::option::Option::None,
}
}
fn field_at_mut(&mut self, index: usize)
->
::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
match index {
0usize => ::core::option::Option::Some(&mut self.position),
1usize => ::core::option::Option::Some(&mut self.pad_a),
2usize => ::core::option::Option::Some(&mut self.normal),
3usize => ::core::option::Option::Some(&mut self.pad_b),
4usize => ::core::option::Option::Some(&mut self.tangent),
5usize => ::core::option::Option::Some(&mut self.pad_c),
_ => ::core::option::Option::None,
}
}
fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
match index {
0usize => ::core::option::Option::Some("position"),
1usize => ::core::option::Option::Some("pad_a"),
2usize => ::core::option::Option::Some("normal"),
3usize => ::core::option::Option::Some("pad_b"),
4usize => ::core::option::Option::Some("tangent"),
5usize => ::core::option::Option::Some("pad_c"),
_ => ::core::option::Option::None,
}
}
fn index_of_name(&self, name: &str)
-> ::core::option::Option<usize> {
match name {
"position" => ::core::option::Option::Some(0usize),
"pad_a" => ::core::option::Option::Some(1usize),
"normal" => ::core::option::Option::Some(2usize),
"pad_b" => ::core::option::Option::Some(3usize),
"tangent" => ::core::option::Option::Some(4usize),
"pad_c" => ::core::option::Option::Some(5usize),
_ => ::core::option::Option::None,
}
}
fn field_len(&self) -> usize { 6usize }
fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
bevy_reflect::structs::FieldIter::new(self)
}
fn to_dynamic_struct(&self)
-> bevy_reflect::structs::DynamicStruct {
let mut dynamic: bevy_reflect::structs::DynamicStruct =
::core::default::Default::default();
dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
dynamic.insert_boxed("position",
bevy_reflect::PartialReflect::to_dynamic(&self.position));
dynamic.insert_boxed("pad_a",
bevy_reflect::PartialReflect::to_dynamic(&self.pad_a));
dynamic.insert_boxed("normal",
bevy_reflect::PartialReflect::to_dynamic(&self.normal));
dynamic.insert_boxed("pad_b",
bevy_reflect::PartialReflect::to_dynamic(&self.pad_b));
dynamic.insert_boxed("tangent",
bevy_reflect::PartialReflect::to_dynamic(&self.tangent));
dynamic.insert_boxed("pad_c",
bevy_reflect::PartialReflect::to_dynamic(&self.pad_c));
dynamic
}
}
impl bevy_reflect::PartialReflect for MorphAttributes where {
#[inline]
fn get_represented_type_info(&self)
-> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
::core::option::Option::Some(<Self as
bevy_reflect::Typed>::type_info())
}
#[inline]
fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
-> ::core::result::Result<(), bevy_reflect::ApplyError> {
if let bevy_reflect::ReflectRef::Struct(struct_value) =
bevy_reflect::PartialReflect::reflect_ref(value) {
for (name, value) in
bevy_reflect::structs::Struct::iter_fields(struct_value) {
if let ::core::option::Option::Some(v) =
bevy_reflect::structs::Struct::field_mut(self, name) {
bevy_reflect::PartialReflect::try_apply(v, value)?;
}
}
} else {
return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
to_kind: bevy_reflect::ReflectKind::Struct,
});
}
::core::result::Result::Ok(())
}
#[inline]
fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
bevy_reflect::ReflectKind::Struct
}
#[inline]
fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
bevy_reflect::ReflectRef::Struct(self)
}
#[inline]
fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
bevy_reflect::ReflectMut::Struct(self)
}
#[inline]
fn reflect_owned(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
-> bevy_reflect::ReflectOwned {
bevy_reflect::ReflectOwned::Struct(self)
}
#[inline]
fn try_into_reflect(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
::core::result::Result::Ok(self)
}
#[inline]
fn try_as_reflect(&self)
-> ::core::option::Option<&dyn bevy_reflect::Reflect> {
::core::option::Option::Some(self)
}
#[inline]
fn try_as_reflect_mut(&mut self)
-> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
::core::option::Option::Some(self)
}
#[inline]
fn into_partial_reflect(self:
bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
->
bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
self
}
#[inline]
fn as_partial_reflect(&self)
-> &dyn bevy_reflect::PartialReflect {
self
}
#[inline]
fn as_partial_reflect_mut(&mut self)
-> &mut dyn bevy_reflect::PartialReflect {
self
}
fn reflect_partial_eq(&self,
value: &dyn bevy_reflect::PartialReflect)
-> ::core::option::Option<bool> {
(bevy_reflect::structs::struct_partial_eq)(self, value)
}
fn reflect_partial_cmp(&self,
value: &dyn bevy_reflect::PartialReflect)
-> ::core::option::Option<::core::cmp::Ordering> {
(bevy_reflect::structs::struct_partial_cmp)(self, value)
}
#[inline]
fn reflect_clone(&self)
->
::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
bevy_reflect::ReflectCloneError> {
::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
}
}
impl bevy_reflect::FromReflect for MorphAttributes where {
fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
-> ::core::option::Option<Self> {
if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
bevy_reflect::PartialReflect::reflect_ref(reflect) {
let mut __this =
<Self as ::core::default::Default>::default();
if let ::core::option::Option::Some(__field) =
(||
<Vec3 as
bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
"position")?))() {
__this.position = __field;
}
if let ::core::option::Option::Some(__field) =
(||
<f32 as
bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
"pad_a")?))() {
__this.pad_a = __field;
}
if let ::core::option::Option::Some(__field) =
(||
<Vec3 as
bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
"normal")?))() {
__this.normal = __field;
}
if let ::core::option::Option::Some(__field) =
(||
<f32 as
bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
"pad_b")?))() {
__this.pad_b = __field;
}
if let ::core::option::Option::Some(__field) =
(||
<Vec3 as
bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
"tangent")?))() {
__this.tangent = __field;
}
if let ::core::option::Option::Some(__field) =
(||
<f32 as
bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
"pad_c")?))() {
__this.pad_c = __field;
}
::core::option::Option::Some(__this)
} else { ::core::option::Option::None }
}
}
};Reflect, impl ::encase::private::ShaderSize for MorphAttributes where
Vec3: ::encase::private::ShaderSize, f32: ::encase::private::ShaderSize,
Vec3: ::encase::private::ShaderSize, f32: ::encase::private::ShaderSize,
Vec3: ::encase::private::ShaderSize, f32: ::encase::private::ShaderSize {}ShaderType, unsafe impl ::bytemuck::Pod for MorphAttributes {}Pod, unsafe impl ::bytemuck::Zeroable for MorphAttributes {}Zeroable, #[automatically_derived]
impl ::core::default::Default for MorphAttributes {
#[inline]
fn default() -> MorphAttributes {
MorphAttributes {
position: ::core::default::Default::default(),
pad_a: ::core::default::Default::default(),
normal: ::core::default::Default::default(),
pad_b: ::core::default::Default::default(),
tangent: ::core::default::Default::default(),
pad_c: ::core::default::Default::default(),
}
}
}Default)]
134#[reflect(Clone, Default)]
135#[repr(C)]
136pub struct MorphAttributes {
137 pub position: Vec3,
139 pub pad_a: f32,
141 pub normal: Vec3,
143 pub pad_b: f32,
145 pub tangent: Vec3,
150 pub pad_c: f32,
152}
153
154impl From<[Vec3; 3]> for MorphAttributes {
155 fn from([position, normal, tangent]: [Vec3; 3]) -> Self {
156 MorphAttributes {
157 position,
158 normal,
159 tangent,
160 pad_a: 0.0,
161 pad_b: 0.0,
162 pad_c: 0.0,
163 }
164 }
165}
166
167impl MorphAttributes {
168 pub const COMPONENT_COUNT: usize = 9;
172
173 pub fn new(position: Vec3, normal: Vec3, tangent: Vec3) -> Self {
174 MorphAttributes {
175 position,
176 normal,
177 tangent,
178 pad_a: 0.0,
179 pad_b: 0.0,
180 pad_c: 0.0,
181 }
182 }
183}