update
This commit is contained in:
parent
3347f1c1e7
commit
e9d2d011f1
|
@ -0,0 +1,40 @@
|
|||
#include "BehaviorPerform.h"
|
||||
|
||||
|
||||
void BehaviorPerformPlugin::recoveryFrom(const QJsonObject& obj)
|
||||
{
|
||||
}
|
||||
|
||||
void BehaviorPerformPlugin::saveTo(QJsonObject& obj) const
|
||||
{
|
||||
}
|
||||
|
||||
std::shared_ptr<WsComponent> BehaviorPerformPlugin::defaultNew() const
|
||||
{
|
||||
return std::make_shared<BehaviorPerformPlugin>();
|
||||
}
|
||||
|
||||
void BehaviorPerformPlugin::bindEntity(std::weak_ptr<WsEntity> host)
|
||||
{
|
||||
this->_bind_entity = host;
|
||||
}
|
||||
|
||||
QString BehaviorPerformPlugin::name() const
|
||||
{
|
||||
return NAME(BehaviorPerformPlugin);
|
||||
}
|
||||
|
||||
void MapHost::setVariable(const QString& key, std::shared_ptr<TopicData> ins)
|
||||
{
|
||||
if (_variable_map.contains(key) && _variable_map[key]->topicString() != ins->typeName())
|
||||
throw new UniException("不同数据类型数据绑定同一个名称!");
|
||||
_variable_map[key] = ins;
|
||||
}
|
||||
|
||||
std::shared_ptr<TopicData> MapHost::getVariable(const QString& key) const
|
||||
{
|
||||
if(!_variable_map.contains(key))
|
||||
return nullptr;
|
||||
|
||||
return _variable_map[key];
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
#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;
|
||||
};
|
||||
|
|
@ -101,16 +101,18 @@
|
|||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="BehaviorPerform.cpp" />
|
||||
<ClCompile Include="componentbasic.cpp" />
|
||||
<ClCompile Include="DeduceFramework.cpp" />
|
||||
<ClCompile Include="InvisibleComponent.cpp" />
|
||||
<ClCompile Include="ComponentsInfoPull.cpp" />
|
||||
<ClCompile Include="RouteManage.cpp" />
|
||||
<ClCompile Include="SurfaceMotion.cpp" />
|
||||
<ClCompile Include="VisibleCube.cpp" />
|
||||
<ClInclude Include="BehaviorPerform.h" />
|
||||
<ClInclude Include="componentbasic_global.h" />
|
||||
<ClInclude Include="componentbasic.h" />
|
||||
<QtMoc Include="DeduceFramework.h" />
|
||||
<ClInclude Include="InvisibleComponent.h" />
|
||||
<ClInclude Include="ComponentsInfoPull.h" />
|
||||
<ClInclude Include="RouteManage.h" />
|
||||
<ClInclude Include="SurfaceMotion.h" />
|
||||
<ClInclude Include="VisibleCube.h" />
|
||||
|
|
|
@ -35,12 +35,15 @@
|
|||
<ClInclude Include="RouteManage.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="InvisibleComponent.h">
|
||||
<ClInclude Include="ComponentsInfoPull.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SurfaceMotion.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="BehaviorPerform.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="VisibleCube.cpp">
|
||||
|
@ -55,12 +58,15 @@
|
|||
<ClCompile Include="componentbasic.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="InvisibleComponent.cpp">
|
||||
<ClCompile Include="ComponentsInfoPull.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SurfaceMotion.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="BehaviorPerform.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<QtMoc Include="DeduceFramework.h">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include "InvisibleComponent.h"
|
||||
#include "ComponentsInfoPull.h"
|
||||
|
||||
ComponentsInfoPull::ComponentsInfoPull() {}
|
||||
|
|
@ -37,18 +37,28 @@ public:
|
|||
virtual QString content() const noexcept;
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// 通用消息基类
|
||||
/// </summary>
|
||||
class WsMessage : public Serializable {
|
||||
class TopicData {
|
||||
public:
|
||||
virtual ~WsMessage() = default;
|
||||
virtual ~TopicData() = default;
|
||||
/// <summary>
|
||||
/// 获取消息类型字符串
|
||||
/// </summary>
|
||||
/// <returns>消息类型</returns>
|
||||
virtual QString topicString() const = 0;
|
||||
/// <summary>
|
||||
/// 提取包含默认值的实例
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
virtual std::shared_ptr<TopicData> newDefault() const = 0;
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// 通用消息基类
|
||||
/// </summary>
|
||||
class WsMessage : public Serializable, public TopicData {
|
||||
public:
|
||||
virtual ~WsMessage() = default;
|
||||
/// <summary>
|
||||
/// 目标实体ID
|
||||
/// </summary>
|
||||
/// <returns>ID</returns>
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
#include "BehaviorEditor.h"
|
|
@ -0,0 +1,12 @@
|
|||
#pragma once
|
||||
#include <QMainWindow>
|
||||
#include "BehaviorPerform.h"
|
||||
|
||||
class BehaviorEditor : public QMainWindow
|
||||
{
|
||||
public:
|
||||
BehaviorEditor(std::shared_ptr<BehaviorMapNode> map_ins, QWidget *parent = nullptr);
|
||||
|
||||
|
||||
};
|
||||
|
|
@ -99,6 +99,7 @@
|
|||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="BehaviorEditor.cpp" />
|
||||
<ClCompile Include="PerspectiveView.cpp" />
|
||||
<ClCompile Include="TempletAssemble.cpp" />
|
||||
<QtRcc Include="sims_world.qrc" />
|
||||
|
@ -115,6 +116,9 @@
|
|||
<ItemGroup>
|
||||
<QtMoc Include="PerspectiveView.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="BehaviorEditor.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
|
||||
<Import Project="$(QtMsBuild)\qt.targets" />
|
||||
|
|
|
@ -52,6 +52,9 @@
|
|||
<ClCompile Include="PerspectiveView.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="BehaviorEditor.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<QtMoc Include="TempletAssemble.h">
|
||||
|
@ -61,4 +64,9 @@
|
|||
<Filter>Header Files</Filter>
|
||||
</QtMoc>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="BehaviorEditor.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
Loading…
Reference in New Issue