bevy_render/mesh/
components.rs

1use crate::{mesh::Mesh, view::Visibility};
2use bevy_asset::{AssetId, Handle};
3use bevy_derive::{Deref, DerefMut};
4use bevy_ecs::{component::Component, reflect::ReflectComponent};
5use bevy_reflect::{std_traits::ReflectDefault, Reflect};
6use bevy_transform::components::Transform;
7use derive_more::derive::From;
8
9/// A component for 2D meshes. Requires a [`MeshMaterial2d`] to be rendered, commonly using a [`ColorMaterial`].
10///
11/// [`MeshMaterial2d`]: <https://docs.rs/bevy/latest/bevy/sprite/struct.MeshMaterial2d.html>
12/// [`ColorMaterial`]: <https://docs.rs/bevy/latest/bevy/sprite/struct.ColorMaterial.html>
13///
14/// # Example
15///
16/// ```ignore
17/// # use bevy_sprite::{ColorMaterial, Mesh2d, MeshMaterial2d};
18/// # use bevy_ecs::prelude::*;
19/// # use bevy_render::mesh::Mesh;
20/// # use bevy_color::palettes::basic::RED;
21/// # use bevy_asset::Assets;
22/// # use bevy_math::primitives::Circle;
23/// #
24/// // Spawn an entity with a mesh using `ColorMaterial`.
25/// fn setup(
26///     mut commands: Commands,
27///     mut meshes: ResMut<Assets<Mesh>>,
28///     mut materials: ResMut<Assets<ColorMaterial>>,
29/// ) {
30///     commands.spawn((
31///         Mesh2d(meshes.add(Circle::new(50.0))),
32///         MeshMaterial2d(materials.add(ColorMaterial::from_color(RED))),
33///     ));
34/// }
35/// ```
36#[derive(Component, Clone, Debug, Default, Deref, DerefMut, Reflect, PartialEq, Eq, From)]
37#[reflect(Component, Default)]
38#[require(Transform, Visibility)]
39pub struct Mesh2d(pub Handle<Mesh>);
40
41impl From<Mesh2d> for AssetId<Mesh> {
42    fn from(mesh: Mesh2d) -> Self {
43        mesh.id()
44    }
45}
46
47impl From<&Mesh2d> for AssetId<Mesh> {
48    fn from(mesh: &Mesh2d) -> Self {
49        mesh.id()
50    }
51}
52
53/// A component for 3D meshes. Requires a [`MeshMaterial3d`] to be rendered, commonly using a [`StandardMaterial`].
54///
55/// [`MeshMaterial3d`]: <https://docs.rs/bevy/latest/bevy/pbr/struct.MeshMaterial3d.html>
56/// [`StandardMaterial`]: <https://docs.rs/bevy/latest/bevy/pbr/struct.StandardMaterial.html>
57///
58/// # Example
59///
60/// ```ignore
61/// # use bevy_pbr::{Material, MeshMaterial3d, StandardMaterial};
62/// # use bevy_ecs::prelude::*;
63/// # use bevy_render::mesh::{Mesh, Mesh3d};
64/// # use bevy_color::palettes::basic::RED;
65/// # use bevy_asset::Assets;
66/// # use bevy_math::primitives::Capsule3d;
67/// #
68/// // Spawn an entity with a mesh using `StandardMaterial`.
69/// fn setup(
70///     mut commands: Commands,
71///     mut meshes: ResMut<Assets<Mesh>>,
72///     mut materials: ResMut<Assets<StandardMaterial>>,
73/// ) {
74///     commands.spawn((
75///         Mesh3d(meshes.add(Capsule3d::default())),
76///         MeshMaterial3d(materials.add(StandardMaterial {
77///             base_color: RED.into(),
78///             ..Default::default()
79///         })),
80///     ));
81/// }
82/// ```
83#[derive(Component, Clone, Debug, Default, Deref, DerefMut, Reflect, PartialEq, Eq, From)]
84#[reflect(Component, Default)]
85#[require(Transform, Visibility)]
86pub struct Mesh3d(pub Handle<Mesh>);
87
88impl From<Mesh3d> for AssetId<Mesh> {
89    fn from(mesh: Mesh3d) -> Self {
90        mesh.id()
91    }
92}
93
94impl From<&Mesh3d> for AssetId<Mesh> {
95    fn from(mesh: &Mesh3d) -> Self {
96        mesh.id()
97    }
98}