bevy_pbr/
mesh_material.rs1use crate::Material;
2use bevy_asset::{AsAssetId, AssetId, Handle};
3use bevy_derive::{Deref, DerefMut};
4use bevy_ecs::{component::Component, reflect::ReflectComponent};
5use bevy_reflect::{std_traits::ReflectDefault, Reflect};
6use derive_more::derive::From;
7
8#[derive(Component, Clone, Debug, Deref, DerefMut, Reflect, From)]
40#[reflect(Component, Default, Clone, PartialEq)]
41pub struct MeshMaterial3d<M: Material>(pub Handle<M>);
42
43impl<M: Material> Default for MeshMaterial3d<M> {
44 fn default() -> Self {
45 Self(Handle::default())
46 }
47}
48
49impl<M: Material> PartialEq for MeshMaterial3d<M> {
50 fn eq(&self, other: &Self) -> bool {
51 self.0 == other.0
52 }
53}
54
55impl<M: Material> Eq for MeshMaterial3d<M> {}
56
57impl<M: Material> From<MeshMaterial3d<M>> for AssetId<M> {
58 fn from(material: MeshMaterial3d<M>) -> Self {
59 material.id()
60 }
61}
62
63impl<M: Material> From<&MeshMaterial3d<M>> for AssetId<M> {
64 fn from(material: &MeshMaterial3d<M>) -> Self {
65 material.id()
66 }
67}
68
69impl<M: Material> AsAssetId for MeshMaterial3d<M> {
70 type Asset = M;
71
72 fn as_asset_id(&self) -> AssetId<Self::Asset> {
73 self.id()
74 }
75}