Compare commits

...

2 Commits

Author SHA1 Message Date
codeboss 22be09682d update 2025-06-12 08:04:17 +08:00
codeboss dc57bcd94c update 2025-06-11 23:09:20 +08:00
11 changed files with 133 additions and 10 deletions

View File

@ -102,13 +102,13 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="componentbasic.cpp" />
<ClCompile Include="EntityDocks.cpp" />
<ClCompile Include="DeduceFramework.cpp" />
<ClCompile Include="InvisibleComponent.cpp" />
<ClCompile Include="MapRoute.cpp" />
<ClCompile Include="VisibleBox.cpp" />
<ClInclude Include="componentbasic_global.h" />
<ClInclude Include="componentbasic.h" />
<QtMoc Include="EntityDocks.h" />
<QtMoc Include="DeduceFramework.h" />
<ClInclude Include="InvisibleComponent.h" />
<ClInclude Include="MapRoute.h" />
<ClInclude Include="VisibleBox.h" />

View File

@ -46,7 +46,7 @@
<ClCompile Include="MapRoute.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="EntityDocks.cpp">
<ClCompile Include="DeduceFramework.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="componentbasic.cpp">
@ -57,7 +57,7 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="EntityDocks.h">
<QtMoc Include="DeduceFramework.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup>

View File

@ -1,4 +1,4 @@
#include "EntityDocks.h"
#include "DeduceFramework.h"
#include <stdexcept>
#include <QMutex>
#include <QMutexLocker>
@ -65,8 +65,12 @@ void DeduceFramework::init_framework()
mgr_e->append(this->shared_from_this());
auto info_pulls = std::make_shared<ComponentsInfoPull>();
mgr_e->append(info_pulls);
this->_entity_map_over_0xffff[mgr_e->entityID()] = mgr_e;
auto res_e = std::make_shared<RtResourceManager>();
info_pulls = std::make_shared<ComponentsInfoPull>();
res_e->append(info_pulls);
this->_entity_map_over_0xffff[res_e->entityID()] = res_e;
}
std::shared_ptr<WsComponent> DeduceFramework::defaultNew() const
@ -174,6 +178,7 @@ void DeduceFramework::execute(std::shared_ptr<Immediate> map,
ins->_component_types = this->_factory_ins->allComponentTypes();
ins->_entity_templets[NAME(RtEntityManager)] = RtEntityManager::const_id;
ins->_entity_templets[NAME(RtResourceManager)] = RtResourceManager::const_id;
for (auto ekey : this->_templets_within_0x2ff_0xffff.keys())
ins->_entity_templets[ekey] = this->_templets_within_0x2ff_0xffff[ekey]->entityID();

View File

@ -223,3 +223,88 @@ QList<std::shared_ptr<WsMessage>> ImmediateKernel::execute(std::shared_ptr<const
}
return rets;
}
uint64_t ImmediateKernel::resourceManagerID() const
{
return RtResourceManager::const_id;
}
QString RtResourceManager::templetName() const
{
return "RtResourceManager";
}
uint64_t RtResourceManager::entityID() const
{
return const_id;
}
QString RtResourceManager::name() const
{
return "资源管理器实例";
}
std::shared_ptr<WsEntity> RtResourceManager::defaultNew() const
{
return nullptr;
}
QList<WsRespondEntry> RtResourceManager::getEntryWithSignature(const WsRespondSignatureType& t) const
{
QList<WsRespondEntry> list;
for (auto c : this->_comps_list)
list.append(c->getEntryWithSignature(t));
return list;
}
QList<WsRespondEntry> RtResourceManager::getEntryWithInType(const QString& msg_type) const
{
QList<WsRespondEntry> list;
for (auto c : this->_comps_list)
list.append(c->getEntrysWithInType(msg_type));
return list;
}
void RtResourceManager::recoveryFrom(const QJsonObject& obj)
{
auto array = obj["component_array"].toArray();
for (auto idx = 0; idx < array.size(); ++idx) {
auto value = array.at(idx).toObject();
auto type = value["component_type"].toString();
auto compins = this->_comps_list[type];
if (!compins)
throw new UniException(type + "类型插件不存在!");
compins->recoveryFrom(value);
}
}
void RtResourceManager::saveTo(QJsonObject& obj) const
{
QJsonArray array;
for (auto c : this->_comps_list)
{
QJsonObject comp_obj;
comp_obj["component_type"] = c->name();
c->saveTo(comp_obj);
array.append(comp_obj);
}
obj["component_array"] = array;
}
void RtResourceManager::append(std::shared_ptr<WsComponent> ins)
{
ins->bindEntity(this->shared_from_this());
this->_comps_list[ins->name()] = ins;
}
void RtResourceManager::remove(const QString& component_type)
{
this->_comps_list.remove(component_type);
}
QList<std::shared_ptr<WsComponent>> RtResourceManager::components() const
{
return this->_comps_list.values();
}

View File

@ -118,6 +118,30 @@ public:
void saveTo(QJsonObject& obj) const override;
};
class SIMSBASIC_EXPORT RtResourceManager : public WsEntity, public ComponentSet,
public std::enable_shared_from_this<RtResourceManager>
{
public:
static const uint64_t const_id = 0x01f0;
QHash<QString, std::shared_ptr<WsComponent>> _comps_list;
QString templetName() const override;
uint64_t entityID() const override;
QString name() const override;
std::shared_ptr<WsEntity> defaultNew() const override;
QList<WsRespondEntry> getEntryWithSignature(const WsRespondSignatureType& t) const override;
QList<WsRespondEntry> getEntryWithInType(const QString& msg_type) const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
void append(std::shared_ptr<WsComponent> ins) override;
void remove(const QString& component_type) override;
QList<std::shared_ptr<WsComponent>> components() const override;
};
/// <summary>
/// 实体内迅捷调用核心
/// </summary>
@ -133,6 +157,8 @@ public:
/// </summary>
/// <returns></returns>
virtual uint64_t entityManagerID() const override;
virtual uint64_t resourceManagerID() const override;
/// <summary>
/// 实体内指定类型的调用立即执行
/// </summary>
@ -146,4 +172,5 @@ public:
/// <returns></returns>
virtual QList<std::shared_ptr<WsMessage>> execute(std::shared_ptr<const WsMessage> in) override;
};

View File

@ -77,6 +77,11 @@ public:
/// <returns></returns>
virtual uint64_t entityManagerID() const = 0;
/// <summary>
/// 获取资源管理器id
/// </summary>
/// <returns></returns>
virtual uint64_t resourceManagerID() const = 0;
/// <summary>
/// 实体内指定类型的调用立即执行
/// </summary>
/// <param name="in"></param>

View File

@ -1,5 +1,5 @@
#pragma once
#include <EntityDocks.h>
#include <DeduceFramework.h>
#include <QDialog>
#include <QTimer>
#include <QListView>

View File

@ -28,7 +28,8 @@ void TempletAssemble::reply_accept(const QList<std::shared_ptr<WsMessage>>& msg_
this->_component_types->addItems(conv->_component_types);
for (auto info : conv->_entity_templets.keys()) {
auto templat_id = conv->_entity_templets[info];
if ((QList<uint64_t>{RtEntityManager::const_id}).contains(templat_id))
if ((QList<uint64_t>{ RtEntityManager::const_id, RtResourceManager::const_id })
.contains(templat_id))
continue;
auto cell = new QStandardItem(info);

View File

@ -5,7 +5,7 @@
#include <QComboBox>
#include <QPushButton>
#include <QTimer>
#include <EntityDocks.h>
#include <DeduceFramework.h>
class TempletAssemble : public QDialog
{

View File

@ -2,7 +2,7 @@
#include <QtWidgets/QMainWindow>
#include "ui_sims_world.h"
#include <EntityDocks.h>
#include <DeduceFramework.h>
class SimsWorld : public QMainWindow
{