You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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);
}