Implement parent objects

This commit is contained in:
feedc0de committed 2023-12-29 22:39:28 +01:00
1 parent ba10f806a5
commit ac3f934118
6 files changed
+123 -28

No files matched your search

+15 -7
View File
@@ -961,10 +961,15 @@ template<> void ProjectTreeModel::onBeforeRemove<Sprite>(const Sprite &sprite)
template<> void ProjectTreeModel::onBeforeRemove<Object>(const Object &object)
{
for (auto &object : m_project->objects)
object.collisionEvents.erase(object.name);
for (Object &obj : m_project->objects)
{
if (!obj.parentName.isEmpty() && obj.parentName == object.name)
obj.parentName.clear();
for (auto &room : m_project->rooms)
obj.collisionEvents.erase(object.name);
}
for (Room &room : m_project->rooms)
for (auto iter = std::begin(room.objects); iter != std::end(room.objects); )
if (iter->objectName == object.name)
iter = room.objects.erase(iter);
@@ -1004,13 +1009,16 @@ template<> void ProjectTreeModel::onAfterRename<Sprite>(const Sprite &sprite, co
template<> void ProjectTreeModel::onBeforeRename<Object>(const Object &object, const QString &newName)
{
for (auto &object : m_project->objects)
for (Object &obj : m_project->objects)
{
if (const auto iter = object.collisionEvents.find(object.name); iter != std::end(object.collisionEvents))
if (!obj.parentName.isEmpty() && obj.parentName == object.name)
obj.parentName = newName;
if (const auto iter = obj.collisionEvents.find(object.name); iter != std::end(obj.collisionEvents))
{
auto node = object.collisionEvents.extract(iter);
auto node = obj.collisionEvents.extract(iter);
node.key() = newName;
object.collisionEvents.insert(std::move(node));
obj.collisionEvents.insert(std::move(node));
}
}