use bevy_ecs::name::Name;
use moonshine_kind::prelude::*;
use crate::{Object, ObjectRef, ObjectWorldRef};
pub trait ObjectName {
fn name(&self) -> Option<&str>;
}
impl<T: Kind> ObjectName for Object<'_, '_, '_, T> {
fn name(&self) -> Option<&str> {
self.nametags
.get(self.entity())
.ok()
.and_then(|(name, _tags)| name.map(|name| name.as_str()))
}
}
impl<T: Kind> ObjectName for ObjectRef<'_, '_, '_, T> {
fn name(&self) -> Option<&str> {
self.1.name()
}
}
impl<T: Kind> ObjectName for ObjectWorldRef<'_, T> {
fn name(&self) -> Option<&str> {
self.world
.get::<Name>(self.entity())
.map(|name| name.as_str())
}
}