Make the ObservedBy
component useful to public consumers (#19591)
# Objective As raised by @Jondolf, this type is `pub`, and useful for various consumers to ensure cleanup or debugging. However, it doesn't offer any way to actually view the data. ## Solution - Add a read-only view of the data. - Don't add any (easy) way to mutate the data, as this presents a huge footgun. - Implement Reflect and register the component so you can see it in inspectors nicely.
This commit is contained in:
parent
1dfe83bb8d
commit
58c276ab44
@ -106,10 +106,13 @@ impl Default for App {
|
||||
|
||||
#[cfg(feature = "bevy_reflect")]
|
||||
{
|
||||
use bevy_ecs::observer::ObservedBy;
|
||||
|
||||
app.init_resource::<AppTypeRegistry>();
|
||||
app.register_type::<Name>();
|
||||
app.register_type::<ChildOf>();
|
||||
app.register_type::<Children>();
|
||||
app.register_type::<ObservedBy>();
|
||||
}
|
||||
|
||||
#[cfg(feature = "reflect_functions")]
|
||||
|
@ -6,12 +6,24 @@ use crate::{
|
||||
};
|
||||
use alloc::vec::Vec;
|
||||
|
||||
#[cfg(feature = "bevy_reflect")]
|
||||
use crate::prelude::ReflectComponent;
|
||||
|
||||
use super::Observer;
|
||||
|
||||
/// Tracks a list of entity observers for the [`Entity`] [`ObservedBy`] is added to.
|
||||
#[derive(Default)]
|
||||
#[derive(Default, Debug)]
|
||||
#[cfg_attr(feature = "bevy_reflect", derive(bevy_reflect::Reflect))]
|
||||
#[cfg_attr(feature = "bevy_reflect", reflect(Component, Debug))]
|
||||
pub struct ObservedBy(pub(crate) Vec<Entity>);
|
||||
|
||||
impl ObservedBy {
|
||||
/// Provides a read-only reference to the list of entities observing this entity.
|
||||
pub fn get(&self) -> &[Entity] {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl Component for ObservedBy {
|
||||
const STORAGE_TYPE: StorageType = StorageType::SparseSet;
|
||||
type Mutability = Mutable;
|
||||
|
Loading…
Reference in New Issue
Block a user