bevy_pbr/
components.rs

1use bevy_derive::{Deref, DerefMut};
2use bevy_ecs::component::Component;
3use bevy_ecs::entity::{Entity, EntityHashMap};
4use bevy_ecs::reflect::ReflectComponent;
5use bevy_reflect::{std_traits::ReflectDefault, Reflect};
6use bevy_render::sync_world::MainEntity;
7/// Collection of mesh entities visible for 3D lighting.
8///
9/// This component contains all mesh entities visible from the current light view.
10/// The collection is updated automatically by [`crate::SimulationLightSystems`].
11#[derive(Component, Clone, Debug, Default, Reflect, Deref, DerefMut)]
12#[reflect(Component, Debug, Default, Clone)]
13pub struct VisibleMeshEntities {
14    #[reflect(ignore, clone)]
15    pub entities: Vec<Entity>,
16}
17
18#[derive(Component, Clone, Debug, Default, Reflect, Deref, DerefMut)]
19#[reflect(Component, Debug, Default, Clone)]
20pub struct RenderVisibleMeshEntities {
21    #[reflect(ignore, clone)]
22    pub entities: Vec<(Entity, MainEntity)>,
23}
24
25#[derive(Component, Clone, Debug, Default, Reflect)]
26#[reflect(Component, Debug, Default, Clone)]
27pub struct CubemapVisibleEntities {
28    #[reflect(ignore, clone)]
29    data: [VisibleMeshEntities; 6],
30}
31
32impl CubemapVisibleEntities {
33    pub fn get(&self, i: usize) -> &VisibleMeshEntities {
34        &self.data[i]
35    }
36
37    pub fn get_mut(&mut self, i: usize) -> &mut VisibleMeshEntities {
38        &mut self.data[i]
39    }
40
41    pub fn iter(&self) -> impl DoubleEndedIterator<Item = &VisibleMeshEntities> {
42        self.data.iter()
43    }
44
45    pub fn iter_mut(&mut self) -> impl DoubleEndedIterator<Item = &mut VisibleMeshEntities> {
46        self.data.iter_mut()
47    }
48}
49
50#[derive(Component, Clone, Debug, Default, Reflect)]
51#[reflect(Component, Debug, Default, Clone)]
52pub struct RenderCubemapVisibleEntities {
53    #[reflect(ignore, clone)]
54    pub(crate) data: [RenderVisibleMeshEntities; 6],
55}
56
57impl RenderCubemapVisibleEntities {
58    pub fn get(&self, i: usize) -> &RenderVisibleMeshEntities {
59        &self.data[i]
60    }
61
62    pub fn get_mut(&mut self, i: usize) -> &mut RenderVisibleMeshEntities {
63        &mut self.data[i]
64    }
65
66    pub fn iter(&self) -> impl DoubleEndedIterator<Item = &RenderVisibleMeshEntities> {
67        self.data.iter()
68    }
69
70    pub fn iter_mut(&mut self) -> impl DoubleEndedIterator<Item = &mut RenderVisibleMeshEntities> {
71        self.data.iter_mut()
72    }
73}
74
75#[derive(Component, Clone, Debug, Default, Reflect)]
76#[reflect(Component, Default, Clone)]
77pub struct CascadesVisibleEntities {
78    /// Map of view entity to the visible entities for each cascade frustum.
79    #[reflect(ignore, clone)]
80    pub entities: EntityHashMap<Vec<VisibleMeshEntities>>,
81}
82
83#[derive(Component, Clone, Debug, Default, Reflect)]
84#[reflect(Component, Default, Clone)]
85pub struct RenderCascadesVisibleEntities {
86    /// Map of view entity to the visible entities for each cascade frustum.
87    #[reflect(ignore, clone)]
88    pub entities: EntityHashMap<Vec<RenderVisibleMeshEntities>>,
89}