From 59d591267ed7581b8d81d1de57023b2e28dac199 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Tue, 2 Jan 2024 21:38:41 +0100 Subject: [PATCH] Fixed compiling under GCC and introduced Timer events --- src/editor/dialogs/addeventdialog.cpp | 56 ++++++++++++++++-------- src/editor/dialogs/addeventdialog.ui | 4 ++ src/editor/icons/event-alarm.png | Bin 0 -> 6984 bytes src/editor/models/objecteventsmodel.cpp | 36 ++++++++++++--- src/editor/resources_editor.qrc | 1 + src/projectcontainer.cpp | 16 ++++--- src/projectcontainer.h | 12 +++++ 7 files changed, 96 insertions(+), 29 deletions(-) create mode 100644 src/editor/icons/event-alarm.png diff --git a/src/editor/dialogs/addeventdialog.cpp b/src/editor/dialogs/addeventdialog.cpp index e994f9f..3d7cd58 100644 --- a/src/editor/dialogs/addeventdialog.cpp +++ b/src/editor/dialogs/addeventdialog.cpp @@ -32,28 +32,48 @@ AddEventDialog::AddEventDialog(ProjectTreeModel &projectModel, QWidget *parent) connect(m_ui->pushButtonStep, &QAbstractButton::clicked, this, [this](){ m_eventType = Object::EventType::Step; accept(); }); - auto menu = new QMenu; - connect(menu, &QMenu::aboutToShow, menu, [this,menu](){ - for (const Object &object : m_projectModel.project()->objects) - { - QIcon icon; - if (!object.spriteName.isEmpty()) + { + auto menu = new QMenu; + menu->addAction(tr("Alarm 0"), this, [this](){ m_eventType = Object::EventType::Alarm0; accept(); }); + menu->addAction(tr("Alarm 1"), this, [this](){ m_eventType = Object::EventType::Alarm1; accept(); }); + menu->addAction(tr("Alarm 2"), this, [this](){ m_eventType = Object::EventType::Alarm2; accept(); }); + menu->addAction(tr("Alarm 3"), this, [this](){ m_eventType = Object::EventType::Alarm3; accept(); }); + menu->addAction(tr("Alarm 4"), this, [this](){ m_eventType = Object::EventType::Alarm4; accept(); }); + menu->addAction(tr("Alarm 5"), this, [this](){ m_eventType = Object::EventType::Alarm5; accept(); }); + menu->addAction(tr("Alarm 6"), this, [this](){ m_eventType = Object::EventType::Alarm6; accept(); }); + menu->addAction(tr("Alarm 7"), this, [this](){ m_eventType = Object::EventType::Alarm7; accept(); }); + menu->addAction(tr("Alarm 8"), this, [this](){ m_eventType = Object::EventType::Alarm8; accept(); }); + menu->addAction(tr("Alarm 9"), this, [this](){ m_eventType = Object::EventType::Alarm9; accept(); }); + menu->addAction(tr("Alarm 10"), this, [this](){ m_eventType = Object::EventType::Alarm10; accept(); }); + menu->addAction(tr("Alarm 11"), this, [this](){ m_eventType = Object::EventType::Alarm11; accept(); }); + m_ui->pushButtonAlarm->setMenu(menu); + } + + { + auto menu = new QMenu; + connect(menu, &QMenu::aboutToShow, menu, [this,menu](){ + menu->clear(); + for (const Object &object : m_projectModel.project()->objects) { - const auto &sprites = m_projectModel.project()->sprites; - const auto iter = std::find_if(std::cbegin(sprites), std::cend(sprites), - [&](const Sprite &sprite){ return sprite.name == object.spriteName; }); - if (iter != std::cend(sprites)) + QIcon icon; + if (!object.spriteName.isEmpty()) { - if (!iter->pixmaps.empty()) - icon = iter->pixmaps.front(); + const auto &sprites = m_projectModel.project()->sprites; + const auto iter = std::find_if(std::cbegin(sprites), std::cend(sprites), + [&](const Sprite &sprite){ return sprite.name == object.spriteName; }); + if (iter != std::cend(sprites)) + { + if (!iter->pixmaps.empty()) + icon = iter->pixmaps.front(); + } } + menu->addAction(icon, object.name, this, [this,&object](){ + m_eventType = object.name; accept(); + }); } - menu->addAction(icon, object.name, this, [this,&object](){ - m_eventType = object.name; accept(); - }); - } - }, Qt::SingleShotConnection); - m_ui->pushButtonCollision->setMenu(menu); + }); + m_ui->pushButtonCollision->setMenu(menu); + } } AddEventDialog::~AddEventDialog() = default; diff --git a/src/editor/dialogs/addeventdialog.ui b/src/editor/dialogs/addeventdialog.ui index 3d4e022..2dbf04c 100644 --- a/src/editor/dialogs/addeventdialog.ui +++ b/src/editor/dialogs/addeventdialog.ui @@ -46,6 +46,10 @@ &Alarm + + + :/qtgameengine/icons/event-alarm.png:/qtgameengine/icons/event-alarm.png + diff --git a/src/editor/icons/event-alarm.png b/src/editor/icons/event-alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd0a925742439f42360aa3c754a03da4eac7432 GIT binary patch literal 6984 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/info.png icons/merge.png icons/sort.png + icons/event-alarm.png icons/event-collision.png icons/event-create.png icons/event-destroy.png diff --git a/src/projectcontainer.cpp b/src/projectcontainer.cpp index 19fcdc3..4fcff5a 100644 --- a/src/projectcontainer.cpp +++ b/src/projectcontainer.cpp @@ -136,6 +136,16 @@ QDataStream &operator<<(QDataStream &ds, const std::variant &variant) return ds; } +// for idiotic GCC we cannot use the usual lambda syntax but instead +// have to provide a template method, GCC sucks +template +std::variant variantUnpacker(QDataStream& ds) +{ + T value; + ds >> value; + return value; +} + template QDataStream &operator>>(QDataStream &ds, std::variant &variant) { @@ -144,11 +154,7 @@ QDataStream &operator>>(QDataStream &ds, std::variant &variant) using func_t = std::variant (QDataStream&); static constexpr func_t *funcs[] = { - [](QDataStream& ds) -> std::variant { - T value; - ds >> value; - return value; - }... + variantUnpacker... }; variant = funcs[index](ds); diff --git a/src/projectcontainer.h b/src/projectcontainer.h index 990afee..7f2bf43 100644 --- a/src/projectcontainer.h +++ b/src/projectcontainer.h @@ -113,6 +113,18 @@ struct Object enum class EventType { Create, Destroy, + Alarm0, + Alarm1, + Alarm2, + Alarm3, + Alarm4, + Alarm5, + Alarm6, + Alarm7, + Alarm8, + Alarm9, + Alarm10, + Alarm11, Step, Draw, };