diff --git a/ComponentBasic/BehaviorPerform.cpp b/ComponentBasic/BehaviorPerform.cpp index 858bff4..7cd7e39 100644 --- a/ComponentBasic/BehaviorPerform.cpp +++ b/ComponentBasic/BehaviorPerform.cpp @@ -572,10 +572,6 @@ LogicalResult CompareNode::execute() void CompareNode::insert(std::shared_ptr node, int index /*= -1*/) { - if (this->children().size()) - return; - - LogicalNode::insert(node, index); } QList> CompareNode::getForwards() const @@ -589,11 +585,11 @@ bool CompareNode::fallback(std::shared_ptr node, LogicalResult ste) std::shared_ptr CompareNode::newDefault() const { - return std::make_shared(); + return std::make_shared(_bind_kernal); } -CompareNode::CompareNode() - : LogicalNode(NodeKind::COMPARENODE) { +CompareNode::CompareNode(std::shared_ptr ins) + : LogicalNode(NodeKind::COMPARENODE), _bind_kernal(ins) { _data_map[u8"左值"] = std::make_shared(); _data_map[u8"右值"] = std::make_shared(); } @@ -620,6 +616,7 @@ QHash> CompareNode::outputList() const return QHash>(); } +#include void CompareNode::recoveryFrom(const QJsonObject& obj) { auto vala = obj[u8"ValL"]; @@ -627,6 +624,12 @@ void CompareNode::recoveryFrom(const QJsonObject& obj) _data_map[u8"左值"]->recoveryFrom(vala.toObject()); _data_map[u8"右值"]->recoveryFrom(valb.toObject()); + + QString delegate_name = ""; + STRING_PEAK(delegate_name); + + auto deins = _bind_kernal->getCompare(delegate_name); + bindDelegate(deins); } void CompareNode::saveTo(QJsonObject& obj) const @@ -637,6 +640,13 @@ void CompareNode::saveTo(QJsonObject& obj) const obj[u8"ValL"] = vala; obj[u8"ValR"] = valb; + + QString delegate_name = ""; + if (_bind_delegate) { + delegate_name = _bind_delegate->name(); + } + + STRING_SAVE(delegate_name); } #include @@ -707,3 +717,100 @@ std::shared_ptr ConvertDelegate::convert(const QList ins) + : LogicalNode(NodeKind::ACTIONNODE), _bind_kernal(ins) { +} + +QString ExecuteNode::delegateName() const +{ + if (_bind_delegate) + return _bind_delegate->typeName(); + return ""; +} + +void ExecuteNode::bindDelegate(std::shared_ptr ins) +{ + _bind_delegate = ins; +} + +QList> ExecuteNode::getForwards() const +{ + return QList>(); +} + +QString ExecuteNode::typeName() const +{ + return QString("执行节点<%1>(%2)").arg(delegateName()).arg(getID()); +} + +QHash> ExecuteNode::inputList() const +{ + if (_bind_delegate) + return _bind_delegate->inputList(); + return QHash>(); +} + +QHash> ExecuteNode::outputList() const +{ + if (_bind_delegate) + return _bind_delegate->outputList(); + return QHash>(); +} + +void ExecuteNode::insert(std::shared_ptr node, int index /*= -1*/) +{ +} + +void ExecuteNode::reset() +{ + if (_bind_delegate) + _bind_delegate->reset(); +} + +LogicalResult ExecuteNode::execute() +{ + if (_bind_delegate) + return _bind_delegate->execute(); + return LogicalResult::FAILURE; +} + +bool ExecuteNode::fallback(std::shared_ptr node, LogicalResult ste) +{ + return true; +} + +std::shared_ptr ExecuteNode::newDefault() const +{ + return std::make_shared(this->_bind_kernal); +} + +#include +void ExecuteNode::recoveryFrom(const QJsonObject& obj) +{ + QString delegate_name = ""; + STRING_PEAK(delegate_name); + + auto de_ins = _bind_kernal->getExecute(delegate_name); + this->bindDelegate(de_ins); + + if (obj.contains("data_json")) { + auto delegate_json = obj["data_json"].toObject(); + de_ins->recoveryFrom(delegate_json); + } +} + +void ExecuteNode::saveTo(QJsonObject& obj) const +{ + QString delegate_name = ""; + if (_bind_delegate) + delegate_name = _bind_delegate->typeName(); + + STRING_SAVE(delegate_name); + + if (_bind_delegate) { + QJsonObject data_json; + this->_bind_delegate->saveTo(data_json); + obj["data_json"] = data_json; + } +} diff --git a/ComponentBasic/BehaviorPerform.h b/ComponentBasic/BehaviorPerform.h index 5ce5657..e396cbe 100644 --- a/ComponentBasic/BehaviorPerform.h +++ b/ComponentBasic/BehaviorPerform.h @@ -320,7 +320,7 @@ private: void _set_parent_node(std::weak_ptr pnode); public: - LogicalNode(NodeKind t = NodeKind::ACTIONNODE); + LogicalNode(NodeKind t); virtual ~LogicalNode() = default; /// @@ -442,7 +442,7 @@ enum class IO_TYPE { class COMPONENTBASIC_EXPORT BehaviorMapNode : public LogicalNode { private: std::shared_ptr _bind_kernal; - QString _map_name; + QString _map_name = u8"未命名行为树"; /// /// 地图变量表 @@ -537,20 +537,14 @@ public: QList> getForwards() const override; QString typeName() const override; - LogicalResult execute() override; QHash> inputList() const override; QHash> outputList() const override; void reset() override; + LogicalResult execute() override; bool fallback(std::shared_ptr node, LogicalResult ste) override; - /// - /// 新实例 - /// - /// - /// virtual std::shared_ptr newDefault() const override; - void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; }; @@ -568,20 +562,14 @@ public: QList> getForwards() const override; QString typeName() const override; - LogicalResult execute() override; QHash> inputList() const override; QHash> outputList() const override; void reset() override; + LogicalResult execute() override; bool fallback(std::shared_ptr node, LogicalResult ste) override; - /// - /// 新实例 - /// - /// - /// virtual std::shared_ptr newDefault() const override; - void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; }; @@ -596,22 +584,16 @@ private: public: ParallelNode(); + QList> getForwards() const override; + QString typeName() const override; + QHash> inputList() const override; QHash> outputList() const override; - QString typeName() const override; - - QList> getForwards() const override; + void reset() override; + LogicalResult execute() override; bool fallback(std::shared_ptr node, LogicalResult ste) override; - LogicalResult execute() override; - void reset() override; - - /// - /// 新实例 - /// - /// - /// virtual std::shared_ptr newDefault() const override; void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; @@ -622,34 +604,60 @@ public: /// class COMPONENTBASIC_EXPORT CompareNode : public LogicalNode { private: + std::shared_ptr _bind_kernal; + std::shared_ptr _bind_delegate; QHash> _data_map; public: - CompareNode(); + CompareNode(std::shared_ptr kernal); QString delegateName() const; void bindDelegate(std::shared_ptr ins); + virtual QList> getForwards() const override; + QString typeName() const override; + QHash> inputList() const override; QHash> outputList() const override; virtual void insert(std::shared_ptr node, int index /*= -1*/) override; - QString typeName() const override; - - virtual QList> getForwards() const override; + void reset() override; + LogicalResult execute() override; virtual bool fallback(std::shared_ptr node, LogicalResult ste) override; + virtual std::shared_ptr newDefault() const override; + void recoveryFrom(const QJsonObject& obj) override; + void saveTo(QJsonObject& obj) const override; +}; + +/// +/// 执行节点 +/// +class COMPONENTBASIC_EXPORT ExecuteNode : public LogicalNode { +private: + std::shared_ptr _bind_kernal; + std::shared_ptr _bind_delegate; + +public: + ExecuteNode(std::shared_ptr kernal); + + QString delegateName() const; + void bindDelegate(std::shared_ptr ins); + + virtual QList> getForwards() const override; + QString typeName() const override; + + QHash> inputList() const override; + QHash> outputList() const override; + + virtual void insert(std::shared_ptr node, int index /*= -1*/) override; - LogicalResult execute() override; void reset() override; + LogicalResult execute() override; + virtual bool fallback(std::shared_ptr node, LogicalResult ste) override; - /// - /// 新实例 - /// - /// - /// virtual std::shared_ptr newDefault() const override; void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override;