This commit is contained in:
codeboss 2025-07-04 22:53:03 +08:00
parent f9fbba72db
commit 0272af06d4
2 changed files with 43 additions and 16 deletions

View File

@ -165,8 +165,8 @@ std::shared_ptr<Serializable> MapKernal::newDefault() const
return nullptr; return nullptr;
} }
LogicalNode::LogicalNode(NodeKind t /*= NodeKind::ACTIONNODE*/) LogicalNode::LogicalNode(NodeKind t, std::shared_ptr<MapKernal> kernal)
:_node_type(t) { :_node_type(t), _bind_kernal(kernal) {
} }
void LogicalNode::_set_parent_node(std::weak_ptr<LogicalNode> pnode) void LogicalNode::_set_parent_node(std::weak_ptr<LogicalNode> pnode)
@ -220,7 +220,7 @@ std::weak_ptr<LogicalNode> LogicalNode::parent() const
} }
BehaviorMapNode::BehaviorMapNode(std::shared_ptr<MapKernal> core) BehaviorMapNode::BehaviorMapNode(std::shared_ptr<MapKernal> core)
:LogicalNode(NodeKind::MAPNODE), _bind_kernal(core) { :LogicalNode(NodeKind::MAPNODE, core), _bind_kernal(core) {
} }
std::shared_ptr<MapKernal> BehaviorMapNode::getKernal() const std::shared_ptr<MapKernal> BehaviorMapNode::getKernal() const
@ -312,8 +312,9 @@ QHash<QString, std::shared_ptr<TopicData>> BehaviorMapNode::outputList() const
return list; return list;
} }
SequenceNode::SequenceNode()
: LogicalNode(NodeKind::SEQUENCENODE) { SequenceNode::SequenceNode(std::shared_ptr<MapKernal> kernal)
: LogicalNode(NodeKind::SEQUENCENODE, kernal) {
} }
QList<std::shared_ptr<LogicalNode>> SequenceNode::getForwards() const QList<std::shared_ptr<LogicalNode>> SequenceNode::getForwards() const
@ -393,7 +394,7 @@ bool SequenceNode::fallback(std::shared_ptr<LogicalNode> node, LogicalResult ste
std::shared_ptr<Serializable> SequenceNode::newDefault() const std::shared_ptr<Serializable> SequenceNode::newDefault() const
{ {
return std::make_shared<SequenceNode>(); return std::make_shared<SequenceNode>(this->bindMap()->getKernal());
} }
void SequenceNode::reset() void SequenceNode::reset()
@ -424,8 +425,8 @@ void LogicalNode::remove(std::shared_ptr<LogicalNode> node)
_child_list.removeAll(node); _child_list.removeAll(node);
} }
SelectorNode::SelectorNode() SelectorNode::SelectorNode(std::shared_ptr<MapKernal> kernal)
: LogicalNode(NodeKind::SEQUENCENODE) { : LogicalNode(NodeKind::SEQUENCENODE, kernal) {
} }
QList<std::shared_ptr<LogicalNode>> SelectorNode::getForwards() const QList<std::shared_ptr<LogicalNode>> SelectorNode::getForwards() const
@ -543,8 +544,8 @@ std::shared_ptr<Serializable> ParallelNode::newDefault() const
return std::make_shared<ParallelNode>(); return std::make_shared<ParallelNode>();
} }
ParallelNode::ParallelNode() ParallelNode::ParallelNode(std::shared_ptr<MapKernal> kernal)
: LogicalNode(NodeKind::PARALLELNODE) { : LogicalNode(NodeKind::PARALLELNODE, kernal) {
} }
QHash<QString, std::shared_ptr<TopicData>> ParallelNode::inputList() const QHash<QString, std::shared_ptr<TopicData>> ParallelNode::inputList() const
@ -615,7 +616,7 @@ std::shared_ptr<Serializable> CompareNode::newDefault() const
} }
CompareNode::CompareNode(std::shared_ptr<MapKernal> ins) CompareNode::CompareNode(std::shared_ptr<MapKernal> ins)
: LogicalNode(NodeKind::COMPARENODE), _bind_kernal(ins) { : LogicalNode(NodeKind::COMPARENODE, ins), _bind_kernal(ins) {
_data_map[u8"×óÖµ"] = std::make_shared<GeneralData>(); _data_map[u8"×óÖµ"] = std::make_shared<GeneralData>();
_data_map[u8"ÓÒÖµ"] = std::make_shared<GeneralData>(); _data_map[u8"ÓÒÖµ"] = std::make_shared<GeneralData>();
} }

View File

@ -323,6 +323,7 @@ enum class NodeKind {
PARALLELNODE, // 并行节点 PARALLELNODE, // 并行节点
COMPARENODE, // 比较节点 COMPARENODE, // 比较节点
ACTIONNODE, // 动作节点 ACTIONNODE, // 动作节点
MODIFYNODE, // 修饰节点
}; };
class BehaviorMapNode; class BehaviorMapNode;
/// <summary> /// <summary>
@ -332,6 +333,7 @@ class COMPONENTBASIC_EXPORT LogicalNode : virtual public Serializable, public st
private: private:
int _node_id = 0; int _node_id = 0;
NodeKind _node_type = NodeKind::ACTIONNODE; NodeKind _node_type = NodeKind::ACTIONNODE;
std::shared_ptr<MapKernal> _bind_kernal;
std::weak_ptr<LogicalNode> _parent_bind; std::weak_ptr<LogicalNode> _parent_bind;
QList<std::shared_ptr<LogicalNode>> _child_list; QList<std::shared_ptr<LogicalNode>> _child_list;
@ -343,7 +345,7 @@ private:
void _set_parent_node(std::weak_ptr<LogicalNode> pnode); void _set_parent_node(std::weak_ptr<LogicalNode> pnode);
public: public:
LogicalNode(NodeKind t); LogicalNode(NodeKind t, std::shared_ptr<MapKernal> kernal);
virtual ~LogicalNode() = default; virtual ~LogicalNode() = default;
/// <summary> /// <summary>
@ -556,7 +558,7 @@ private:
QHash<int, LogicalResult> _state_map; QHash<int, LogicalResult> _state_map;
public: public:
SequenceNode(); SequenceNode(std::shared_ptr<MapKernal> kernal);
QList<std::shared_ptr<LogicalNode>> getForwards() const override; QList<std::shared_ptr<LogicalNode>> getForwards() const override;
QString typeName() const override; QString typeName() const override;
@ -581,7 +583,7 @@ private:
QHash<int, LogicalResult> _state_map; QHash<int, LogicalResult> _state_map;
public: public:
SelectorNode(); SelectorNode(std::shared_ptr<MapKernal> kernal);
QList<std::shared_ptr<LogicalNode>> getForwards() const override; QList<std::shared_ptr<LogicalNode>> getForwards() const override;
QString typeName() const override; QString typeName() const override;
@ -606,7 +608,7 @@ private:
QHash<int, LogicalResult> _state_map; QHash<int, LogicalResult> _state_map;
public: public:
ParallelNode(); ParallelNode(std::shared_ptr<MapKernal> kernal);
QList<std::shared_ptr<LogicalNode>> getForwards() const override; QList<std::shared_ptr<LogicalNode>> getForwards() const override;
QString typeName() const override; QString typeName() const override;
@ -687,6 +689,30 @@ public:
void saveTo(QJsonObject& obj) const override; void saveTo(QJsonObject& obj) const override;
}; };
/// <summary>
/// 修饰节点类型
/// </summary>
enum class ModifyType {
NONE,
ALWAYS_SUCCESS, // 永远成功
ALWAYS_FAILURE, // 永远失败
RESULT_INVENTER, // 结果翻转
};
class COMPONENTBASIC_EXPORT ModifiedNode : public LogicalNode {
private:
std::shared_ptr<MapKernal> _bind_kernal;
ModifyType _type_appoint = ModifyType::NONE;
public:
ModifiedNode(std::shared_ptr<MapKernal> kernal)
: _bind_kernal(kernal){}
ModifyType modifyType() const;
void resetModify(ModifyType t);
};
// 行为节点 ==================================================================== // 行为节点 ====================================================================
/// <summary> /// <summary>