diff --git a/Source/Engine/Level/Level.cpp b/Source/Engine/Level/Level.cpp index 7b6a3844f..ab8a9bbfe 100644 --- a/Source/Engine/Level/Level.cpp +++ b/Source/Engine/Level/Level.cpp @@ -750,8 +750,10 @@ void FindActorsRecursive(Actor* node, const Tag& tag, const bool activeOnly, Arr FindActorsRecursive(child, tag, activeOnly, result); } -void FindActorsRecursiveByParentTags(Actor* node, const Array& tags, Array& result) +void FindActorsRecursiveByParentTags(Actor* node, const Array& tags, const bool activeOnly, Array& result) { + if (activeOnly && !node->GetIsActive()) + return; for (Tag tag : tags) { if (node->HasTag(tag)) @@ -761,7 +763,7 @@ void FindActorsRecursiveByParentTags(Actor* node, const Array& tags, Array< } } for (Actor* child : node->Children) - FindActorsRecursiveByParentTags(child, tags, result); + FindActorsRecursiveByParentTags(child, tags, activeOnly, result); } Actor* Level::FindActor(const Tag& tag, Actor* root) @@ -804,7 +806,7 @@ Array Level::FindActors(const Tag& tag, const bool activeOnly, Actor* ro return result; } -Array Level::FindActorsByParentTag(const Tag& parentTag, Actor* root) +Array Level::FindActorsByParentTag(const Tag& parentTag, const bool activeOnly, Actor* root) { PROFILE_CPU(); Array result; @@ -816,19 +818,19 @@ Array Level::FindActorsByParentTag(const Tag& parentTag, Actor* root) } if (subTags.Count() == 1) { - result = FindActors(subTags[0], root); + result = FindActors(subTags[0], activeOnly, root); return result; } if (root) { - FindActorsRecursiveByParentTags(root, subTags, result); + FindActorsRecursiveByParentTags(root, subTags, activeOnly, result); } else { ScopeLock lock(ScenesLock); for (Scene* scene : Scenes) - FindActorsRecursiveByParentTags(scene, subTags, result); + FindActorsRecursiveByParentTags(scene, subTags, activeOnly, result); } return result; diff --git a/Source/Engine/Level/Level.h b/Source/Engine/Level/Level.h index a7524b40a..9a041bda9 100644 --- a/Source/Engine/Level/Level.h +++ b/Source/Engine/Level/Level.h @@ -503,9 +503,10 @@ public: /// Search actors using a parent parentTag. /// /// The tag to search actors with subtags belonging to this tag + /// Find only active actors. /// The custom root actor to start searching from (hierarchical), otherwise null to search all loaded scenes. /// Returns all actors that have subtags belonging to the given parent parentTag - API_FUNCTION() static Array FindActorsByParentTag(const Tag& parentTag, Actor* root = nullptr); + API_FUNCTION() static Array FindActorsByParentTag(const Tag& parentTag, const bool activeOnly = false, Actor* root = nullptr); private: // Actor API