diff --git a/tools/leveleditor/include/properties.h b/tools/leveleditor/include/properties.h index 2ad87b7..5cfaa04 100644 --- a/tools/leveleditor/include/properties.h +++ b/tools/leveleditor/include/properties.h @@ -2,6 +2,7 @@ #include #include +#include struct Context; struct InfoComponent; @@ -24,6 +25,8 @@ private: QVBoxLayout* layout = nullptr; + QPushButton* addComponentButton; + QList sections; Context& context; diff --git a/tools/leveleditor/src/properties.cpp b/tools/leveleditor/src/properties.cpp index e180637..7e79100 100644 --- a/tools/leveleditor/src/properties.cpp +++ b/tools/leveleditor/src/properties.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "context.h" #include "ecs.h" @@ -20,11 +21,38 @@ Properties::Properties(Context& context, QWidget* parent) : QWidget(parent), con layout->setAlignment(Qt::AlignTop); layout->setSpacing(0); + QMenu* addComponentMenu = new QMenu(); + + QAction* addMeshComponent = new QAction("Mesh"); + connect(addMeshComponent, &QAction::triggered, [&context] { + const auto& entity = context.selectedEntities[0]; + + ECS::addComponent(entity); + + emit context.entitiesChanged(); + }); + addComponentMenu->addAction(addMeshComponent); + + QAction* addLightComponent = new QAction("Light"); + connect(addLightComponent, &QAction::triggered, [&context] { + const auto& entity = context.selectedEntities[0]; + + ECS::addComponent(entity); + + emit context.entitiesChanged(); + }); + addComponentMenu->addAction(addLightComponent); + + addComponentButton = new QPushButton("Add Component..."); + addComponentButton->setMenu(addComponentMenu); + layout->addWidget(addComponentButton); + setLayout(layout); rebuild(); connect(&context, &Context::selectionChanged, this, &Properties::rebuild); + connect(&context, &Context::entitiesChanged, this, &Properties::rebuild); } void Properties::rebuild() { @@ -35,6 +63,8 @@ void Properties::rebuild() { sections.clear(); + addComponentButton->setEnabled(context.selectedEntities.size() != 0); + if(context.selectedEntities.size() == 0) return;