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;
}
LogicalNode::LogicalNode(NodeKind t /*= NodeKind::ACTIONNODE*/)
:_node_type(t) {
LogicalNode::LogicalNode(NodeKind t, std::shared_ptr<MapKernal> kernal)
:_node_type(t), _bind_kernal(kernal) {
}
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)
:LogicalNode(NodeKind::MAPNODE), _bind_kernal(core) {
:LogicalNode(NodeKind::MAPNODE, core), _bind_kernal(core) {
}
std::shared_ptr<MapKernal> BehaviorMapNode::getKernal() const
@ -312,8 +312,9 @@ QHash<QString, std::shared_ptr<TopicData>> BehaviorMapNode::outputList() const
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
@ -393,7 +394,7 @@ bool SequenceNode::fallback(std::shared_ptr<LogicalNode> node, LogicalResult ste
std::shared_ptr<Serializable> SequenceNode::newDefault() const
{
return std::make_shared<SequenceNode>();
return std::make_shared<SequenceNode>(this->bindMap()->getKernal());
}
void SequenceNode::reset()
@ -412,7 +413,7 @@ void LogicalNode::insert(std::shared_ptr<LogicalNode> node, int index /*= -1*/)
if (it->getID() == node->getID())
return;
if(node->parent().lock())
if (node->parent().lock())
node->parent().lock()->remove(node);
_child_list.insert(index, node);
@ -424,8 +425,8 @@ void LogicalNode::remove(std::shared_ptr<LogicalNode> node)
_child_list.removeAll(node);
}
SelectorNode::SelectorNode()
: LogicalNode(NodeKind::SEQUENCENODE) {
SelectorNode::SelectorNode(std::shared_ptr<MapKernal> kernal)
: LogicalNode(NodeKind::SEQUENCENODE, kernal) {
}
QList<std::shared_ptr<LogicalNode>> SelectorNode::getForwards() const
@ -543,8 +544,8 @@ std::shared_ptr<Serializable> ParallelNode::newDefault() const
return std::make_shared<ParallelNode>();
}
ParallelNode::ParallelNode()
: LogicalNode(NodeKind::PARALLELNODE) {
ParallelNode::ParallelNode(std::shared_ptr<MapKernal> kernal)
: LogicalNode(NodeKind::PARALLELNODE, kernal) {
}
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)
: 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>();
}

View File

@ -323,6 +323,7 @@ enum class NodeKind {
PARALLELNODE, // 并行节点
COMPARENODE, // 比较节点
ACTIONNODE, // 动作节点
MODIFYNODE, // 修饰节点
};
class BehaviorMapNode;
/// <summary>
@ -332,6 +333,7 @@ class COMPONENTBASIC_EXPORT LogicalNode : virtual public Serializable, public st
private:
int _node_id = 0;
NodeKind _node_type = NodeKind::ACTIONNODE;
std::shared_ptr<MapKernal> _bind_kernal;
std::weak_ptr<LogicalNode> _parent_bind;
QList<std::shared_ptr<LogicalNode>> _child_list;
@ -343,7 +345,7 @@ private:
void _set_parent_node(std::weak_ptr<LogicalNode> pnode);
public:
LogicalNode(NodeKind t);
LogicalNode(NodeKind t, std::shared_ptr<MapKernal> kernal);
virtual ~LogicalNode() = default;
/// <summary>
@ -556,7 +558,7 @@ private:
QHash<int, LogicalResult> _state_map;
public:
SequenceNode();
SequenceNode(std::shared_ptr<MapKernal> kernal);
QList<std::shared_ptr<LogicalNode>> getForwards() const override;
QString typeName() const override;
@ -581,7 +583,7 @@ private:
QHash<int, LogicalResult> _state_map;
public:
SelectorNode();
SelectorNode(std::shared_ptr<MapKernal> kernal);
QList<std::shared_ptr<LogicalNode>> getForwards() const override;
QString typeName() const override;
@ -606,7 +608,7 @@ private:
QHash<int, LogicalResult> _state_map;
public:
ParallelNode();
ParallelNode(std::shared_ptr<MapKernal> kernal);
QList<std::shared_ptr<LogicalNode>> getForwards() const override;
QString typeName() const override;
@ -687,6 +689,30 @@ public:
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>