From b25fc56ea680e1ecc69bb3d184f874563c129c99 Mon Sep 17 00:00:00 2001 From: "kaosat.dev" Date: Tue, 16 Jul 2024 11:06:55 +0200 Subject: [PATCH] refactor(Blenvy:Bevy): * removed "Library" component & co * "InBlueprint" components are now always inserted: removed "NoInblueprint" component --- crates/blenvy/README.md | 15 --------- .../src/blueprints/spawn_from_blueprints.rs | 32 ++++++------------- 2 files changed, 9 insertions(+), 38 deletions(-) diff --git a/crates/blenvy/README.md b/crates/blenvy/README.md index 3b3a8fc..3fcde10 100644 --- a/crates/blenvy/README.md +++ b/crates/blenvy/README.md @@ -169,21 +169,6 @@ There is also a ```BluePrintBundle``` for convenience , which just has ## Additional information - When a blueprint is spawned, all its children entities (and nested children etc) also have an ```InBlueprint``` component that gets insert -- In cases where that is undesirable, you can add a ```NoInBlueprint``` component on the entity you spawn the blueprint with, and the components above will not be add -- if you want to overwrite the **path** where this crate looks for blueprints (gltf files) , you can add a ```Library``` component , and that will be used instead of the default path -ie : - -```rust no_run -commands - .spawn(( - Name::from("test"), - BluePrintBundle { - blueprint: BlueprintInfo("TestBlueprint".to_string()), - ..Default::default() - }, - Library("models".into()) // now the path to the blueprint above will be /assets/models/TestBlueprint.glb - )) -``` - this crate also provides a special optional ```GameWorldTag``` component: this is useful when you want to keep all your spawned entities inside a root entity You can use it in your queries to add your entities as children of this "world" diff --git a/crates/blenvy/src/blueprints/spawn_from_blueprints.rs b/crates/blenvy/src/blueprints/spawn_from_blueprints.rs index c681b71..f82e04e 100644 --- a/crates/blenvy/src/blueprints/spawn_from_blueprints.rs +++ b/crates/blenvy/src/blueprints/spawn_from_blueprints.rs @@ -37,23 +37,11 @@ impl BlueprintInfo { #[reflect(Component)] pub struct SpawnBlueprint; - - #[derive(Component, Reflect, Default, Debug)] #[reflect(Component)] -/// flag component marking any spwaned child of blueprints ..unless the original entity was marked with the `NoInBlueprint` marker component +/// flag component marking any spwaned child of blueprints pub struct InBlueprint; -#[derive(Component, Reflect, Default, Debug)] -#[reflect(Component)] -/// flag component preventing any spawned child of blueprints to be marked with the `InBlueprint` component -pub struct NoInBlueprint; - -#[derive(Component, Reflect, Default, Debug)] -#[reflect(Component)] -// this allows overriding the default library path for a given entity/blueprint -pub struct Library(pub PathBuf); - #[derive(Component, Reflect, Default, Debug)] #[reflect(Component)] /// flag component to force adding newly spawned entity as child of game world @@ -72,7 +60,7 @@ pub struct HideUntilReady; #[derive(Component)] /// marker component, gets added to all children of a currently spawning blueprint instance, can be usefull to avoid manipulating still in progress entities -pub struct BlueprintDisabled; +pub struct BlueprintInstanceDisabled; #[derive(Event, Debug)] pub enum BlueprintEvent { @@ -228,7 +216,7 @@ pub(crate) fn blueprints_prepare_spawn( .entity(entity) .insert(bevy::prelude::Name::from(blueprint_info.name.clone())); // add the blueprint spawning marker - commands.entity(entity).insert((BlueprintSpawning)); + commands.entity(entity).insert(BlueprintSpawning); } } @@ -510,7 +498,7 @@ pub(crate) fn blueprints_scenes_spawned( } } // Mark all components as "Disabled" (until Bevy gets this as first class feature) - commands.entity(child).insert(BlueprintDisabled); + commands.entity(child).insert(BlueprintInstanceDisabled); } } @@ -548,7 +536,6 @@ pub(crate) fn blueprints_cleanup_spawned_scene( &OriginalChildren, Option<&Name>, &BlueprintAnimations, - Option<&NoInBlueprint>, ), Added, >, @@ -563,7 +550,7 @@ pub(crate) fn blueprints_cleanup_spawned_scene( all_names: Query<&Name>, ) { - for (original, children, original_children, name, animations, no_inblueprint) in + for (original, children, original_children, name, animations) in blueprint_scenes.iter() { info!("YOOO ready !! removing empty nodes {:?}", name); @@ -585,11 +572,10 @@ pub(crate) fn blueprints_cleanup_spawned_scene( // we flag all children of the blueprint instance with 'InBlueprint' // can be usefull to filter out anything that came from blueprints vs normal children - if no_inblueprint.is_none() { - for child in all_children.iter_descendants(blueprint_root_entity) { - commands.entity(child).insert(InBlueprint); // we do this here in order to avoid doing it to normal children - } + for child in all_children.iter_descendants(blueprint_root_entity) { + commands.entity(child).insert(InBlueprint); // we do this here in order to avoid doing it to normal children } + // copy components into from blueprint instance's blueprint_root_entity to original entity commands.add(CopyComponents { @@ -758,7 +744,7 @@ pub(crate) fn blueprints_finalize_instances( } for child in all_children.iter_descendants(entity) { - commands.entity(child).remove::(); + commands.entity(child).remove::(); } if hide_until_ready.is_some() {