From 53b8bb509930eda7afdd2f55cddd771f501fea31 Mon Sep 17 00:00:00 2001 From: jiegeaiai Date: Sun, 1 Dec 2024 17:34:26 +0800 Subject: [PATCH] modify entity brower --- Source/src/entities/EntitiesManager.cpp | 33 ++++++++++----- Source/src/entities/EntitiesManager.h | 2 + Source/src/entities/Entity.cpp | 2 + Source/src/entities/Entity.h | 4 ++ Source/src/translations/Dyt_zh_CN.ts | 22 +++++----- .../src/ui/ModelBrowser/EntityListDialog.cpp | 41 ++++++++++++------- Source/src/ui/ModelBrowser/EntityListDialog.h | 2 + .../src/ui/ModelBrowser/ModelTreeWidget.cpp | 38 ++++++++++------- Source/src/ui/ModelBrowser/ModelTreeWidget.h | 1 + Source/workspace/default2.dyt | 5 +++ 10 files changed, 100 insertions(+), 50 deletions(-) diff --git a/Source/src/entities/EntitiesManager.cpp b/Source/src/entities/EntitiesManager.cpp index cdfa8130..286b41aa 100644 --- a/Source/src/entities/EntitiesManager.cpp +++ b/Source/src/entities/EntitiesManager.cpp @@ -56,22 +56,13 @@ bool EntitiesManager::Parse(const tinyxml2::XMLElement* element, WorkSpace* work Entity* parent = nullptr; while (nullptr != xmlElement) { const char* name = xmlElement->Name(); - Entity* entity = Create(name); + Entity* entity = Create(xmlElement, parent, workspce); if (nullptr == entity) { xmlElement = xmlElement->NextSiblingElement(); LOG_WARN("Create entity failed {}", name); continue; } - entity->Serialize(xmlElement); - AddEntity(entity); - - entity->SetParent(parent); - if (nullptr == parent) { - workspce->AddEntity(entity); - } - //parent = entity; - xmlElement = xmlElement->NextSiblingElement(); } @@ -85,6 +76,28 @@ Entity* EntitiesManager::Create(const QString& name) { return nullptr; } +Entity* EntitiesManager::Create(const tinyxml2::XMLElement* element, Entity* parent, WorkSpace* workspce) { + const char* name = element->Name(); + if (strcmp(name, "Entity") != 0) { + return nullptr; + } + + Entity* entity = new Entity(this); + if (nullptr == entity) { + LOG_WARN("create entity failed"); + return nullptr; + } + + entity->Serialize(element); + AddEntity(entity); + + entity->SetParent(parent); + if (nullptr == parent) { + workspce->AddEntity(entity); + } + return entity; +} + Entity* EntitiesManager::CreateMesh(const QString& mesh) { Entity* entity = Create("Entity"); AddEntity(entity); diff --git a/Source/src/entities/EntitiesManager.h b/Source/src/entities/EntitiesManager.h index 2bee836a..80bdd69a 100644 --- a/Source/src/entities/EntitiesManager.h +++ b/Source/src/entities/EntitiesManager.h @@ -28,6 +28,8 @@ public: Entity* GetEntity(const QString& uuid); + Entity* Create(const tinyxml2::XMLElement* element, Entity* parent, WorkSpace* workspce); + protected: void AddEntity(Entity* entity); void RemoveEntity(Entity* entity); diff --git a/Source/src/entities/Entity.cpp b/Source/src/entities/Entity.cpp index 64d3a581..1fcb5053 100644 --- a/Source/src/entities/Entity.cpp +++ b/Source/src/entities/Entity.cpp @@ -45,6 +45,8 @@ void Entity::Serialize(const tinyxml2::XMLElement* element) { const char* name = xmlElement->Name(); SceneComponent* conponent = ComponentFactory::Create(name, rootComponet_); if (nullptr == conponent) { + EntitiesManager::Get().Create(xmlElement, this, workspace_); + xmlElement = xmlElement->NextSiblingElement(); continue; } diff --git a/Source/src/entities/Entity.h b/Source/src/entities/Entity.h index 440c1f7d..78eb8425 100644 --- a/Source/src/entities/Entity.h +++ b/Source/src/entities/Entity.h @@ -64,6 +64,10 @@ public: return rootComponet_; } + const std::vector GetChilder() const { + return childer_; + } + Q_SIGNALS: void NameChanged(const QString& name); diff --git a/Source/src/translations/Dyt_zh_CN.ts b/Source/src/translations/Dyt_zh_CN.ts index a98c16f3..1e7628f9 100644 --- a/Source/src/translations/Dyt_zh_CN.ts +++ b/Source/src/translations/Dyt_zh_CN.ts @@ -401,57 +401,57 @@ ModelTreeWidget - + Release Track - + Add boke Entity - + Add lsjhqt Entity - + Add nimizi Entity - + Add tkdlj Entity - + Add jiaofan Entity - + Add satellite Entity - + Track - + Add Mesh Component - + Add Path Component - + Delete diff --git a/Source/src/ui/ModelBrowser/EntityListDialog.cpp b/Source/src/ui/ModelBrowser/EntityListDialog.cpp index 8d88c3c8..66690efc 100644 --- a/Source/src/ui/ModelBrowser/EntityListDialog.cpp +++ b/Source/src/ui/ModelBrowser/EntityListDialog.cpp @@ -61,19 +61,32 @@ void EntityListDialog::InitEintities() { const std::vector& entities = workSpace->GetEntities(); for (const auto& entity : entities) { - const QString& entityName = entity->GetName(); - - QTreeWidgetItem* item = new QTreeWidgetItem; - connect(entity, &Entity::NameChanged, [item](const QString& name) { - LOG_WARN("entity name changed: {}", name.toStdString()); - item->setText(0, name); - } - ); - item->setText(0, entityName); - QVariant root; - root.setValue(entity); - item->setData(0, E_Entity, root); - item->setData(0, E_UUid, entity->GetUUid()); - ui->modelTreeWidget->addTopLevelItem(item); + AddEntity(nullptr, entity); + } +} + +void EntityListDialog::AddEntity(class QTreeWidgetItem* parent, Entity* entity) { + const QString& entityName = entity->GetName(); + + QTreeWidgetItem* item = new QTreeWidgetItem; + connect(entity, &Entity::NameChanged, [item](const QString& name) { + LOG_WARN("entity name changed: {}", name.toStdString()); + item->setText(0, name); + } + ); + item->setText(0, entityName); + QVariant root; + root.setValue(entity); + item->setData(0, E_Entity, root); + item->setData(0, E_UUid, entity->GetUUid()); + if (nullptr == parent) { + ui->modelTreeWidget->addTopLevelItem(item); + } else { + parent->addChild(item); + } + + const std::vector& children = entity->GetChilder(); + for (const auto& child : children) { + AddEntity(item, child); } } diff --git a/Source/src/ui/ModelBrowser/EntityListDialog.h b/Source/src/ui/ModelBrowser/EntityListDialog.h index 4575fb86..6eef7e17 100644 --- a/Source/src/ui/ModelBrowser/EntityListDialog.h +++ b/Source/src/ui/ModelBrowser/EntityListDialog.h @@ -24,6 +24,8 @@ private: void initUI(); void InitEintities(); + void AddEntity(class QTreeWidgetItem* parent, Entity* entity); + private: Ui::EntityListDialog* ui; diff --git a/Source/src/ui/ModelBrowser/ModelTreeWidget.cpp b/Source/src/ui/ModelBrowser/ModelTreeWidget.cpp index c611054d..5b44fabd 100644 --- a/Source/src/ui/ModelBrowser/ModelTreeWidget.cpp +++ b/Source/src/ui/ModelBrowser/ModelTreeWidget.cpp @@ -53,21 +53,7 @@ void ModelTreeWidget::OnWorkspaceChange(WorkSpace* workSpace) { const std::vector& entities = currentWorkSpace_->GetEntities(); for (const auto& entity : entities) { - const QString& entityName = entity->GetName(); - - QTreeWidgetItem* item = new QTreeWidgetItem; - connect(entity, &Entity::NameChanged, [item](const QString& name) { - LOG_WARN("entity name changed: {}", name.toStdString()); - item->setText(0, name); - } - ); - item->setText(0, entityName); - QVariant root; - root.setValue(entity); - item->setData(0, E_Entity, root); - item->setData(0, E_UUid, entity->GetUUid()); - root_->addChild(item); - //addTopLevelItem(root_); + AddEntity(root_, entity); } } @@ -357,3 +343,25 @@ void ModelTreeWidget::OnTrackEntity(Entity* entity) { } } } + +void ModelTreeWidget::AddEntity(class QTreeWidgetItem* parent, Entity* entity) { + const QString& entityName = entity->GetName(); + + QTreeWidgetItem* item = new QTreeWidgetItem; + connect(entity, &Entity::NameChanged, [item](const QString& name) { + LOG_WARN("entity name changed: {}", name.toStdString()); + item->setText(0, name); + } + ); + item->setText(0, entityName); + QVariant root; + root.setValue(entity); + item->setData(0, E_Entity, root); + item->setData(0, E_UUid, entity->GetUUid()); + parent->addChild(item); + + const std::vector& childer = entity->GetChilder(); + for (const auto& child : childer) { + AddEntity(item, child); + } +} diff --git a/Source/src/ui/ModelBrowser/ModelTreeWidget.h b/Source/src/ui/ModelBrowser/ModelTreeWidget.h index 2910ab05..ab0aaa71 100644 --- a/Source/src/ui/ModelBrowser/ModelTreeWidget.h +++ b/Source/src/ui/ModelBrowser/ModelTreeWidget.h @@ -46,6 +46,7 @@ protected: private: //void initUI(); + void AddEntity(class QTreeWidgetItem* parent, Entity* entity); private: WorkSpace* currentWorkSpace_{ nullptr }; diff --git a/Source/workspace/default2.dyt b/Source/workspace/default2.dyt index 0ff47054..527f807a 100644 --- a/Source/workspace/default2.dyt +++ b/Source/workspace/default2.dyt @@ -21,6 +21,11 @@ + + + + +