update
This commit is contained in:
parent
03958c106f
commit
d633d0130f
|
@ -52,8 +52,6 @@ QString BehaviorPerformPlugin::name() const
|
||||||
#include <MessageLoader.h>
|
#include <MessageLoader.h>
|
||||||
MapKernal::MapKernal(std::shared_ptr<MessageLoader> ins)
|
MapKernal::MapKernal(std::shared_ptr<MessageLoader> ins)
|
||||||
: _bind_loader(ins) {
|
: _bind_loader(ins) {
|
||||||
for (auto key : ins->allType())
|
|
||||||
registData(ins->makeDefault(key));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QString> MapKernal::compareTypes() const
|
QList<QString> MapKernal::compareTypes() const
|
||||||
|
@ -64,6 +62,7 @@ QList<QString> MapKernal::compareTypes() const
|
||||||
void MapKernal::registCompare(std::shared_ptr<CompareDelegate> ins)
|
void MapKernal::registCompare(std::shared_ptr<CompareDelegate> ins)
|
||||||
{
|
{
|
||||||
_compare_types[ins->name()] = ins;
|
_compare_types[ins->name()] = ins;
|
||||||
|
emit this->compareTypeListChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<CompareDelegate> MapKernal::getCompare(const QString& name)
|
std::shared_ptr<CompareDelegate> MapKernal::getCompare(const QString& name)
|
||||||
|
@ -76,6 +75,7 @@ std::shared_ptr<CompareDelegate> MapKernal::getCompare(const QString& name)
|
||||||
void MapKernal::registConvert(std::shared_ptr<ConvertDelegate> ins)
|
void MapKernal::registConvert(std::shared_ptr<ConvertDelegate> ins)
|
||||||
{
|
{
|
||||||
_convert_types[ins->name()] = ins;
|
_convert_types[ins->name()] = ins;
|
||||||
|
emit this->convertTypeListChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QString> MapKernal::convertTypes() const
|
QList<QString> MapKernal::convertTypes() const
|
||||||
|
@ -93,6 +93,7 @@ std::shared_ptr<ConvertDelegate> MapKernal::getConvert(const QString& name)
|
||||||
void MapKernal::registExecute(std::shared_ptr<ExecuteDelegate> ins)
|
void MapKernal::registExecute(std::shared_ptr<ExecuteDelegate> ins)
|
||||||
{
|
{
|
||||||
_execute_types[ins->typeName()] = ins;
|
_execute_types[ins->typeName()] = ins;
|
||||||
|
emit this->executeTypeListChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<MessageLoader> MapKernal::messageLoader() const
|
std::shared_ptr<MessageLoader> MapKernal::messageLoader() const
|
||||||
|
@ -100,6 +101,22 @@ std::shared_ptr<MessageLoader> MapKernal::messageLoader() const
|
||||||
return this->_bind_loader;
|
return this->_bind_loader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MapKernal::initial()
|
||||||
|
{
|
||||||
|
// 注册基础数据类型
|
||||||
|
registData(std::make_shared<GeneralData>());
|
||||||
|
for (auto key : messageLoader()->allType())
|
||||||
|
registData(messageLoader()->makeDefault(key));
|
||||||
|
|
||||||
|
// 注册可用节点类型
|
||||||
|
registNode(std::make_shared<SequenceNode>());
|
||||||
|
registNode(std::make_shared<SelectorNode>());
|
||||||
|
registNode(std::make_shared<ParallelNode>());
|
||||||
|
registNode(std::make_shared<CompareNode>(this->shared_from_this()));
|
||||||
|
registNode(std::make_shared<ExecuteNode>(this->shared_from_this()));
|
||||||
|
registNode(std::make_shared<BehaviorMapNode>(this->shared_from_this()));
|
||||||
|
}
|
||||||
|
|
||||||
void MapKernal::registData(std::shared_ptr<TopicData> init)
|
void MapKernal::registData(std::shared_ptr<TopicData> init)
|
||||||
{
|
{
|
||||||
if (_variable_types.contains(init->topicString()))
|
if (_variable_types.contains(init->topicString()))
|
||||||
|
@ -741,7 +758,7 @@ QList<std::shared_ptr<LogicalNode>> ExecuteNode::getForwards() const
|
||||||
|
|
||||||
QString ExecuteNode::typeName() const
|
QString ExecuteNode::typeName() const
|
||||||
{
|
{
|
||||||
return QString("执行节点<%1>(%2)").arg(delegateName()).arg(getID());
|
return QString(u8"执行节点<%1>").arg(delegateName());
|
||||||
}
|
}
|
||||||
|
|
||||||
QHash<QString, std::shared_ptr<TopicData>> ExecuteNode::inputList() const
|
QHash<QString, std::shared_ptr<TopicData>> ExecuteNode::inputList() const
|
||||||
|
@ -785,7 +802,6 @@ std::shared_ptr<Serializable> ExecuteNode::newDefault() const
|
||||||
return std::make_shared<ExecuteNode>(this->_bind_kernal);
|
return std::make_shared<ExecuteNode>(this->_bind_kernal);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <QJsonObject>
|
|
||||||
void ExecuteNode::recoveryFrom(const QJsonObject& obj)
|
void ExecuteNode::recoveryFrom(const QJsonObject& obj)
|
||||||
{
|
{
|
||||||
QString delegate_name = "";
|
QString delegate_name = "";
|
||||||
|
|
|
@ -28,7 +28,10 @@ struct COMPONENTBASIC_EXPORT GeneralData : public TopicData {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 行为树实例化节点
|
/// 行为树实例化节点
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class COMPONENTBASIC_EXPORT MapKernal : virtual public Serializable {
|
class COMPONENTBASIC_EXPORT MapKernal :
|
||||||
|
public QObject, virtual public Serializable,
|
||||||
|
public std::enable_shared_from_this<MapKernal> {
|
||||||
|
Q_OBJECT
|
||||||
private:
|
private:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 绑定载入器
|
/// 绑定载入器
|
||||||
|
@ -58,6 +61,21 @@ private:
|
||||||
/// </summary>
|
/// </summary>
|
||||||
QHash<QString, std::shared_ptr<LogicalNode>> _logicalnode_types;
|
QHash<QString, std::shared_ptr<LogicalNode>> _logicalnode_types;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
/// <summary>
|
||||||
|
/// 比较器类型列表变更
|
||||||
|
/// </summary>
|
||||||
|
void compareTypeListChanged();
|
||||||
|
/// <summary>
|
||||||
|
/// 转换器类型列表变更
|
||||||
|
/// </summary>
|
||||||
|
void convertTypeListChanged();
|
||||||
|
/// <summary>
|
||||||
|
/// 执行节点类型列表变更
|
||||||
|
/// </summary>
|
||||||
|
void executeTypeListChanged();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MapKernal(std::shared_ptr<MessageLoader> ins);
|
MapKernal(std::shared_ptr<MessageLoader> ins);
|
||||||
virtual ~MapKernal() = default;
|
virtual ~MapKernal() = default;
|
||||||
|
@ -68,6 +86,8 @@ public:
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
std::shared_ptr<MessageLoader> messageLoader() const;
|
std::shared_ptr<MessageLoader> messageLoader() const;
|
||||||
|
|
||||||
|
void initial();
|
||||||
|
|
||||||
// 数据类型管理 ======================================================
|
// 数据类型管理 ======================================================
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 注册数据类型
|
/// 注册数据类型
|
||||||
|
@ -84,7 +104,29 @@ public:
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="topic"></param>
|
/// <param name="topic"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
virtual std::shared_ptr<TopicData> getData(const QString &topic);
|
virtual std::shared_ptr<TopicData> getData(const QString& topic);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 逻辑树类型管理 ====================================================
|
||||||
|
/// <summary>
|
||||||
|
/// 注册逻辑节点
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ins"></param>
|
||||||
|
virtual void registNode(std::shared_ptr<LogicalNode> ins);
|
||||||
|
/// <summary>
|
||||||
|
/// 执行器类型名称
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
virtual QList<QString> nodeTypes() const;
|
||||||
|
/// <summary>
|
||||||
|
/// 获取指定类型的执行器节点
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
virtual std::shared_ptr<LogicalNode> getNode(const QString& name);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -108,6 +150,7 @@ public:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 转换器类型管理 ======================================================
|
// 转换器类型管理 ======================================================
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 注册转换器
|
/// 注册转换器
|
||||||
|
@ -148,31 +191,10 @@ public:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 逻辑树类型管理 ====================================================
|
|
||||||
/// <summary>
|
|
||||||
/// 注册逻辑节点
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="ins"></param>
|
|
||||||
virtual void registNode(std::shared_ptr<LogicalNode> ins);
|
|
||||||
/// <summary>
|
|
||||||
/// 执行器类型名称
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
virtual QList<QString> nodeTypes() const;
|
|
||||||
/// <summary>
|
|
||||||
/// 获取指定类型的执行器节点
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
virtual std::shared_ptr<LogicalNode> getNode(const QString& name);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 通过 Serializable 继承
|
// 通过 Serializable 继承
|
||||||
std::shared_ptr<Serializable> newDefault() const override;
|
std::shared_ptr<Serializable> newDefault() const override;
|
||||||
void recoveryFrom(const QJsonObject& obj) override{}
|
void recoveryFrom(const QJsonObject& obj) override {}
|
||||||
void saveTo(QJsonObject& obj) const override{}
|
void saveTo(QJsonObject& obj) const override {}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -219,7 +241,7 @@ public:
|
||||||
/// 重置输入变量类型表
|
/// 重置输入变量类型表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="table">list{pair{类型名称,绑定输入变量名}}</param>
|
/// <param name="table">list{pair{类型名称,绑定输入变量名}}</param>
|
||||||
void inputReset(const QList<std::pair<DATA_TOPIC_STRING, QString>> &table);
|
void inputReset(const QList<std::pair<DATA_TOPIC_STRING, QString>>& table);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 输入变量
|
/// 输入变量
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -442,13 +464,13 @@ enum class IO_TYPE {
|
||||||
class COMPONENTBASIC_EXPORT BehaviorMapNode : public LogicalNode {
|
class COMPONENTBASIC_EXPORT BehaviorMapNode : public LogicalNode {
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<MapKernal> _bind_kernal;
|
std::shared_ptr<MapKernal> _bind_kernal;
|
||||||
QString _map_name = u8"未命名行为树";
|
QString _map_name = u8"行为树节点";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 地图变量表
|
/// 地图变量表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
QHash<QString, std::pair<IO_TYPE, std::shared_ptr<TopicData>>> _variables;
|
QHash<QString, std::pair<IO_TYPE, std::shared_ptr<TopicData>>> _variables;
|
||||||
LogicalResult _state_value;
|
LogicalResult _state_value = LogicalResult::FAILURE;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BehaviorMapNode(std::shared_ptr<MapKernal> kernal);
|
BehaviorMapNode(std::shared_ptr<MapKernal> kernal);
|
||||||
|
@ -669,18 +691,18 @@ public:
|
||||||
/// 行为树组件
|
/// 行为树组件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class COMPONENTBASIC_EXPORT BehaviorPerformPlugin :
|
class COMPONENTBASIC_EXPORT BehaviorPerformPlugin :
|
||||||
public RespondRoute<
|
public RespondRoute<
|
||||||
WsRespond<EntityInitialRequest, RespondDefault>,
|
WsRespond<EntityInitialRequest, RespondDefault>,
|
||||||
WsRespond<EntityPreparedRequest, RespondDefault>,
|
WsRespond<EntityPreparedRequest, RespondDefault>,
|
||||||
WsRespond<SyncRequest, RespondDefault>,
|
WsRespond<SyncRequest, RespondDefault>,
|
||||||
WsRespond<DeduceRequest, RespondDefault>>,
|
WsRespond<DeduceRequest, RespondDefault>>,
|
||||||
public RequestRoute<>
|
public RequestRoute<>
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
std::weak_ptr<WsEntity> _bind_entity;
|
std::weak_ptr<WsEntity> _bind_entity;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void mapReset(const QString &path);
|
void mapReset(const QString& path);
|
||||||
|
|
||||||
// 通过 ProcList 继承
|
// 通过 ProcList 继承
|
||||||
void execute(std::shared_ptr<const EntityInitialRequest> in, QList<std::shared_ptr<RespondDefault>>& out) override;
|
void execute(std::shared_ptr<const EntityInitialRequest> in, QList<std::shared_ptr<RespondDefault>>& out) override;
|
||||||
|
|
|
@ -108,7 +108,7 @@
|
||||||
<ClCompile Include="RouteManage.cpp" />
|
<ClCompile Include="RouteManage.cpp" />
|
||||||
<ClCompile Include="SurfaceMotion.cpp" />
|
<ClCompile Include="SurfaceMotion.cpp" />
|
||||||
<ClCompile Include="VisibleCube.cpp" />
|
<ClCompile Include="VisibleCube.cpp" />
|
||||||
<ClInclude Include="BehaviorPerform.h" />
|
<QtMoc Include="BehaviorPerform.h" />
|
||||||
<ClInclude Include="componentbasic_global.h" />
|
<ClInclude Include="componentbasic_global.h" />
|
||||||
<ClInclude Include="componentbasic.h" />
|
<ClInclude Include="componentbasic.h" />
|
||||||
<QtMoc Include="DeduceFramework.h" />
|
<QtMoc Include="DeduceFramework.h" />
|
||||||
|
|
|
@ -41,9 +41,6 @@
|
||||||
<ClInclude Include="SurfaceMotion.h">
|
<ClInclude Include="SurfaceMotion.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="BehaviorPerform.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="VisibleCube.cpp">
|
<ClCompile Include="VisibleCube.cpp">
|
||||||
|
@ -72,5 +69,8 @@
|
||||||
<QtMoc Include="DeduceFramework.h">
|
<QtMoc Include="DeduceFramework.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</QtMoc>
|
</QtMoc>
|
||||||
|
<QtMoc Include="BehaviorPerform.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</QtMoc>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -187,14 +187,33 @@ BehaviorEditor::BehaviorEditor(QWidget* parent /*= nullptr*/)
|
||||||
_logical_present(new BehaviorsPresent(this)),
|
_logical_present(new BehaviorsPresent(this)),
|
||||||
_logs_present(new QTextBrowser(this))
|
_logs_present(new QTextBrowser(this))
|
||||||
{
|
{
|
||||||
|
_glbal_loader = std::make_shared<MessageLoader>();
|
||||||
|
_global_kernal = std::make_shared<MapKernal>(_glbal_loader);
|
||||||
|
_global_kernal->initial();
|
||||||
|
|
||||||
auto split_h = new QSplitter(Qt::Horizontal, this);
|
auto split_h = new QSplitter(Qt::Horizontal, this);
|
||||||
this->setCentralWidget(split_h);
|
this->setCentralWidget(split_h);
|
||||||
|
|
||||||
split_h->addWidget(_type_view);
|
split_h->addWidget(_type_view);
|
||||||
_type_view->setModel(_type_model);
|
_type_view->setModel(_type_model);
|
||||||
|
|
||||||
auto split_v = new QSplitter(Qt::Vertical, this);
|
auto split_v = new QSplitter(Qt::Vertical, this);
|
||||||
split_h->addWidget(split_v);
|
split_h->addWidget(split_v);
|
||||||
|
|
||||||
split_v->addWidget(_logical_present);
|
split_v->addWidget(_logical_present);
|
||||||
split_v->addWidget(_logs_present);
|
split_v->addWidget(_logs_present);
|
||||||
|
|
||||||
|
nodeTypesViewInit(_type_model);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <QStandardItem>
|
||||||
|
void BehaviorEditor::nodeTypesViewInit(QStandardItemModel* m)
|
||||||
|
{
|
||||||
|
auto types = this->_global_kernal->nodeTypes();
|
||||||
|
std::sort(types.begin(), types.end());
|
||||||
|
for (auto type : types) {
|
||||||
|
auto row_item = new QStandardItem(type);
|
||||||
|
row_item->setEditable(false);
|
||||||
|
m->appendRow(row_item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,6 +90,7 @@ public:
|
||||||
#include <QListView>
|
#include <QListView>
|
||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
#include <QTextBrowser>
|
#include <QTextBrowser>
|
||||||
|
#include <MessageLoader.h>
|
||||||
class BehaviorEditor : public QMainWindow {
|
class BehaviorEditor : public QMainWindow {
|
||||||
private:
|
private:
|
||||||
QListView *const _type_view;
|
QListView *const _type_view;
|
||||||
|
@ -97,6 +98,11 @@ private:
|
||||||
BehaviorsPresent *const _logical_present;
|
BehaviorsPresent *const _logical_present;
|
||||||
QTextBrowser *const _logs_present;
|
QTextBrowser *const _logs_present;
|
||||||
|
|
||||||
|
std::shared_ptr<MessageLoader> _glbal_loader;
|
||||||
|
std::shared_ptr<MapKernal> _global_kernal;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BehaviorEditor(QWidget *parent = nullptr);
|
BehaviorEditor(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
void nodeTypesViewInit(QStandardItemModel *m);
|
||||||
};
|
};
|
Loading…
Reference in New Issue