119 lines
3.0 KiB
C++
119 lines
3.0 KiB
C++
#pragma once
|
||
|
||
#include "componentbasic.h"
|
||
#include <messagebasic.h>
|
||
|
||
/// <summary>
|
||
/// 行为树实例化节点
|
||
/// </summary>
|
||
class COMPONENTBASIC_EXPORT MapHost : public Serializable {
|
||
private:
|
||
/// <summary>
|
||
/// {Topic,init-value}
|
||
/// </summary>
|
||
QHash<QString, std::shared_ptr<TopicData>> _variable_types;
|
||
/// <summary>
|
||
/// 变量表
|
||
/// </summary>
|
||
QHash<QString, std::shared_ptr<TopicData>> _variable_map;
|
||
|
||
public:
|
||
virtual ~MapHost() = default;
|
||
/// <summary>
|
||
/// 注册数据类型
|
||
/// </summary>
|
||
/// <param name="init"></param>
|
||
virtual void registData(std::shared_ptr<TopicData> init) = 0;
|
||
/// <summary>
|
||
/// 设置变量,如果类型错误会抛出UniException异常
|
||
/// 节点初始化时会按照配置注册默认值变量
|
||
/// </summary>
|
||
virtual void setVariable(const QString& key, std::shared_ptr<TopicData> ins);
|
||
/// <summary>
|
||
/// 获取指定名称的数据变量
|
||
/// </summary>
|
||
/// <param name="key"></param>
|
||
/// <returns>如果不存在指定名称数据,返回nullptr,类型不确定</returns>
|
||
virtual std::shared_ptr<TopicData> getVariable(const QString& key) const;
|
||
};
|
||
|
||
/// <summary>
|
||
/// 所有逻辑节点的基类
|
||
/// </summary>
|
||
class LogicalNode : public Serializable {
|
||
public:
|
||
virtual ~LogicalNode() = default;
|
||
|
||
/// <summary>
|
||
/// 设置节点id
|
||
/// </summary>
|
||
/// <param name="unique_id"></param>
|
||
virtual void setID(int unique_id) = 0;
|
||
/// <summary>
|
||
/// 提取节点id
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
virtual int getID() const = 0;
|
||
/// <summary>
|
||
/// 获取节点名称
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
virtual QString name() const = 0;
|
||
|
||
/// <summary>
|
||
/// 获取子节点列表
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
virtual QList<std::shared_ptr<LogicalNode>> children() const = 0;
|
||
|
||
/// <summary>
|
||
/// 声明输入变量的内部标识和数据接口
|
||
/// </summary>
|
||
/// <returns>map{name, type}</returns>
|
||
virtual QHash<QString, std::shared_ptr<TopicData>> inputDeclares() const = 0;
|
||
/// <summary>
|
||
/// 声明输出变量的内部标识和数据接口
|
||
/// </summary>
|
||
/// <returns>map{name, type}</returns>
|
||
virtual QHash<QString, std::shared_ptr<TopicData>> outputDeclares() const = 0;
|
||
};
|
||
|
||
/// <summary>
|
||
/// 自定义行为树节点实例
|
||
/// </summary>
|
||
class COMPONENTBASIC_EXPORT BehaviorMapNode : public MapHost, public LogicalNode {
|
||
public:
|
||
/// <summary>
|
||
/// 重置行为树数据文件
|
||
/// </summary>
|
||
/// <param name="path"></param>
|
||
virtual void setBehaviorMap(const QString &path){}
|
||
/// <summary>
|
||
/// 设置行为树节点名称
|
||
/// </summary>
|
||
/// <param name="val"></param>
|
||
virtual void resetName(const QString &val){}
|
||
};
|
||
|
||
/// <summary>
|
||
/// 行为树组件
|
||
/// </summary>
|
||
class COMPONENTBASIC_EXPORT BehaviorPerformPlugin : public ProcList<
|
||
WsRespond<SyncRequest, RespondDefault>
|
||
>{
|
||
private:
|
||
std::weak_ptr<WsEntity> _bind_entity;
|
||
|
||
public:
|
||
// 通过 ProcList 继承
|
||
void execute(std::shared_ptr<Immediate> map, std::shared_ptr<const SyncRequest> in, QList<std::shared_ptr<RespondDefault>>& out) override;
|
||
|
||
void recoveryFrom(const QJsonObject& obj) override;
|
||
void saveTo(QJsonObject& obj) const override;
|
||
|
||
std::shared_ptr<WsComponent> defaultNew() const override;
|
||
void bindEntity(std::weak_ptr<WsEntity> host) override;
|
||
QString name() const override;
|
||
};
|
||
|