diff --git a/QtGameMaker.pro b/QtGameMaker.pro index 1a3762a..b424f6b 100644 --- a/QtGameMaker.pro +++ b/QtGameMaker.pro @@ -29,6 +29,7 @@ HEADERS += \ src/editor/dialogs/genericcodeeditordialog.h \ src/editor/editorguiutils.h \ src/editor/roomscene.h \ + src/editor/widgets/actiondragwidget.h \ src/editor/widgets/draggabletreeview.h \ src/editor/widgets/qlineeditwithmenu.h \ src/editor/widgets/qscrollareawithmenu.h \ @@ -67,6 +68,7 @@ HEADERS += \ src/editor/dialogs/timelinepropertiesdialog.h \ src/editor/dialogs/triggersdialog.h \ src/editor/dialogs/userdefinedconstantsdialog.h \ + src/editor/dialogs/actions/movefixeddialog.h \ src/editor/models/actionscontainermodel.h \ src/editor/models/constantsmodel.h \ src/editor/models/includedfilesmodel.h \ @@ -86,6 +88,7 @@ SOURCES += \ src/editor/dialogs/genericcodeeditordialog.cpp \ src/editor/editorguiutils.cpp \ src/editor/roomscene.cpp \ + src/editor/widgets/actiondragwidget.cpp \ src/editor/widgets/draggabletreeview.cpp \ src/editor/widgets/qlineeditwithmenu.cpp \ src/editor/widgets/qscrollareawithmenu.cpp \ @@ -124,6 +127,7 @@ SOURCES += \ src/editor/dialogs/timelinepropertiesdialog.cpp \ src/editor/dialogs/triggersdialog.cpp \ src/editor/dialogs/userdefinedconstantsdialog.cpp \ + src/editor/dialogs/actions/movefixeddialog.cpp \ src/editor/models/actionscontainermodel.cpp \ src/editor/models/constantsmodel.cpp \ src/editor/models/includedfilesmodel.cpp \ @@ -164,7 +168,8 @@ FORMS += \ src/editor/dialogs/timelinepropertiesdialog.ui \ src/editor/dialogs/triggersdialog.ui \ src/editor/dialogs/userdefinedconstantsdialog.ui \ - src/editor/widgets/actionscontainerwidget.ui + src/editor/widgets/actionscontainerwidget.ui\ + src/editor/dialogs/actions/movefixeddialog.ui RESOURCES += \ src/editor/resources_editor.qrc \ diff --git a/src/editor/dialogs/actions/movefixeddialog.cpp b/src/editor/dialogs/actions/movefixeddialog.cpp new file mode 100644 index 0000000..49c6e1e --- /dev/null +++ b/src/editor/dialogs/actions/movefixeddialog.cpp @@ -0,0 +1,19 @@ +#include "movefixeddialog.h" +#include "ui_movefixeddialog.h" + +#include + +MoveFixedDialog::MoveFixedDialog(MoveFixedAction &action, QWidget *parent) : + QDialog{parent}, + m_ui{std::make_unique()}, + m_action{action} +{ + m_ui->setupUi(this); + + if (auto button = m_ui->buttonBox->button(QDialogButtonBox::Ok)) + button->setIcon(QIcon{":/qtgameengine/icons/ok.png"}); + if (auto button = m_ui->buttonBox->button(QDialogButtonBox::Cancel)) + button->setIcon(QIcon{":/qtgameengine/icons/delete.png"}); +} + +MoveFixedDialog::~MoveFixedDialog() = default; diff --git a/src/editor/dialogs/actions/movefixeddialog.h b/src/editor/dialogs/actions/movefixeddialog.h new file mode 100644 index 0000000..363c7a1 --- /dev/null +++ b/src/editor/dialogs/actions/movefixeddialog.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +#include + +namespace Ui { class MoveFixedDialog; } +class MoveFixedAction; + +class MoveFixedDialog : public QDialog +{ + Q_OBJECT + +public: + explicit MoveFixedDialog(MoveFixedAction &action, QWidget *parent = nullptr); + ~MoveFixedDialog() override; + +private: + const std::unique_ptr m_ui; + + MoveFixedAction &m_action; +}; diff --git a/src/editor/dialogs/actions/movefixeddialog.ui b/src/editor/dialogs/actions/movefixeddialog.ui new file mode 100644 index 0000000..34f5595 --- /dev/null +++ b/src/editor/dialogs/actions/movefixeddialog.ui @@ -0,0 +1,302 @@ + + + MoveFixedDialog + + + + 0 + 0 + 435 + 429 + + + + Move Fixed + + + + + + + + + + + :/qtgameengine/icons/action-move-fixed.png + + + + + + + Applies to + + + + + + Self + + + true + + + + + + + Other + + + + + + + + + Object: + + + + + + + + + + ... + + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Directions: + + + + + + + + + true + + + + + + + true + + + + + + + + :/qtgameengine/icons/blue-arrow-up.png:/qtgameengine/icons/blue-arrow-up.png + + + true + + + + + + + + :/qtgameengine/icons/blue-arrow-right.png:/qtgameengine/icons/blue-arrow-right.png + + + true + + + + + + + true + + + + + + + + :/qtgameengine/icons/blue-arrow-left.png:/qtgameengine/icons/blue-arrow-left.png + + + true + + + + + + + true + + + + + + + + :/qtgameengine/icons/blue-arrow-down.png:/qtgameengine/icons/blue-arrow-down.png + + + true + + + + + + + true + + + + + + + + + Speed: + + + + + + + + + + Relative + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + buttonBox + accepted() + MoveFixedDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + MoveFixedDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/editor/dialogs/codeactiondialog.cpp b/src/editor/dialogs/codeactiondialog.cpp index 23e25da..06329b4 100644 --- a/src/editor/dialogs/codeactiondialog.cpp +++ b/src/editor/dialogs/codeactiondialog.cpp @@ -6,7 +6,7 @@ #include "projectcontainer.h" -CodeActionDialog::CodeActionDialog(Action &action, QWidget *parent) : +CodeActionDialog::CodeActionDialog(ExecuteCodeAction &action, QWidget *parent) : CodeEditorDialog{tr("Execute Code"), parent}, m_action{action}, m_radioButtonSelf{new QRadioButton{tr("Self"), this}}, @@ -23,9 +23,9 @@ CodeActionDialog::CodeActionDialog(Action &action, QWidget *parent) : addToolbarWidget(m_radioButtonOther); addToolbarWidget(m_radioButtonObject); - m_radioButtonSelf->setChecked(m_action.appliesTo == Action::AppliesTo::Self); - m_radioButtonOther->setChecked(m_action.appliesTo == Action::AppliesTo::Other); - m_radioButtonObject->setChecked(m_action.appliesTo == Action::AppliesTo::Object); + m_radioButtonSelf->setChecked(m_action.appliesTo == ExecuteCodeAction::AppliesTo::Self); + m_radioButtonOther->setChecked(m_action.appliesTo == ExecuteCodeAction::AppliesTo::Other); + m_radioButtonObject->setChecked(m_action.appliesTo == ExecuteCodeAction::AppliesTo::Object); setScript(m_action.script); @@ -46,11 +46,11 @@ void CodeActionDialog::accept() } if (m_radioButtonSelf->isChecked()) - m_action.appliesTo = Action::AppliesTo::Self; + m_action.appliesTo = ExecuteCodeAction::AppliesTo::Self; else if (m_radioButtonOther->isChecked()) - m_action.appliesTo = Action::AppliesTo::Other; + m_action.appliesTo = ExecuteCodeAction::AppliesTo::Other; else if (m_radioButtonObject->isChecked()) - m_action.appliesTo = Action::AppliesTo::Object; + m_action.appliesTo = ExecuteCodeAction::AppliesTo::Object; else { QMessageBox::warning(this, tr("No Applies To selected!"), tr("No Applies To selected!")); diff --git a/src/editor/dialogs/codeactiondialog.h b/src/editor/dialogs/codeactiondialog.h index 7b70437..5af7a0f 100644 --- a/src/editor/dialogs/codeactiondialog.h +++ b/src/editor/dialogs/codeactiondialog.h @@ -3,19 +3,19 @@ #include "codeeditordialog.h" class QRadioButton; -struct Action; +struct ExecuteCodeAction; class CodeActionDialog : public CodeEditorDialog { Q_OBJECT public: - explicit CodeActionDialog(Action &action, QWidget *parent = nullptr); + explicit CodeActionDialog(ExecuteCodeAction &action, QWidget *parent = nullptr); void accept() override; private: - Action &m_action; + ExecuteCodeAction &m_action; QRadioButton * const m_radioButtonSelf; QRadioButton * const m_radioButtonOther; diff --git a/src/editor/icons/code-action.png b/src/editor/icons/action-code.png similarity index 100% rename from src/editor/icons/code-action.png rename to src/editor/icons/action-code.png diff --git a/src/editor/icons/action-move-fixed.png b/src/editor/icons/action-move-fixed.png new file mode 100644 index 0000000..cb889d7 Binary files /dev/null and b/src/editor/icons/action-move-fixed.png differ diff --git a/src/editor/icons/action-move-free.png b/src/editor/icons/action-move-free.png new file mode 100644 index 0000000..cba5e6c Binary files /dev/null and b/src/editor/icons/action-move-free.png differ diff --git a/src/editor/icons/action-move-towards.png b/src/editor/icons/action-move-towards.png new file mode 100644 index 0000000..b70df8c Binary files /dev/null and b/src/editor/icons/action-move-towards.png differ diff --git a/src/editor/icons/add (Kopie).png b/src/editor/icons/add (Kopie).png new file mode 100644 index 0000000..5ff8629 Binary files /dev/null and b/src/editor/icons/add (Kopie).png differ diff --git a/src/editor/icons/blue-arrow-down.png b/src/editor/icons/blue-arrow-down.png new file mode 100644 index 0000000..d1f3957 Binary files /dev/null and b/src/editor/icons/blue-arrow-down.png differ diff --git a/src/editor/icons/blue-arrow-left.png b/src/editor/icons/blue-arrow-left.png new file mode 100644 index 0000000..2385b65 Binary files /dev/null and b/src/editor/icons/blue-arrow-left.png differ diff --git a/src/editor/icons/blue-arrow-right.png b/src/editor/icons/blue-arrow-right.png new file mode 100644 index 0000000..1ee2b48 Binary files /dev/null and b/src/editor/icons/blue-arrow-right.png differ diff --git a/src/editor/icons/blue-arrow-up.png b/src/editor/icons/blue-arrow-up.png new file mode 100644 index 0000000..8fc1fd0 Binary files /dev/null and b/src/editor/icons/blue-arrow-up.png differ diff --git a/src/editor/models/actionscontainermodel.cpp b/src/editor/models/actionscontainermodel.cpp index 82a1597..fd48f85 100644 --- a/src/editor/models/actionscontainermodel.cpp +++ b/src/editor/models/actionscontainermodel.cpp @@ -34,15 +34,39 @@ QVariant ActionsContainerModel::data(const QModelIndex &index, int role) const return {}; } - //const auto &action = m_actionsContainer->at(index.row()); + const auto &action = *std::next(m_actionsContainer->cbegin(), index.row()); switch (role) { case Qt::DisplayRole: case Qt::EditRole: - return tr("Execute a piece of code"); + if (std::holds_alternative(action)) + return tr("Start moving in a direction"); + else if (std::holds_alternative(action)) + return tr("Set direction and speed of motion"); + else if (std::holds_alternative(action)) + return tr("Move towards point (99, 99)"); + else if (std::holds_alternative(action)) + return tr("Execute a piece of code"); + else + { + qWarning() << "unknown action type"; + return tr("ERROR: Unknown action type"); + } case Qt::DecorationRole: - return QIcon{":/qtgameengine/icons/code-action.png"}; + if (std::holds_alternative(action)) + return QIcon{":/qtgameengine/icons/action-move-fixed.png"}; + else if (std::holds_alternative(action)) + return QIcon{":/qtgameengine/icons/action-move-free.png"}; + else if (std::holds_alternative(action)) + return QIcon{":/qtgameengine/icons/action-move-towards.png"}; + else if (std::holds_alternative(action)) + return QIcon{":/qtgameengine/icons/action-code.png"}; + else + { + qWarning() << "unknown action type"; + return QIcon{":/qtgameengine/icons/action.png"}; + } default: return {}; } @@ -50,6 +74,30 @@ QVariant ActionsContainerModel::data(const QModelIndex &index, int role) const return {}; } +Qt::ItemFlags ActionsContainerModel::flags(const QModelIndex &index) const +{ + auto flags = QAbstractListModel::flags(index); + flags |= Qt::ItemIsDragEnabled; + flags |= Qt::ItemIsDropEnabled; + return flags; +} + +Qt::DropActions ActionsContainerModel::supportedDropActions() const +{ + auto actions = QAbstractListModel::supportedDropActions(); + actions |= Qt::MoveAction; + actions |= Qt::TargetMoveAction; + return actions; +} + +Qt::DropActions ActionsContainerModel::supportedDragActions() const +{ + auto actions = QAbstractListModel::supportedDragActions(); + actions |= Qt::MoveAction; + actions |= Qt::TargetMoveAction; + return actions; +} + void ActionsContainerModel::setActionsContainer(ActionsContainer *actionsContainer) { beginResetModel(); diff --git a/src/editor/models/actionscontainermodel.h b/src/editor/models/actionscontainermodel.h index c3eba7b..878062c 100644 --- a/src/editor/models/actionscontainermodel.h +++ b/src/editor/models/actionscontainermodel.h @@ -15,6 +15,9 @@ public: int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; + Qt::DropActions supportedDropActions() const override; + Qt::DropActions supportedDragActions() const override; ActionsContainer *actionsContainer() const { return m_actionsContainer; } void setActionsContainer(ActionsContainer *actionsContainer); diff --git a/src/editor/resources_editor.qrc b/src/editor/resources_editor.qrc index e46a314..19f3e97 100644 --- a/src/editor/resources_editor.qrc +++ b/src/editor/resources_editor.qrc @@ -1,5 +1,11 @@ + icons/action.png + icons/action-code.png + icons/action-move-fixed.png + icons/action-move-free.png + icons/action-move-towards.png + icons/add.png icons/arrow-down.png icons/arrow-left.png icons/arrow-right.png @@ -7,7 +13,9 @@ icons/background-file.png icons/background.png icons/cascade.png + icons/center.png icons/check.png + icons/constants.png icons/copy.png icons/create-executable.png icons/create-group.png @@ -17,12 +25,20 @@ icons/delete.png icons/duplicate.png icons/edit.png + icons/event-alarm.png + icons/event-collision.png + icons/event-create.png + icons/event-destroy.png + icons/event-draw.png + icons/event-step.png icons/exit.png icons/export-resources.png icons/extension-packages-file.png icons/extension-packages.png icons/file.png icons/find.png + icons/flip-horizontal.png + icons/flip-vertical.png icons/folder.png icons/font-file.png icons/font.png @@ -30,11 +46,17 @@ icons/game-information.png icons/global-game-settings-file.png icons/global-game-settings.png + icons/grid.png icons/help.png icons/import-resources.png + icons/info.png + icons/isometric.png + icons/lock.png + icons/merge.png icons/move.png icons/music-file.png icons/new.png + icons/object-file.png icons/object.png icons/ok.png icons/open.png @@ -47,47 +69,32 @@ icons/publish-game.png icons/redo.png icons/rename.png + icons/replace.png + icons/room-file.png icons/room.png icons/rotate.png icons/run.png icons/save-as.png icons/save.png + icons/scale.png icons/script-file.png icons/script.png + icons/sort-x.png + icons/sort-y.png + icons/sort.png icons/sound-file.png icons/sound-file2.png icons/sound.png icons/sprite-file.png icons/sprite.png icons/tile.png + icons/timeline-file.png icons/timeline.png icons/undo.png - icons/object-file.png - icons/room-file.png - icons/timeline-file.png - icons/flip-horizontal.png - icons/flip-vertical.png - icons/scale.png - icons/center.png - icons/grid.png - icons/constants.png - icons/add.png - icons/replace.png - icons/info.png - icons/merge.png - icons/sort.png - icons/event-alarm.png - icons/event-collision.png - icons/event-create.png - icons/event-destroy.png - icons/event-step.png - icons/action.png - icons/code-action.png - icons/event-draw.png - icons/lock.png icons/unlock.png - icons/sort-x.png - icons/sort-y.png - icons/isometric.png + icons/blue-arrow-down.png + icons/blue-arrow-left.png + icons/blue-arrow-right.png + icons/blue-arrow-up.png diff --git a/src/editor/widgets/actiondragwidget.cpp b/src/editor/widgets/actiondragwidget.cpp new file mode 100644 index 0000000..26b0f2d --- /dev/null +++ b/src/editor/widgets/actiondragwidget.cpp @@ -0,0 +1,40 @@ +#include "actiondragwidget.h" + +#include +#include +#include +#include + +ActionDragWidget::ActionDragWidget(QWidget *parent) : + QToolButton{parent} +{ +} + +void ActionDragWidget::mousePressEvent(QMouseEvent *event) +{ + QToolButton::mousePressEvent(event); + + if (event->button() == Qt::LeftButton) + m_dragStartPosition = event->pos(); +} + +void ActionDragWidget::mouseMoveEvent(QMouseEvent *event) +{ + QToolButton::mouseMoveEvent(event); + + if (!(event->buttons() & Qt::LeftButton)) + return; + + if ((event->pos() - m_dragStartPosition).manhattanLength() + < QApplication::startDragDistance()) + return; + + QDrag *drag = new QDrag{this}; + drag->setPixmap(this->icon().pixmap(QSize{32, 32})); + + QMimeData *mimeData = new QMimeData; + mimeData->setData("custom", QByteArray{"aaaaaa"}); + drag->setMimeData(mimeData); + + Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction); +} diff --git a/src/editor/widgets/actiondragwidget.h b/src/editor/widgets/actiondragwidget.h new file mode 100644 index 0000000..aa1c66b --- /dev/null +++ b/src/editor/widgets/actiondragwidget.h @@ -0,0 +1,19 @@ +#pragma once + +#include +#include + +class ActionDragWidget : public QToolButton +{ + Q_OBJECT + +public: + explicit ActionDragWidget(QWidget *parent = nullptr); + +protected: + void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + +private: + QPoint m_dragStartPosition; +}; diff --git a/src/editor/widgets/actionscontainerwidget.cpp b/src/editor/widgets/actionscontainerwidget.cpp index c253910..78286c1 100644 --- a/src/editor/widgets/actionscontainerwidget.cpp +++ b/src/editor/widgets/actionscontainerwidget.cpp @@ -7,6 +7,7 @@ #include "models/actionscontainermodel.h" #include "dialogs/codeactiondialog.h" +#include "dialogs/actions/movefixeddialog.h" ActionsContainerWidget::ActionsContainerWidget(QWidget *parent) : QWidget{parent}, @@ -27,6 +28,17 @@ ActionsContainerWidget::ActionsContainerWidget(QWidget *parent) : m_ui->listViewActions, [listView=m_ui->listViewActions](){ listView->setCurrentIndex(QModelIndex{}); }); + + connect(m_ui->toolButtonMoveFixed, &QAbstractButton::clicked, + this, [this](){ + MoveFixedAction action; + MoveFixedDialog dialog{action, this}; + if (dialog.exec() == QDialog::Accepted) + { + // TODO insert into model + emit changed(); + } + }); } ActionsContainerWidget::~ActionsContainerWidget() = default; @@ -50,9 +62,20 @@ void ActionsContainerWidget::actionDoubleClicked(const QModelIndex &index) if (!action) return; - CodeActionDialog dialog{*action, this}; - if (dialog.exec() == QDialog::Accepted) - emit changed(); + if (auto ptr = std::get_if(action)) + { + MoveFixedDialog dialog{*ptr, this}; + if (dialog.exec() == QDialog::Accepted) + emit changed(); + } + else if (auto ptr = std::get_if(action)) + { + CodeActionDialog dialog{*ptr, this}; + if (dialog.exec() == QDialog::Accepted) + emit changed(); + } + else + QMessageBox::information(this, tr("Not implemented!"), tr("Not implemented!")); } void ActionsContainerWidget::actionsContextMenuRequested(const QPoint &pos) diff --git a/src/editor/widgets/actionscontainerwidget.ui b/src/editor/widgets/actionscontainerwidget.ui index 9c3067e..9b5242c 100644 --- a/src/editor/widgets/actionscontainerwidget.ui +++ b/src/editor/widgets/actionscontainerwidget.ui @@ -6,14 +6,14 @@ 0 0 - 400 - 300 + 678 + 667 Form - + 0 @@ -49,6 +49,18 @@ Qt::CustomContextMenu + + true + + + true + + + QAbstractItemView::InternalMove + + + Qt::MoveAction + 32 @@ -64,100 +76,1477 @@ QTabWidget::East + + 0 + Move - - - - - ... + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + - - - - ... + + + + Reverse Vertical + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + - - - - ... + + + + Set Friction + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + - - - - ... + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + Jump To Start + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Move Towards + + + + :/qtgameengine/icons/action-move-towards.png:/qtgameengine/icons/action-move-towards.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Speed Vertical + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Set Gravity + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Move Free + + + + :/qtgameengine/icons/action-move-free.png:/qtgameengine/icons/action-move-free.png + + + + 32 + 32 + + + + + + + + Jump + + + + + + + Reverse Horizontal + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Move + + + + + + + Speed Horizontal + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + true + + + Move Fixed + + + + :/qtgameengine/icons/action-move-fixed.png:/qtgameengine/icons/action-move-fixed.png + + + + 32 + 32 + + + + + + + + Jump To Position + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Paths + + + + + + + Steps + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + Main1 + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Rooms + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Objects + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Sounds + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Sprite + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + Main2 + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Info + + + + + + + Resources + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Timing + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Game + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + Control + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Variables + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Questions + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Other + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Code + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Execute Code + + + + :/qtgameengine/icons/action-code.png:/qtgameengine/icons/action-code.png + + + + 32 + 32 + + + + + + + + + :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + + + + 32 + 32 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + Score + Extra + Draw + Move and Room + Save, Load, and Mouse + Draw+Sprite+Background + Date + Breakout + - + + + ActionDragWidget + QToolButton +
widgets/actiondragwidget.h
+
+
+ + + diff --git a/src/projectcontainer.cpp b/src/projectcontainer.cpp index 4fcff5a..d1fe88e 100644 --- a/src/projectcontainer.cpp +++ b/src/projectcontainer.cpp @@ -313,14 +313,56 @@ QDataStream &operator>>(QDataStream &ds, Font &font) return ds; } -QDataStream &operator<<(QDataStream &ds, const Action &action) +QDataStream &operator<<(QDataStream &ds, const MoveFixedAction &action) +{ + Q_UNUSED(action); +// ds << action.; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, MoveFixedAction &action) +{ + Q_UNUSED(action); +// ds >> action.; + return ds; +} + +QDataStream &operator<<(QDataStream &ds, const MoveFreeAction &action) +{ + Q_UNUSED(action); +// ds << action.; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, MoveFreeAction &action) +{ + Q_UNUSED(action); +// ds >> action.; + return ds; +} + +QDataStream &operator<<(QDataStream &ds, const MoveTowardsAction &action) +{ + Q_UNUSED(action); +// ds << action.; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, MoveTowardsAction &action) +{ + Q_UNUSED(action); +// ds >> action.; + return ds; +} + +QDataStream &operator<<(QDataStream &ds, const ExecuteCodeAction &action) { ds << action.script; ds << action.appliesTo; return ds; } -QDataStream &operator>>(QDataStream &ds, Action &action) +QDataStream &operator>>(QDataStream &ds, ExecuteCodeAction &action) { ds >> action.script; ds >> action.appliesTo; diff --git a/src/projectcontainer.h b/src/projectcontainer.h index b42437a..ae50290 100644 --- a/src/projectcontainer.h +++ b/src/projectcontainer.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -85,7 +86,19 @@ struct Font } range; }; -struct Action { +struct MoveFixedAction { + +}; + +struct MoveFreeAction { + +}; + +struct MoveTowardsAction { + +}; + +struct ExecuteCodeAction { enum class AppliesTo { Self, Other, @@ -96,7 +109,14 @@ struct Action { AppliesTo appliesTo{AppliesTo::Self}; }; -using ActionsContainer = std::array; +using Action = std::variant< + MoveFixedAction, + MoveFreeAction, + MoveTowardsAction, + ExecuteCodeAction +>; + +using ActionsContainer = std::list; struct TimeLine { @@ -141,7 +161,26 @@ struct Object int depth{}; bool persistent{}; QString parentName; - events_container_t events; + events_container_t events { + { + EventType::Create, + ActionsContainer { + Action { MoveFixedAction{} }, + Action { MoveFreeAction{} }, + Action { MoveTowardsAction{} }, + Action { ExecuteCodeAction{} } + } + }, + { + EventType::Destroy, + ActionsContainer { + Action { ExecuteCodeAction{} }, + Action { MoveTowardsAction{} }, + Action { MoveFreeAction{} }, + Action { MoveFixedAction{} } + } + } + }; collision_events_container_t collisionEvents; };