Fix existing nested prefabs sync applying when updating base prefab changes

#1015
This commit is contained in:
Wojtek Figat
2023-05-07 18:12:06 +02:00
parent dd7dc28828
commit 0c3d1e3ec6
3 changed files with 48 additions and 64 deletions

View File

@@ -7,17 +7,14 @@
Actor* SceneQuery::RaycastScene(const Ray& ray)
{
PROFILE_CPU();
#if SCENE_QUERIES_WITH_LOCK
ScopeLock lock(Level::ScenesLock);
#endif
Actor* target;
Actor* minTarget = nullptr;
Real distance;
Vector3 normal;
Real minDistance = MAX_Real;
for (int32 i = 0; i < Level::Scenes.Count(); i++)
{
target = Level::Scenes[i]->Intersects(ray, distance, normal);
@@ -30,7 +27,6 @@ Actor* SceneQuery::RaycastScene(const Ray& ray)
}
}
}
return minTarget;
}
@@ -38,16 +34,13 @@ bool GetAllSceneObjectsQuery(Actor* actor, Array<SceneObject*>& objects)
{
objects.Add(actor);
objects.Add(reinterpret_cast<SceneObject* const*>(actor->Scripts.Get()), actor->Scripts.Count());
return true;
}
void SceneQuery::GetAllSceneObjects(Actor* root, Array<SceneObject*>& objects)
{
ASSERT(root);
PROFILE_CPU();
Function<bool(Actor*, Array<SceneObject*>&)> func(GetAllSceneObjectsQuery);
root->TreeExecuteChildren<Array<SceneObject*>&>(func, objects);
}
@@ -56,19 +49,15 @@ bool GetAllSerializableSceneObjectsQuery(Actor* actor, Array<SceneObject*>& obje
{
if (EnumHasAnyFlags(actor->HideFlags, HideFlags::DontSave))
return false;
objects.Add(actor);
objects.Add(reinterpret_cast<SceneObject* const*>(actor->Scripts.Get()), actor->Scripts.Count());
return true;
}
void SceneQuery::GetAllSerializableSceneObjects(Actor* root, Array<SceneObject*>& objects)
{
ASSERT(root);
PROFILE_CPU();
Function<bool(Actor*, Array<SceneObject*>&)> func(GetAllSerializableSceneObjectsQuery);
root->TreeExecute<Array<SceneObject*>&>(func, objects);
}
@@ -82,9 +71,7 @@ bool GetAllActorsQuery(Actor* actor, Array<Actor*>& actors)
void SceneQuery::GetAllActors(Actor* root, Array<Actor*>& actors)
{
PROFILE_CPU();
ASSERT(root);
Function<bool(Actor*, Array<Actor*>&)> func(GetAllActorsQuery);
root->TreeExecuteChildren<Array<Actor*>&>(func, actors);
}
@@ -92,11 +79,9 @@ void SceneQuery::GetAllActors(Actor* root, Array<Actor*>& actors)
void SceneQuery::GetAllActors(Array<Actor*>& actors)
{
PROFILE_CPU();
#if SCENE_QUERIES_WITH_LOCK
ScopeLock lock(Level::ScenesLock);
#endif
for (int32 i = 0; i < Level::Scenes.Count(); i++)
GetAllActors(Level::Scenes[i], actors);
}