From a80495b3dde3e8da92f16148bf0e3acfc77a0439 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Wed, 26 Dec 2018 07:03:05 -0500 Subject: [PATCH] Add entity menu --- tools/common/include/context.h | 1 + tools/leveleditor/src/hierarchy.cpp | 13 +++++++++++-- tools/leveleditor/src/mainwindow.cpp | 22 ++++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/tools/common/include/context.h b/tools/common/include/context.h index 6bb6dd8..6f78735 100644 --- a/tools/common/include/context.h +++ b/tools/common/include/context.h @@ -15,4 +15,5 @@ public: signals: void selectionChanged(); + void entitiesChanged(); }; diff --git a/tools/leveleditor/src/hierarchy.cpp b/tools/leveleditor/src/hierarchy.cpp index e50eb12..9db3687 100644 --- a/tools/leveleditor/src/hierarchy.cpp +++ b/tools/leveleditor/src/hierarchy.cpp @@ -20,9 +20,16 @@ Hierarchy::Hierarchy(Context& context, QWidget* parent) : QWidget(parent), conte context.selectedEntities.clear(); if(index.isValid()) { - const auto entity = ECS::getWorldEntities(worldManager.getCurrentWorld())[index.row()]; + const auto entities = ECS::getWorldEntities(worldManager.getCurrentWorld()); - context.selectedEntities.push_back(entity); + QList filteredEntities; + for(auto entity : entities) { + const auto info = ECS::getComponent(entity); + if(info) + filteredEntities.push_back(entity); + } + + context.selectedEntities.push_back(filteredEntities[index.row()]); } emit context.selectionChanged(); @@ -31,6 +38,8 @@ Hierarchy::Hierarchy(Context& context, QWidget* parent) : QWidget(parent), conte listModel = new QStringListModel(); listView->setModel(listModel); + connect(&context, &Context::entitiesChanged, this, &Hierarchy::rebuild); + rebuild(); } diff --git a/tools/leveleditor/src/mainwindow.cpp b/tools/leveleditor/src/mainwindow.cpp index 9b88841..9954cdd 100644 --- a/tools/leveleditor/src/mainwindow.cpp +++ b/tools/leveleditor/src/mainwindow.cpp @@ -12,6 +12,8 @@ #include "renderer.h" #include "hierarchy.h" #include "properties.h" +#include "ecs.h" +#include "worldmanager.h" MainWindow::MainWindow(Context& context) : context(context) { setWindowTitle("Level Editor"); @@ -82,6 +84,26 @@ MainWindow::MainWindow(Context& context) : context(context) { editMenu->addAction(userPreferenes); } + QMenu* entityMenu = new QMenu("Entity"); + mainMenuBar->addMenu(entityMenu); + + // entity + { + QAction* createEntity = new QAction("Create"); + connect(createEntity, &QAction::triggered, [&context] { + EntityID entity = ECS::createEntity(worldManager.getCurrentWorld()); + + InfoComponent* info = ECS::addComponent(entity); + info->name = "New Entity"; + + ECS::addComponent(entity); + + emit context.entitiesChanged(); + }); + createEntity->setIcon(QIcon::fromTheme("list-add")); + entityMenu->addAction(createEntity); + } + QMenu* toolsMenu = new QMenu("Tools"); mainMenuBar->addMenu(toolsMenu);