diff --git a/art/pack/dragon.kra b/art/pack/dragon.kra new file mode 100644 index 0000000..7d06b6c Binary files /dev/null and b/art/pack/dragon.kra differ diff --git a/art/pack/fairy.kra b/art/pack/fairy.kra new file mode 100644 index 0000000..467a297 Binary files /dev/null and b/art/pack/fairy.kra differ diff --git a/art/pack/fairy.png b/art/pack/fairy.png new file mode 100644 index 0000000..102bb23 Binary files /dev/null and b/art/pack/fairy.png differ diff --git a/story-editor/src/main_window.cpp b/story-editor/src/main_window.cpp index 8012aac..5e14569 100644 --- a/story-editor/src/main_window.cpp +++ b/story-editor/src/main_window.cpp @@ -549,7 +549,7 @@ void MainWindow::BuildScript() chip32_initialize(&m_chip32_ctx); m_dbg.run_result = VM_OK; updateAll(); - DebugContext::DumpCodeAssembler(m_assembler); +// DebugContext::DumpCodeAssembler(m_assembler); } else { diff --git a/story-editor/src/media_node_model.cpp b/story-editor/src/media_node_model.cpp index 897dd96..9b4ed37 100644 --- a/story-editor/src/media_node_model.cpp +++ b/story-editor/src/media_node_model.cpp @@ -26,7 +26,8 @@ MediaNodeModel::MediaNodeModel(StoryGraphModel &model) m_ui.image->setMinimumSize(320, 240); m_ui.image->installEventFilter(this); - connect(m_ui.spinBox, &QSpinBox::valueChanged, [&](int i) { + connect(m_ui.spinBox, QOverload::of(&QSpinBox::valueChanged), [&](int i) { + bool addAction = false; if (m_ports < i) { addAction = true; @@ -88,16 +89,14 @@ void MediaNodeModel::setImage(const QString &fileName) { QPixmap pix(m_model.BuildFullImagePath(fileName)); - if (pix.isNull()) + if (!pix.isNull()) { - qCritical() << "Can't find image: " << fileName; + int w = m_ui.image->width(); + int h = m_ui.image->height(); + pix.scaled(w, h, Qt::KeepAspectRatio); + m_ui.image->setPixmap(pix); + m_ui.imageName->setText(fileName); } - - int w = m_ui.image->width(); - int h = m_ui.image->height(); - pix.scaled(w, h, Qt::KeepAspectRatio); - m_ui.image->setPixmap(pix); - m_ui.imageName->setText(fileName); } void MediaNodeModel::setInternalData(const nlohmann::json &j) @@ -133,6 +132,17 @@ std::string MediaNodeModel::GenerateConstants() } // FIXME: Generate choice table if needed (out ports > 1) + std::unordered_set conns = m_model.allConnectionIds(getNodeId()); + + int nb_out_ports = 0; + + for (auto & c : conns) + { + if (c.outNodeId > 0) + { + nb_out_ports++; + } + } return s; } @@ -164,14 +174,14 @@ std::string MediaNodeModel::Build() // Call the media executor (image, sound) ss << "syscall 1\n"; - - std::unordered_set conns = m_model.allConnectionIds(getNodeId()); + NodeId id = getNodeId(); + std::unordered_set conns = m_model.allConnectionIds(id); int nb_out_ports = 0; for (auto & c : conns) { - if (c.outNodeId > 0) + if (c.inNodeId == id) { nb_out_ports++; } @@ -206,6 +216,13 @@ std::string MediaNodeModel::Build() return ss.str(); } +void MediaNodeModel::SetOutPortCount(int count) { + + // m_ui.spinBox->blockSignals(true); + m_ui.spinBox->setValue(count); + // m_ui.spinBox->blockSignals(true); +} + unsigned int MediaNodeModel::nPorts(PortType portType) const { unsigned int result = 1; diff --git a/story-editor/src/media_node_model.h b/story-editor/src/media_node_model.h index c55ac3d..d31cb3c 100644 --- a/story-editor/src/media_node_model.h +++ b/story-editor/src/media_node_model.h @@ -46,6 +46,8 @@ public: virtual std::string GenerateConstants() override; virtual std::string Build() override; + virtual void SetOutPortCount(int count) override; + public: virtual QString modelName() const { return QString("MediaNode"); } diff --git a/story-editor/src/story_graph_model.cpp b/story-editor/src/story_graph_model.cpp index 95ffc2c..392042e 100644 --- a/story-editor/src/story_graph_model.cpp +++ b/story-editor/src/story_graph_model.cpp @@ -210,6 +210,8 @@ bool StoryGraphModel::setNodeData(NodeId nodeId, NodeRole role, QVariant value) auto &model = it->second; switch (role) { + case NodeRole::Id: + break; case NodeRole::Type: break; case NodeRole::Position: { @@ -460,6 +462,7 @@ void StoryGraphModel::LoadNode(const nlohmann::json &nodeJson) QPointF const pos(posJson["x"].get(), posJson["y"].get()); setNodeData(restoredNodeId, NodeRole::Position, pos); + model->SetOutPortCount(nodeJson["outPortCount"].get()); _models[restoredNodeId]->FromJson(internalDataJson); } else { @@ -478,11 +481,10 @@ NodeId StoryGraphModel::FindFirstNode() const bool foundConnection{false}; for (auto& c : _connectivity) { - if (c.outNodeId == nodeId) + if (c.inNodeId == nodeId) { foundConnection = true; } - } if (!foundConnection) diff --git a/story-editor/src/story_node_base.h b/story-editor/src/story_node_base.h index c057ba4..b0c465b 100644 --- a/story-editor/src/story_node_base.h +++ b/story-editor/src/story_node_base.h @@ -33,6 +33,10 @@ public: void setNodeId(NodeId id) { m_nodeId = id; } NodeId getNodeId() const { return m_nodeId; } + virtual void SetOutPortCount(int count) { + // default implementation does nothing + } + virtual nlohmann::json ToJson() const { nlohmann::json j;