114 lines
2.7 KiB
C++
114 lines
2.7 KiB
C++
#include "qw_trigger.h"
|
|
#include <QJsonArray>
|
|
#include <QJsonObject>
|
|
#include <QDebug>
|
|
|
|
QWTrigger::QWTrigger(const QString &path)
|
|
{
|
|
setPos(0, 0);
|
|
setPixmap(QPixmap(":/res/" + path));
|
|
}
|
|
|
|
void QWTrigger::clearEvents() noexcept
|
|
{
|
|
list_events.clear();
|
|
}
|
|
|
|
void QWTrigger::setEvents(std::initializer_list<std::shared_ptr<QWAbstractEvent>> &&evs) noexcept
|
|
{
|
|
list_events.clear();
|
|
|
|
/* For some reason QList(::begin(), ::end())
|
|
* doesn't work for MSVC */
|
|
|
|
#if defined(_MSC_VER)
|
|
list_events = QList<std::shared_ptr<QWAbstractEvent>>::fromStdList(std::move(evs));
|
|
#else
|
|
list_events = QList(evs.begin(), evs.end());
|
|
#endif
|
|
|
|
}
|
|
|
|
void QWTrigger::setEvents(const QList<std::shared_ptr<QWAbstractEvent>> &evs) noexcept
|
|
{
|
|
list_events.clear();
|
|
list_events = evs;
|
|
}
|
|
|
|
void QWTrigger::addEvents(std::initializer_list<std::shared_ptr<QWAbstractEvent>> &&evs) noexcept
|
|
{
|
|
list_events.append(std::move(QList<std::shared_ptr<QWAbstractEvent>>(evs)));
|
|
}
|
|
|
|
void QWTrigger::addEvents(const std::shared_ptr<QWAbstractEvent> &ev) noexcept
|
|
{
|
|
list_events.append(ev);
|
|
}
|
|
|
|
QList<std::shared_ptr<QWAbstractEvent>> QWTrigger::events() const
|
|
{
|
|
return list_events;
|
|
}
|
|
|
|
void QWTrigger::setCover(qreal x, qreal y, const QString &path) noexcept
|
|
{
|
|
pix_path = path;
|
|
setPixmap(QPixmap(":/res/" + path));
|
|
setPos(x, y);
|
|
}
|
|
|
|
void QWTrigger::setCover(const QString &path) noexcept
|
|
{
|
|
pix_path = path;
|
|
setPixmap(QPixmap(":/res/" + path));
|
|
}
|
|
|
|
QString QWTrigger::path() const noexcept
|
|
{
|
|
return pix_path;
|
|
}
|
|
|
|
void QWTrigger::setExaminationDialogueEvent(const std::shared_ptr<QWAbstractEvent> &dialogue_event)
|
|
{
|
|
examination_event = dialogue_event;
|
|
Q_ASSERT(examination_event);
|
|
}
|
|
|
|
void QWTrigger::startExaminationDialogue() const
|
|
{
|
|
if (examination_event)
|
|
examination_event->execute();
|
|
}
|
|
|
|
void QWTrigger::activate() const
|
|
{
|
|
for (const auto &ev : list_events) {
|
|
Q_ASSERT(ev);
|
|
ev->execute();
|
|
}
|
|
}
|
|
|
|
////////////////////////
|
|
|
|
void QWTrigger::writeToJson(QJsonObject &trigger_data)
|
|
{
|
|
trigger_data.insert("id", tag());
|
|
trigger_data.insert("mask", path());
|
|
trigger_data.insert("x", x());
|
|
trigger_data.insert("y", y());
|
|
trigger_data.insert("examine_dialogue", examination_event->tag());
|
|
|
|
qDebug() << " The trigger:\n" << " id " << tag()
|
|
<< "\n mask " << tag()
|
|
<< "\n xy " << x() << " " << y()
|
|
<< "\n examine_dialogue " << examination_event->tag();
|
|
|
|
// - Trigger events - //
|
|
QJsonArray json_trevents;
|
|
for (const auto &tr_event : events()) {
|
|
json_trevents.append(tr_event->tag());
|
|
qDebug() << " event: " << tr_event->tag();
|
|
}
|
|
trigger_data.insert("evs", json_trevents);
|
|
}
|