From 62ebc5d7a8a7bbf02ae065dfca661171155e7877 Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Wed, 4 Sep 2024 20:58:26 +0000 Subject: [PATCH 1/2] fix making breadcrumb static Signed-off-by: Ian Chen --- src/systems/breadcrumbs/Breadcrumbs.cc | 27 +++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/systems/breadcrumbs/Breadcrumbs.cc b/src/systems/breadcrumbs/Breadcrumbs.cc index 0f22687984..4b0132390a 100644 --- a/src/systems/breadcrumbs/Breadcrumbs.cc +++ b/src/systems/breadcrumbs/Breadcrumbs.cc @@ -387,8 +387,33 @@ bool Breadcrumbs::MakeStatic(Entity _entity, EntityComponentManager &_ecm) Entity childLinkEntity = _ecm.EntityByComponents( components::CanonicalLink(), components::ParentEntity(_entity)); + // If the entity does not have a canonical link, it may be a nested model if (childLinkEntity == kNullEntity) - return false; + { + // Find canonical link within nested model + auto findCanonicalLink = [&_ecm](Entity _parent, auto &&_findCanonicalLink) + { + auto nestedEntities = _ecm.EntitiesByComponents( + components::Model(), components::ParentEntity(_parent)); + for (const auto ent : nestedEntities) + { + auto comp = _ecm.Component(ent); + if (comp) + { + return comp->Data();; + } + else + { + // recursively search for canonical link + return _findCanonicalLink(ent, _findCanonicalLink); + } + } + return kNullEntity; + }; + childLinkEntity = findCanonicalLink(_entity, findCanonicalLink); + if (childLinkEntity == kNullEntity) + return false; + } Entity detachableJointEntity = _ecm.CreateEntity(); _ecm.CreateComponent(detachableJointEntity, From ed11cb54853ee310afd86516260190144f9e11d7 Mon Sep 17 00:00:00 2001 From: Ian Chen Date: Thu, 5 Sep 2024 16:40:08 +0000 Subject: [PATCH 2/2] lint Signed-off-by: Ian Chen --- src/systems/breadcrumbs/Breadcrumbs.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/systems/breadcrumbs/Breadcrumbs.cc b/src/systems/breadcrumbs/Breadcrumbs.cc index 4b0132390a..7db739da98 100644 --- a/src/systems/breadcrumbs/Breadcrumbs.cc +++ b/src/systems/breadcrumbs/Breadcrumbs.cc @@ -400,7 +400,7 @@ bool Breadcrumbs::MakeStatic(Entity _entity, EntityComponentManager &_ecm) auto comp = _ecm.Component(ent); if (comp) { - return comp->Data();; + return comp->Data(); } else {