From 4035690976eae6f19515378e52eb91ca0cfc04bb Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Sat, 5 Jul 2025 00:42:29 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E6=89=A7=E8=A1=8C=E7=BB=93?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ComponentBasic/BehaviorPerform.cpp | 78 +++++++++++++++--------------- ComponentBasic/BehaviorPerform.h | 46 +++++++++--------- SimsWorld/BehaviorEditor.cpp | 5 +- SimsWorld/BehaviorEditor.h | 4 ++ 4 files changed, 70 insertions(+), 63 deletions(-) diff --git a/ComponentBasic/BehaviorPerform.cpp b/ComponentBasic/BehaviorPerform.cpp index 2e92f75..7238290 100644 --- a/ComponentBasic/BehaviorPerform.cpp +++ b/ComponentBasic/BehaviorPerform.cpp @@ -294,7 +294,7 @@ QList> BehaviorMapNode::getForwards() const return children(); } -bool BehaviorMapNode::fallback(std::shared_ptr node, LogicalResult ste) +bool BehaviorMapNode::fallback(std::shared_ptr node, ExecuteResult ste) { this->_state_value = ste; return true; @@ -302,7 +302,7 @@ bool BehaviorMapNode::fallback(std::shared_ptr node, LogicalResult void BehaviorMapNode::reset() { - this->_state_value = LogicalResult::UNDEFINED; + this->_state_value = ExecuteResult::UNDEFINED; } QString BehaviorMapNode::typeName() const @@ -310,7 +310,7 @@ QString BehaviorMapNode::typeName() const return _map_name; } -LogicalResult BehaviorMapNode::execute() +ExecuteResult BehaviorMapNode::execute() { return _state_value; } @@ -347,7 +347,7 @@ QList> SequenceNode::getForwards() const for (auto item : children()) { // 子节点执行失败,提前结束 if (_state_map.contains(item->getID())) { - if (_state_map[item->getID()] != LogicalResult::SUCCESS) + if (_state_map[item->getID()] != ExecuteResult::SUCCESS) return QList>(); } @@ -365,20 +365,20 @@ QString SequenceNode::typeName() const return u8"顺序"; } -LogicalResult SequenceNode::execute() { +ExecuteResult SequenceNode::execute() { if (children().size() >= _state_map.size()) - return LogicalResult::FAILURE; + return ExecuteResult::FAILURE; for (auto ste : this->_state_map) { switch (ste) { - case LogicalResult::SUCCESS: + case ExecuteResult::SUCCESS: break; default: - return LogicalResult::FAILURE; + return ExecuteResult::FAILURE; } } - return LogicalResult::SUCCESS; + return ExecuteResult::SUCCESS; } QHash> SequenceNode::inputList() const @@ -397,7 +397,7 @@ void SequenceNode::recoveryFrom(const QJsonObject& obj) STRLIST_PEAK(state_items); for (auto kv : state_items) { auto kv_pair = kv.split(u8":"); - _state_map[kv_pair[0].toInt()] = (LogicalResult)kv_pair[1].toInt(); + _state_map[kv_pair[0].toInt()] = (ExecuteResult)kv_pair[1].toInt(); } } @@ -411,7 +411,7 @@ void SequenceNode::saveTo(QJsonObject& obj) const STRLIST_SAVE(state_items); } -bool SequenceNode::fallback(std::shared_ptr node, LogicalResult ste) +bool SequenceNode::fallback(std::shared_ptr node, ExecuteResult ste) { this->_state_map[node->getID()] = ste; return true; @@ -459,7 +459,7 @@ QList> SelectorNode::getForwards() const for (auto item : children()) { // 子节点执行失败,提前结束 if (_state_map.contains(item->getID())) { - if (_state_map[item->getID()] == LogicalResult::SUCCESS) + if (_state_map[item->getID()] == ExecuteResult::SUCCESS) return QList>(); } @@ -472,7 +472,7 @@ QList> SelectorNode::getForwards() const return QList>(); } -bool SelectorNode::fallback(std::shared_ptr node, LogicalResult ste) +bool SelectorNode::fallback(std::shared_ptr node, ExecuteResult ste) { _state_map[node->getID()] = ste; return true; @@ -489,7 +489,7 @@ void SelectorNode::recoveryFrom(const QJsonObject& obj) STRLIST_PEAK(state_items); for (auto kv : state_items) { auto kv_pair = kv.split(u8":"); - _state_map[kv_pair[0].toInt()] = (LogicalResult)kv_pair[1].toInt(); + _state_map[kv_pair[0].toInt()] = (ExecuteResult)kv_pair[1].toInt(); } } @@ -513,13 +513,13 @@ QString SelectorNode::typeName() const return u8"选择"; } -LogicalResult SelectorNode::execute() +ExecuteResult SelectorNode::execute() { for (auto value : _state_map) { - if (value == LogicalResult::SUCCESS) - return LogicalResult::SUCCESS; + if (value == ExecuteResult::SUCCESS) + return ExecuteResult::SUCCESS; } - return LogicalResult::FAILURE; + return ExecuteResult::FAILURE; } QHash> SelectorNode::inputList() const @@ -539,7 +539,7 @@ QList> ParallelNode::getForwards() const return this->children(); } -bool ParallelNode::fallback(std::shared_ptr node, LogicalResult ste) +bool ParallelNode::fallback(std::shared_ptr node, ExecuteResult ste) { _state_map[node->getID()] = ste; return children().size() == _state_map.size(); @@ -555,13 +555,13 @@ QString ParallelNode::typeName() const return u8"并行"; } -LogicalResult ParallelNode::execute() +ExecuteResult ParallelNode::execute() { for (auto ste : this->_state_map) - if (ste != LogicalResult::SUCCESS) - return LogicalResult::FAILURE; + if (ste != ExecuteResult::SUCCESS) + return ExecuteResult::FAILURE; - return LogicalResult::SUCCESS; + return ExecuteResult::SUCCESS; } std::shared_ptr ParallelNode::newDefault() const @@ -589,7 +589,7 @@ void ParallelNode::recoveryFrom(const QJsonObject& obj) STRLIST_PEAK(state_items); for (auto kv : state_items) { auto kv_pair = kv.split(u8":"); - _state_map[kv_pair[0].toInt()] = (LogicalResult)kv_pair[1].toInt(); + _state_map[kv_pair[0].toInt()] = (ExecuteResult)kv_pair[1].toInt(); } } @@ -611,15 +611,15 @@ QString CompareNode::typeName() const return QString(u8"%1<%2>").arg(u8"比较", delegateName()); } -LogicalResult CompareNode::execute() +ExecuteResult CompareNode::execute() { if (this->_bind_delegate) { auto vl = _data_map[u8"左值"]; auto vb = _data_map[u8"右值"]; if (this->_bind_delegate->compare(vl, vb)) - return LogicalResult::SUCCESS; + return ExecuteResult::SUCCESS; } - return LogicalResult::FAILURE; + return ExecuteResult::FAILURE; } void CompareNode::insert(std::shared_ptr node, int index /*= -1*/) @@ -631,7 +631,7 @@ QList> CompareNode::getForwards() const return QList>(); } -bool CompareNode::fallback(std::shared_ptr node, LogicalResult ste) { +bool CompareNode::fallback(std::shared_ptr node, ExecuteResult ste) { return true; } @@ -820,14 +820,14 @@ void ExecuteNode::reset() _bind_delegate->reset(); } -LogicalResult ExecuteNode::execute() +ExecuteResult ExecuteNode::execute() { if (_bind_delegate) return _bind_delegate->execute(); - return LogicalResult::FAILURE; + return ExecuteResult::FAILURE; } -bool ExecuteNode::fallback(std::shared_ptr node, LogicalResult ste) +bool ExecuteNode::fallback(std::shared_ptr node, ExecuteResult ste) { return true; } @@ -915,7 +915,7 @@ QHash> ModifiedNode::outputList() const void ModifiedNode::reset() { - this->_result_store = LogicalResult::UNDEFINED; + this->_result_store = ExecuteResult::UNDEFINED; } QList> ModifiedNode::getForwards() const @@ -923,28 +923,28 @@ QList> ModifiedNode::getForwards() const return children(); } -bool ModifiedNode::fallback(std::shared_ptr node, LogicalResult ste) +bool ModifiedNode::fallback(std::shared_ptr node, ExecuteResult ste) { this->_result_store = ste; return true; } -LogicalResult ModifiedNode::execute() +ExecuteResult ModifiedNode::execute() { switch (_type_appoint) { case ModifyType::RESULT_INVENTER: - if (_result_store == LogicalResult::SUCCESS) { - return LogicalResult::FAILURE; + if (_result_store == ExecuteResult::SUCCESS) { + return ExecuteResult::FAILURE; } else { - return LogicalResult::SUCCESS; + return ExecuteResult::SUCCESS; } case ModifyType::ALWAYS_SUCCESS: - return LogicalResult::SUCCESS; + return ExecuteResult::SUCCESS; case ModifyType::ALWAYS_FAILURE: case ModifyType::NONE: - return LogicalResult::FAILURE; + return ExecuteResult::FAILURE; } } diff --git a/ComponentBasic/BehaviorPerform.h b/ComponentBasic/BehaviorPerform.h index 03dfb95..f770fa1 100644 --- a/ComponentBasic/BehaviorPerform.h +++ b/ComponentBasic/BehaviorPerform.h @@ -269,7 +269,7 @@ private: /// /// 执行结果 /// -enum class LogicalResult { +enum class ExecuteResult { UNDEFINED, // 未定义 SUCCESS, // 成功 FAILURE // 失败 @@ -305,7 +305,7 @@ public: /// /// /// - virtual LogicalResult execute() = 0; + virtual ExecuteResult execute() = 0; }; @@ -435,13 +435,13 @@ public: /// /// /// 接续执行标志 - virtual bool fallback(std::shared_ptr node, LogicalResult ste) = 0; + virtual bool fallback(std::shared_ptr node, ExecuteResult ste) = 0; /// /// 执行逻辑节点 /// /// /// - virtual LogicalResult execute() = 0; + virtual ExecuteResult execute() = 0; /// @@ -469,7 +469,7 @@ private: /// 地图变量表 /// QHash>> _variables; - LogicalResult _state_value = LogicalResult::FAILURE; + ExecuteResult _state_value = ExecuteResult::FAILURE; public: BehaviorMapNode(std::shared_ptr kernal); @@ -516,13 +516,13 @@ public: /// /// /// - bool fallback(std::shared_ptr node, LogicalResult ste) override; + bool fallback(std::shared_ptr node, ExecuteResult ste) override; /// /// 执行状态 /// /// - LogicalResult execute() override; + ExecuteResult execute() override; /// /// 输入变量列表 @@ -552,7 +552,7 @@ public: /// class COMPONENTBASIC_EXPORT SequenceNode : public LogicalNode { private: - QHash _state_map; + QHash _state_map; public: SequenceNode(std::shared_ptr kernal); @@ -564,8 +564,8 @@ public: QHash> outputList() const override; void reset() override; - LogicalResult execute() override; - bool fallback(std::shared_ptr node, LogicalResult ste) override; + ExecuteResult execute() override; + bool fallback(std::shared_ptr node, ExecuteResult ste) override; virtual std::shared_ptr newDefault() const override; void recoveryFrom(const QJsonObject& obj) override; @@ -577,7 +577,7 @@ public: /// class COMPONENTBASIC_EXPORT SelectorNode : public LogicalNode { private: - QHash _state_map; + QHash _state_map; public: SelectorNode(std::shared_ptr kernal); @@ -589,8 +589,8 @@ public: QHash> outputList() const override; void reset() override; - LogicalResult execute() override; - bool fallback(std::shared_ptr node, LogicalResult ste) override; + ExecuteResult execute() override; + bool fallback(std::shared_ptr node, ExecuteResult ste) override; virtual std::shared_ptr newDefault() const override; void recoveryFrom(const QJsonObject& obj) override; @@ -602,7 +602,7 @@ public: /// class COMPONENTBASIC_EXPORT ParallelNode : public LogicalNode { private: - QHash _state_map; + QHash _state_map; public: ParallelNode(std::shared_ptr kernal); @@ -614,8 +614,8 @@ public: QHash> outputList() const override; void reset() override; - LogicalResult execute() override; - bool fallback(std::shared_ptr node, LogicalResult ste) override; + ExecuteResult execute() override; + bool fallback(std::shared_ptr node, ExecuteResult ste) override; virtual std::shared_ptr newDefault() const override; void recoveryFrom(const QJsonObject& obj) override; @@ -645,8 +645,8 @@ public: virtual void insert(std::shared_ptr node, int index /*= -1*/) override; void reset() override; - LogicalResult execute() override; - virtual bool fallback(std::shared_ptr node, LogicalResult ste) override; + ExecuteResult execute() override; + virtual bool fallback(std::shared_ptr node, ExecuteResult ste) override; virtual std::shared_ptr newDefault() const override; void recoveryFrom(const QJsonObject& obj) override; @@ -675,8 +675,8 @@ public: virtual void insert(std::shared_ptr node, int index /*= -1*/) override; void reset() override; - LogicalResult execute() override; - virtual bool fallback(std::shared_ptr node, LogicalResult ste) override; + ExecuteResult execute() override; + virtual bool fallback(std::shared_ptr node, ExecuteResult ste) override; virtual std::shared_ptr newDefault() const override; void recoveryFrom(const QJsonObject& obj) override; @@ -695,7 +695,7 @@ enum class ModifyType { class COMPONENTBASIC_EXPORT ModifiedNode : public LogicalNode { private: ModifyType _type_appoint = ModifyType::NONE; - LogicalResult _result_store = LogicalResult::UNDEFINED; + ExecuteResult _result_store = ExecuteResult::UNDEFINED; public: ModifiedNode(std::shared_ptr kernal); @@ -711,10 +711,10 @@ public: QHash> outputList() const override; QList> getForwards() const override; - bool fallback(std::shared_ptr node, LogicalResult ste) override; + bool fallback(std::shared_ptr node, ExecuteResult ste) override; void reset() override; - LogicalResult execute() override; + ExecuteResult execute() override; std::shared_ptr newDefault() const override; void recoveryFrom(const QJsonObject& obj) override; diff --git a/SimsWorld/BehaviorEditor.cpp b/SimsWorld/BehaviorEditor.cpp index 2b686e7..8bc0812 100644 --- a/SimsWorld/BehaviorEditor.cpp +++ b/SimsWorld/BehaviorEditor.cpp @@ -433,6 +433,8 @@ void BehaviorEditor::new_behavior_map() if (!_current_fileurl.isValid()) return; + qDebug() << _current_fileurl; + // 清空所有子节点内容 auto childs = this->_map_root->children(); if (childs.size()) @@ -463,7 +465,8 @@ BehaviorEditor::BehaviorEditor(QWidget* parent /*= nullptr*/) auto mbar = this->menuBar(); auto _file = mbar->addMenu(u8"文件"); - _file->addAction(u8"打开", this, &BehaviorEditor::open_behavior_map); + _file->addAction(u8"打开行为树", this, &BehaviorEditor::open_behavior_map); + _file->addAction(u8"新建行为树", this, &BehaviorEditor::new_behavior_map); auto font = this->font(); font.setPixelSize(20); diff --git a/SimsWorld/BehaviorEditor.h b/SimsWorld/BehaviorEditor.h index c0ea807..85a645e 100644 --- a/SimsWorld/BehaviorEditor.h +++ b/SimsWorld/BehaviorEditor.h @@ -144,6 +144,10 @@ protected: #include #include #include + +/// +/// 行为树节点编辑器 +/// class BehaviorEditor : public QMainWindow { private: std::shared_ptr _global_loader;