update
This commit is contained in:
parent
03958c106f
commit
d633d0130f
|
@ -52,8 +52,6 @@ QString BehaviorPerformPlugin::name() const
|
|||
#include <MessageLoader.h>
|
||||
MapKernal::MapKernal(std::shared_ptr<MessageLoader> ins)
|
||||
: _bind_loader(ins) {
|
||||
for (auto key : ins->allType())
|
||||
registData(ins->makeDefault(key));
|
||||
}
|
||||
|
||||
QList<QString> MapKernal::compareTypes() const
|
||||
|
@ -64,6 +62,7 @@ QList<QString> MapKernal::compareTypes() const
|
|||
void MapKernal::registCompare(std::shared_ptr<CompareDelegate> ins)
|
||||
{
|
||||
_compare_types[ins->name()] = ins;
|
||||
emit this->compareTypeListChanged();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
_convert_types[ins->name()] = ins;
|
||||
emit this->convertTypeListChanged();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
_execute_types[ins->typeName()] = ins;
|
||||
emit this->executeTypeListChanged();
|
||||
}
|
||||
|
||||
std::shared_ptr<MessageLoader> MapKernal::messageLoader() const
|
||||
|
@ -100,6 +101,22 @@ std::shared_ptr<MessageLoader> MapKernal::messageLoader() const
|
|||
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)
|
||||
{
|
||||
if (_variable_types.contains(init->topicString()))
|
||||
|
@ -741,7 +758,7 @@ QList<std::shared_ptr<LogicalNode>> ExecuteNode::getForwards() 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
|
||||
|
@ -785,7 +802,6 @@ std::shared_ptr<Serializable> ExecuteNode::newDefault() const
|
|||
return std::make_shared<ExecuteNode>(this->_bind_kernal);
|
||||
}
|
||||
|
||||
#include <QJsonObject>
|
||||
void ExecuteNode::recoveryFrom(const QJsonObject& obj)
|
||||
{
|
||||
QString delegate_name = "";
|
||||
|
|
|
@ -28,7 +28,10 @@ struct COMPONENTBASIC_EXPORT GeneralData : public TopicData {
|
|||
/// <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:
|
||||
/// <summary>
|
||||
/// 绑定载入器
|
||||
|
@ -58,6 +61,21 @@ private:
|
|||
/// </summary>
|
||||
QHash<QString, std::shared_ptr<LogicalNode>> _logicalnode_types;
|
||||
|
||||
signals:
|
||||
/// <summary>
|
||||
/// 比较器类型列表变更
|
||||
/// </summary>
|
||||
void compareTypeListChanged();
|
||||
/// <summary>
|
||||
/// 转换器类型列表变更
|
||||
/// </summary>
|
||||
void convertTypeListChanged();
|
||||
/// <summary>
|
||||
/// 执行节点类型列表变更
|
||||
/// </summary>
|
||||
void executeTypeListChanged();
|
||||
|
||||
|
||||
public:
|
||||
MapKernal(std::shared_ptr<MessageLoader> ins);
|
||||
virtual ~MapKernal() = default;
|
||||
|
@ -68,6 +86,8 @@ public:
|
|||
/// <returns></returns>
|
||||
std::shared_ptr<MessageLoader> messageLoader() const;
|
||||
|
||||
void initial();
|
||||
|
||||
// 数据类型管理 ======================================================
|
||||
/// <summary>
|
||||
/// 注册数据类型
|
||||
|
@ -84,7 +104,29 @@ public:
|
|||
/// </summary>
|
||||
/// <param name="topic"></param>
|
||||
/// <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>
|
||||
/// 注册转换器
|
||||
|
@ -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 继承
|
||||
std::shared_ptr<Serializable> newDefault() const override;
|
||||
void recoveryFrom(const QJsonObject& obj) override{}
|
||||
void saveTo(QJsonObject& obj) const override{}
|
||||
void recoveryFrom(const QJsonObject& obj) override {}
|
||||
void saveTo(QJsonObject& obj) const override {}
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
|
@ -219,7 +241,7 @@ public:
|
|||
/// 重置输入变量类型表
|
||||
/// </summary>
|
||||
/// <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>
|
||||
|
@ -442,13 +464,13 @@ enum class IO_TYPE {
|
|||
class COMPONENTBASIC_EXPORT BehaviorMapNode : public LogicalNode {
|
||||
private:
|
||||
std::shared_ptr<MapKernal> _bind_kernal;
|
||||
QString _map_name = u8"未命名行为树";
|
||||
QString _map_name = u8"行为树节点";
|
||||
|
||||
/// <summary>
|
||||
/// 地图变量表
|
||||
/// </summary>
|
||||
QHash<QString, std::pair<IO_TYPE, std::shared_ptr<TopicData>>> _variables;
|
||||
LogicalResult _state_value;
|
||||
LogicalResult _state_value = LogicalResult::FAILURE;
|
||||
|
||||
public:
|
||||
BehaviorMapNode(std::shared_ptr<MapKernal> kernal);
|
||||
|
@ -639,7 +661,7 @@ class COMPONENTBASIC_EXPORT ExecuteNode : public LogicalNode {
|
|||
private:
|
||||
std::shared_ptr<MapKernal> _bind_kernal;
|
||||
std::shared_ptr<ExecuteDelegate> _bind_delegate;
|
||||
|
||||
|
||||
public:
|
||||
ExecuteNode(std::shared_ptr<MapKernal> kernal);
|
||||
|
||||
|
@ -669,18 +691,18 @@ public:
|
|||
/// 行为树组件
|
||||
/// </summary>
|
||||
class COMPONENTBASIC_EXPORT BehaviorPerformPlugin :
|
||||
public RespondRoute<
|
||||
public RespondRoute<
|
||||
WsRespond<EntityInitialRequest, RespondDefault>,
|
||||
WsRespond<EntityPreparedRequest, RespondDefault>,
|
||||
WsRespond<SyncRequest, RespondDefault>,
|
||||
WsRespond<DeduceRequest, RespondDefault>>,
|
||||
public RequestRoute<>
|
||||
public RequestRoute<>
|
||||
{
|
||||
private:
|
||||
std::weak_ptr<WsEntity> _bind_entity;
|
||||
|
||||
public:
|
||||
void mapReset(const QString &path);
|
||||
void mapReset(const QString& path);
|
||||
|
||||
// 通过 ProcList 继承
|
||||
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="SurfaceMotion.cpp" />
|
||||
<ClCompile Include="VisibleCube.cpp" />
|
||||
<ClInclude Include="BehaviorPerform.h" />
|
||||
<QtMoc Include="BehaviorPerform.h" />
|
||||
<ClInclude Include="componentbasic_global.h" />
|
||||
<ClInclude Include="componentbasic.h" />
|
||||
<QtMoc Include="DeduceFramework.h" />
|
||||
|
|
|
@ -41,9 +41,6 @@
|
|||
<ClInclude Include="SurfaceMotion.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="BehaviorPerform.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="VisibleCube.cpp">
|
||||
|
@ -72,5 +69,8 @@
|
|||
<QtMoc Include="DeduceFramework.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</QtMoc>
|
||||
<QtMoc Include="BehaviorPerform.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</QtMoc>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -187,14 +187,33 @@ BehaviorEditor::BehaviorEditor(QWidget* parent /*= nullptr*/)
|
|||
_logical_present(new BehaviorsPresent(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);
|
||||
this->setCentralWidget(split_h);
|
||||
|
||||
split_h->addWidget(_type_view);
|
||||
_type_view->setModel(_type_model);
|
||||
|
||||
auto split_v = new QSplitter(Qt::Vertical, this);
|
||||
split_h->addWidget(split_v);
|
||||
|
||||
split_v->addWidget(_logical_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 <QStandardItemModel>
|
||||
#include <QTextBrowser>
|
||||
#include <MessageLoader.h>
|
||||
class BehaviorEditor : public QMainWindow {
|
||||
private:
|
||||
QListView *const _type_view;
|
||||
|
@ -97,6 +98,11 @@ private:
|
|||
BehaviorsPresent *const _logical_present;
|
||||
QTextBrowser *const _logs_present;
|
||||
|
||||
std::shared_ptr<MessageLoader> _glbal_loader;
|
||||
std::shared_ptr<MapKernal> _global_kernal;
|
||||
|
||||
public:
|
||||
BehaviorEditor(QWidget *parent = nullptr);
|
||||
|
||||
void nodeTypesViewInit(QStandardItemModel *m);
|
||||
};
|
Loading…
Reference in New Issue