Compare commits

..

No commits in common. "9c7dfb5c769c54b57613431727b29e842e6279c2" and "930033354b4ca29c24b0072267c14fe1471cea5b" have entirely different histories.

View File

@ -91,16 +91,13 @@ impl GltfRefMap {
#[derive(Component, Reflect)]
#[reflect(Component)]
struct GltfRef<T: Component> {
struct GltfRef<T: Component + FromGltfRef> {
target: String,
#[reflect(ignore)]
_marker: PhantomData<T>,
}
impl<T: Component> GltfRef<T>
where
Entity: Into<T>,
{
impl<T: Component + FromGltfRef> GltfRef<T> {
fn system(
refs: Query<(Entity, &Self)>,
gltf_for_entity: GltfForEntity,
@ -116,7 +113,7 @@ where
match ref_map.get_ref(gltf_root, &gltf_ref.target) {
Some(target) => {
commands.entity(entity).insert(Into::<T>::into(target));
commands.entity(entity).insert(T::from_ref(target));
}
None => {
warn!(
@ -129,14 +126,17 @@ where
}
}
/// Trait for creating a component for a Gltf reference.
pub trait FromGltfRef {
/// Creates `Self` given the `entity` for this reference.
fn from_ref(entity: Entity) -> Self;
}
/// Plugin for automatically converting [`GltfRef`]s into their corresponding
/// `T`.
pub struct GltfRefPlugin<T: Component + TypePath>(PhantomData<T>);
pub struct GltfRefPlugin<T: Component + FromGltfRef>(PhantomData<T>);
impl<T: Component + TypePath> Plugin for GltfRefPlugin<T>
where
Entity: Into<T>,
{
impl<T: Component + FromGltfRef + Reflect + TypePath> Plugin for GltfRefPlugin<T> {
fn build(&self, app: &mut App) {
app.register_type::<GltfRef<T>>().add_systems(
Update,
@ -147,10 +147,7 @@ where
// Manual implementation of Default for GltfRefPlugin to avoid `Default` trait
// bounds on `T`.
impl<T: Component + TypePath> Default for GltfRefPlugin<T>
where
Entity: Into<T>,
{
impl<T: Component + FromGltfRef> Default for GltfRefPlugin<T> {
fn default() -> Self {
Self(Default::default())
}