From 4aa2ef382ce1bcfe12e0c4fa9ff023f9d44d3d8f Mon Sep 17 00:00:00 2001 From: DasLixou Date: Thu, 22 Aug 2024 15:45:26 +0200 Subject: [PATCH] HOLY SHIT THAT WORKS --- crates/blenvy/src/components/fake_entity.rs | 73 ++- crates/blenvy/src/components/process_gltfs.rs | 83 ++- examples/relations/Cargo.toml | 1 + examples/relations/art/untitled.blend | Bin 894628 -> 900532 bytes examples/relations/assets/levels/World.glb | Bin 3424 -> 4804 bytes examples/relations/assets/registry.json | 525 ++++++++++++++++++ examples/relations/src/main.rs | 2 + .../bevy_components/registry/registry.py | 2 +- 8 files changed, 674 insertions(+), 12 deletions(-) diff --git a/crates/blenvy/src/components/fake_entity.rs b/crates/blenvy/src/components/fake_entity.rs index 0ff7214..948de26 100644 --- a/crates/blenvy/src/components/fake_entity.rs +++ b/crates/blenvy/src/components/fake_entity.rs @@ -1,11 +1,41 @@ -use std::{alloc::Layout, num::NonZeroU32}; +use std::{alloc::Layout, cell::Cell, num::NonZeroU32}; use bevy::{ + core::Name, + ecs::world::DeferredWorld, + gltf::GltfExtras, log::{info, warn}, + prelude::{HierarchyQueryExt, Parent, QueryState, With, World}, reflect::ReflectDeserialize, + scene::{InstanceId, SceneInstance}, }; use serde::Deserialize; +pub(crate) struct BadWorldAccess { + world: *mut World, + names: QueryState<(bevy::ecs::entity::Entity, &'static Name), With>, + hierarchy: QueryState<&'static Parent, ()>, + scene_instances: QueryState<&'static SceneInstance, ()>, +} + +impl BadWorldAccess { + pub unsafe fn new(world: &mut World) -> Self { + BadWorldAccess { + world, + // We have to check that we focus on a node, not a mesh with the same name. + // Currently, the only possible way of checking this is with `GltfExtras`, so selected entities must at least have one component. + names: world.query_filtered::<(bevy::ecs::entity::Entity, &Name), With>(), + hierarchy: world.query::<&Parent>(), + scene_instances: world.query::<&SceneInstance>(), + } + } +} + +thread_local! { + pub(crate) static BAD_WORLD_ACCESS: Cell> = Cell::new(None); + pub(crate) static INSTANCE_ID: Cell> = Cell::new(None); +} + const _: () = { let real = Layout::new::(); let fake = Layout::new::(); @@ -39,7 +69,46 @@ impl<'de> Deserialize<'de> for Entity { let entity = if let Some(name) = entity_data.name { info!("Found name {name}"); - bevy::ecs::entity::Entity::PLACEHOLDER + let BadWorldAccess { + world, + mut names, + mut hierarchy, + mut scene_instances, + } = BAD_WORLD_ACCESS.take().expect("No bad world access :c"); + let instance = INSTANCE_ID.get().expect("No instance id set :c"); + + let mut target = None; + let w = unsafe { &*world.cast_const() }; + 'search: for (e, n) in names.iter(w) { + if !name.eq(n.as_str()) { + continue; + } + + let mut dw = DeferredWorld::from(unsafe { &mut *world }); + let hierarchy = dw.query(&mut hierarchy); + + for parent in hierarchy.iter_ancestors(e) { + let Ok(id) = scene_instances.get(w, parent) else { + continue; + }; + if instance.eq(id) { + target = Some(e); + break 'search; + } + } + } + + BAD_WORLD_ACCESS.set(Some(BadWorldAccess { + world, + names, + hierarchy, + scene_instances, + })); + + target.unwrap_or_else(|| { + warn!("No entity found for '{name}' - perhaps it doesn't contain any components from blender?"); + bevy::ecs::entity::Entity::PLACEHOLDER + }) } else { warn!("No object was specified for Entity relation, using `Entity::PLACEHOLDER`."); bevy::ecs::entity::Entity::PLACEHOLDER diff --git a/crates/blenvy/src/components/process_gltfs.rs b/crates/blenvy/src/components/process_gltfs.rs index d861662..71b895f 100644 --- a/crates/blenvy/src/components/process_gltfs.rs +++ b/crates/blenvy/src/components/process_gltfs.rs @@ -1,20 +1,26 @@ +use std::ops::Deref; + use bevy::{ core::Name, ecs::{ entity::Entity, query::{Added, Without}, reflect::{AppTypeRegistry, ReflectComponent}, - world::World, + world::{DeferredWorld, World}, }, gltf::{GltfExtras, GltfMaterialExtras, GltfMeshExtras, GltfSceneExtras}, hierarchy::Parent, log::{debug, warn}, + prelude::HierarchyQueryExt, reflect::{Reflect, TypeRegistration}, + scene::SceneInstance, utils::HashMap, }; use crate::{ronstring_to_reflect_component, GltfProcessed}; +use super::fake_entity::{self, BadWorldAccess}; + // , mut entity_components: HashMap, TypeRegistration)>> fn find_entity_components( entity: Entity, @@ -57,22 +63,44 @@ fn find_entity_components( /// main function: injects components into each entity in gltf files that have `gltf_extras`, using reflection pub fn add_components_from_gltf_extras(world: &mut World) { - let mut extras = world.query_filtered::<(Entity, Option<&Name>, &GltfExtras, Option<&Parent>), (Added, Without)>(); - let mut scene_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfSceneExtras, Option<&Parent>), (Added, Without)>(); - let mut mesh_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfMeshExtras, Option<&Parent>), (Added, Without)>(); - let mut material_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfMaterialExtras, Option<&Parent>), (Added, Without)>(); + let mut extras = world.query_filtered::<(Entity, Option<&Name>, &GltfExtras), (Added, Without)>(); + let mut scene_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfSceneExtras), (Added, Without)>(); + let mut mesh_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfMeshExtras), (Added, Without)>(); + let mut material_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfMaterialExtras), (Added, Without)>(); + + let mut scene_instances = world.query::<&SceneInstance>(); + + let mut hierarchy_state = world.query::<&Parent>(); + let mut __unsafe_dw = DeferredWorld::from(unsafe { &mut *(world as *mut _) }); + let hierarchy = __unsafe_dw.query(&mut hierarchy_state); let mut entity_components: HashMap, TypeRegistration)>> = HashMap::new(); // let gltf_components_config = world.resource::(); - for (entity, name, extra, parent) in extras.iter(world) { + unsafe { + // SAFETY: we don't do anything harmful until taking this, and have full world access + fake_entity::BAD_WORLD_ACCESS.set(Some(BadWorldAccess::new(world))); + } + + for (entity, name, extra) in extras.iter(world) { + let parent = hierarchy.get(entity).ok(); debug!( "Gltf Extra: Name: {:?}, entity {:?}, parent: {:?}, extras {:?}", name, entity, parent, extra ); + if let Some(instance) = hierarchy + .iter_ancestors(entity) + .find_map(|p| scene_instances.get(world, p).ok()) + { + fake_entity::INSTANCE_ID.set(Some(*instance.deref())); + } else { + warn!("Can't find higher-hierarchy `SceneInstance` for entity '{name:?}'"); + fake_entity::INSTANCE_ID.set(None); + }; + let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); @@ -80,15 +108,27 @@ pub fn add_components_from_gltf_extras(world: &mut World) { let (target_entity, updated_components) = find_entity_components(entity, name, parent, reflect_components, &entity_components); + entity_components.insert(target_entity, updated_components); } - for (entity, name, extra, parent) in scene_extras.iter(world) { + for (entity, name, extra) in scene_extras.iter(world) { + let parent = hierarchy.get(entity).ok(); debug!( "Gltf Scene Extra: Name: {:?}, entity {:?}, parent: {:?}, scene_extras {:?}", name, entity, parent, extra ); + if let Some(instance) = hierarchy + .iter_ancestors(entity) + .find_map(|p| scene_instances.get(world, p).ok()) + { + fake_entity::INSTANCE_ID.set(Some(*instance.deref())); + } else { + warn!("Can't find higher-hierarchy `SceneInstance` for entity '{name:?}'"); + fake_entity::INSTANCE_ID.set(None); + }; + let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); @@ -98,12 +138,23 @@ pub fn add_components_from_gltf_extras(world: &mut World) { entity_components.insert(target_entity, updated_components); } - for (entity, name, extra, parent) in mesh_extras.iter(world) { + for (entity, name, extra) in mesh_extras.iter(world) { + let parent = hierarchy.get(entity).ok(); debug!( "Gltf Mesh Extra: Name: {:?}, entity {:?}, parent: {:?}, mesh_extras {:?}", name, entity, parent, extra ); + if let Some(instance) = hierarchy + .iter_ancestors(entity) + .find_map(|p| scene_instances.get(world, p).ok()) + { + fake_entity::INSTANCE_ID.set(Some(*instance.deref())); + } else { + warn!("Can't find higher-hierarchy `SceneInstance` for entity '{name:?}'"); + fake_entity::INSTANCE_ID.set(None); + }; + let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); @@ -113,12 +164,23 @@ pub fn add_components_from_gltf_extras(world: &mut World) { entity_components.insert(target_entity, updated_components); } - for (entity, name, extra, parent) in material_extras.iter(world) { + for (entity, name, extra) in material_extras.iter(world) { + let parent = hierarchy.get(entity).ok(); debug!( "Name: {:?}, entity {:?}, parent: {:?}, material_extras {:?}", name, entity, parent, extra ); + if let Some(instance) = hierarchy + .iter_ancestors(entity) + .find_map(|p| scene_instances.get(world, p).ok()) + { + fake_entity::INSTANCE_ID.set(Some(*instance.deref())); + } else { + warn!("Can't find higher-hierarchy `SceneInstance` for entity '{name:?}'"); + fake_entity::INSTANCE_ID.set(None); + }; + let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); @@ -128,6 +190,9 @@ pub fn add_components_from_gltf_extras(world: &mut World) { entity_components.insert(target_entity, updated_components); } + fake_entity::BAD_WORLD_ACCESS.set(None); + fake_entity::INSTANCE_ID.set(None); + for (entity, components) in entity_components { let type_registry: &AppTypeRegistry = world.resource(); let type_registry = type_registry.clone(); diff --git a/examples/relations/Cargo.toml b/examples/relations/Cargo.toml index 03981ed..1f7cdae 100644 --- a/examples/relations/Cargo.toml +++ b/examples/relations/Cargo.toml @@ -6,4 +6,5 @@ license = "MIT OR Apache-2.0" [dependencies] bevy = { version = "0.14", features = ["dynamic_linking"] } +bevy-inspector-egui = "0.25.2" blenvy = { path = "../../crates/blenvy" } diff --git a/examples/relations/art/untitled.blend b/examples/relations/art/untitled.blend index 189b2b93f21b7f3b0675afd5c4a97444646402a5..a344db60e7b1a9ab764bc1afcc8061440a7f3fc5 100644 GIT binary patch delta 89789 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�V({A(6pOp}(UX*o^Hsaj6a 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 BN)rG8 delta 91845 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 diff --git a/examples/relations/assets/levels/World.glb b/examples/relations/assets/levels/World.glb index 2c9c0cc014eee627a13752ed1b5475f4503a36a3..a85866c8aaf93da21a3b5088d75158ada1e98dfb 100644 GIT binary patch delta 269 zcmWNKu}Z^07=SOiHqZidnwz+rGc;a?cr0`WGfbs9Z;A*!XY?ld$jKcVk4}V4BSyAz}pb zbecf~o!5uVrIZ1I`AeG5Ch7d?Ifv-hcWJ;W6+tKhUs5SZo4EnwTq+qVL8TXPpR_%f zD&aHALXRs(Dc7;N(m$r7mu71xB+yNI*C$sHNdo=zn@*DS&IS}BRczo*Q#-Y$5$aD2 zdV~)RS=F(jDw1NqUK%>L2(DK8-a5ikiOMa#tgqFWC%Il(2TkUOVsW?FjT;D^UUrLt NZQx?dj`7#f#{bNnMa2LB delta 76 zcmV-S0JHzZCEywkXKYkP0ssI2U=08O{05N@v$4a90h6=>*|YEi2LiLx2EhT7Q3)Fn iF*YzbeO-MZAV>xP076Ml0F$5%C$sAe*#fhC3`hgG))-g- diff --git a/examples/relations/assets/registry.json b/examples/relations/assets/registry.json index 3f40219..1916754 100644 --- a/examples/relations/assets/registry.json +++ b/examples/relations/assets/registry.json @@ -3609,6 +3609,30 @@ "type": "object", "typeInfo": "Value" }, + "bevy_egui::EguiSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_egui::EguiSettings", + "properties": { + "default_open_url_target": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "scale_factor": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "scale_factor" + ], + "short_name": "EguiSettings", + "type": "object", + "typeInfo": "Struct" + }, "bevy_gizmos::aabb::AabbGizmoConfigGroup": { "additionalProperties": false, "isComponent": false, @@ -12776,6 +12800,14 @@ "type": "object", "typeInfo": "Value" }, + "core::ops::Range": { + "isComponent": false, + "isResource": false, + "long_name": "core::ops::Range", + "short_name": "Range", + "type": "object", + "typeInfo": "Value" + }, "core::option::Option<(u8, u8)>": { "isComponent": false, "isResource": false, @@ -13490,6 +13522,295 @@ "type": "object", "typeInfo": "Struct" }, + "glam::BVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec2", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "BVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec3", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "z": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "BVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec3A": { + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec3A", + "short_name": "BVec3A", + "type": "object", + "typeInfo": "Value" + }, + "glam::BVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec4", + "properties": { + "w": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "z": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "BVec4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec4A": { + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec4A", + "short_name": "BVec4A", + "type": "object", + "typeInfo": "Value" + }, + "glam::DAffine2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DAffine2", + "properties": { + "matrix2": { + "type": { + "$ref": "#/$defs/glam::DMat2" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + }, + "required": [ + "matrix2", + "translation" + ], + "short_name": "DAffine2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DAffine3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DAffine3", + "properties": { + "matrix3": { + "type": { + "$ref": "#/$defs/glam::DMat3" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + } + }, + "required": [ + "matrix3", + "translation" + ], + "short_name": "DAffine3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DMat2", + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + }, + "required": [ + "x_axis", + "y_axis" + ], + "short_name": "DMat2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DMat3", + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis" + ], + "short_name": "DMat3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DMat4", + "properties": { + "w_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis", + "w_axis" + ], + "short_name": "DMat4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DQuat": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DQuat", + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "DQuat", + "type": "object", + "typeInfo": "Struct" + }, "glam::DVec2": { "additionalProperties": false, "isComponent": false, @@ -13515,6 +13836,74 @@ "type": "object", "typeInfo": "Struct" }, + "glam::DVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DVec3", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "DVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DVec4", + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "DVec4", + "type": "object", + "typeInfo": "Struct" + }, "glam::IVec2": { "additionalProperties": false, "isComponent": false, @@ -13540,6 +13929,74 @@ "type": "object", "typeInfo": "Struct" }, + "glam::IVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::IVec3", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "IVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::IVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::IVec4", + "properties": { + "w": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "IVec4", + "type": "object", + "typeInfo": "Struct" + }, "glam::Mat2": { "additionalProperties": false, "isComponent": false, @@ -13565,6 +14022,37 @@ "type": "object", "typeInfo": "Struct" }, + "glam::Mat3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Mat3", + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis" + ], + "short_name": "Mat3", + "type": "object", + "typeInfo": "Struct" + }, "glam::Mat3A": { "additionalProperties": false, "isComponent": false, @@ -13726,6 +14214,43 @@ "type": "object", "typeInfo": "Struct" }, + "glam::UVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::UVec4", + "properties": { + "w": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "UVec4", + "type": "object", + "typeInfo": "Struct" + }, "glam::Vec2": { "additionalProperties": false, "isComponent": false, diff --git a/examples/relations/src/main.rs b/examples/relations/src/main.rs index 0e1c81e..fde8834 100644 --- a/examples/relations/src/main.rs +++ b/examples/relations/src/main.rs @@ -1,4 +1,5 @@ use bevy::prelude::*; +use bevy_inspector_egui::quick::WorldInspectorPlugin; use blenvy::{BlenvyPlugin, BlueprintInfo, GameWorldTag, HideUntilReady, SpawnBlueprint}; #[derive(Component, Reflect, Debug)] @@ -17,6 +18,7 @@ fn main() { .add_plugins(( DefaultPlugins.set(AssetPlugin::default()), BlenvyPlugin::default(), + WorldInspectorPlugin::new(), )) .register_type::() .register_type::() diff --git a/tools/blenvy/add_ons/bevy_components/registry/registry.py b/tools/blenvy/add_ons/bevy_components/registry/registry.py index 0d3b210..59941e5 100644 --- a/tools/blenvy/add_ons/bevy_components/registry/registry.py +++ b/tools/blenvy/add_ons/bevy_components/registry/registry.py @@ -26,7 +26,7 @@ def property_group_from_infos(property_group_name, property_group_parameters): return (property_group_pointer, property_group_class) def is_entity_poll(self, object): - return bpy.context.scene in object.users_scene # TODO: only select `object.type`s that get converted to entities and maybe something against other collection(instances)? + return True # TODO: only select `object.type`s that get converted to entities and maybe something against other collection(instances)? # this is where we store the information for all available components class ComponentsRegistry(PropertyGroup):