SimsWorld/SimsBasic/internal_impl.cpp

280 lines
6.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "internal_impl.h"
RtWsEntity::RtWsEntity() {}
void RtWsEntity::resetTemplet(const QString& name) {
this->_templet_name = name;
}
QString RtWsEntity::templetName() const {
return this->_templet_name;
}
void RtWsEntity::resetID(uint64_t id) {
this->_entity_id = id;
}
uint64_t RtWsEntity::entityID() const {
return this->_entity_id;
}
void RtWsEntity::resetName(const QString& name) {
this->_runtime_name = name;
}
QString RtWsEntity::name() const {
return this->_runtime_name;
}
void RtWsEntity::append(std::shared_ptr<WsSpecializedSystem> ins) {
if (this->_comps_list.contains(ins->name()))
return;
ins->bindEntity(this->shared_from_this());
this->_comps_list[ins->name()] = ins;
}
void RtWsEntity::remove(const QString& component_type) {
this->_comps_list.remove(component_type);
}
QList<std::shared_ptr<WsSpecializedSystem>> RtWsEntity::components() const {
return _comps_list.values();
}
std::shared_ptr<Serializable> RtWsEntity::newDefault() const {
auto newx = std::make_shared<RtWsEntity>();
newx->_entity_id = this->_entity_id;
newx->_templet_name = this->_templet_name;
newx->_runtime_name = this->_runtime_name;
for (auto c : this->_comps_list)
newx->append(std::static_pointer_cast<WsSpecializedSystem>(c->newDefault()));
return newx;
}
#include <QSet>
QList<QString> RtWsEntity::inputTypes() const
{
QList<QString> types;
for (auto c : this->_comps_list) {
for (auto f : c->respondSignatures())
types.append(f.first);
}
return types.toSet().toList();
}
#include <QVariant>
#include <QJsonArray>
QList<WsRespondEntry> RtWsEntity::getRespondWithSignature(const WsRespondSignatureType& t) const
{
QList<WsRespondEntry> list;
for (auto c : this->_comps_list)
list.append(c->getRespondWithSignature(t));
return list;
}
QList<WsRespondEntry> RtWsEntity::getRespondWithInType(const QString& msg_type) const
{
QList<WsRespondEntry> list;
for (auto c : this->_comps_list)
list.append(c->getRespondWithInType(msg_type));
return list;
}
void RtWsEntity::recoveryFrom(const QJsonObject& obj)
{
this->_entity_id = obj["entity_id"].toVariant().toULongLong();
this->_runtime_name = obj["entity_name"].toString();
this->_templet_name = obj["entity_templet"].toString();
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 + "<EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>");
compins->recoveryFrom(value);
}
}
void RtWsEntity::saveTo(QJsonObject& obj) const
{
obj["entity_id"] = QJsonValue::fromVariant(QVariant::fromValue(this->_entity_id));
obj["entity_name"] = this->_runtime_name;
obj["entity_templet"] = this->_templet_name;
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;
}
QString RtEntityManager::templetName() const
{
return "ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
uint64_t RtEntityManager::entityID() const
{
return const_id;
}
QString RtEntityManager::name() const
{
return "ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ψһʵ<EFBFBD><EFBFBD>";
}
void RtEntityManager::append(std::shared_ptr<WsSpecializedSystem> ins) {
ins->bindEntity(this->shared_from_this());
_comps_list[ins->name()] = ins;
}
std::shared_ptr<Serializable> RtEntityManager::newDefault() const
{
return nullptr;
}
QList<WsRespondEntry> RtEntityManager::getRespondWithSignature(const WsRespondSignatureType& t) const
{
QList<WsRespondEntry> list;
for (auto c : this->_comps_list)
list.append(c->getRespondWithSignature(t));
return list;
}
QList<WsRespondEntry> RtEntityManager::getRespondWithInType(const QString& msg_type) const
{
QList<WsRespondEntry> list;
for (auto c : this->_comps_list)
list.append(c->getRespondWithInType(msg_type));
return list;
}
void RtEntityManager::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 + "<EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>");
compins->recoveryFrom(value);
}
}
void RtEntityManager::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 RtEntityManager::remove(const QString& component_type)
{
this->_comps_list.remove(component_type);
}
QList<std::shared_ptr<WsSpecializedSystem>> RtEntityManager::components() const
{
return this->_comps_list.values();
}
QString RtResourceManager::templetName() const
{
return "RtResourceManager";
}
uint64_t RtResourceManager::entityID() const
{
return const_id;
}
QString RtResourceManager::name() const
{
return "<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>";
}
std::shared_ptr<Serializable> RtResourceManager::newDefault() const
{
return nullptr;
}
QList<WsRespondEntry> RtResourceManager::getRespondWithSignature(const WsRespondSignatureType& t) const
{
QList<WsRespondEntry> list;
for (auto c : this->_comps_list)
list.append(c->getRespondWithSignature(t));
return list;
}
QList<WsRespondEntry> RtResourceManager::getRespondWithInType(const QString& msg_type) const
{
QList<WsRespondEntry> list;
for (auto c : this->_comps_list)
list.append(c->getRespondWithInType(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 + "<EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>");
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<WsSpecializedSystem> 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<WsSpecializedSystem>> RtResourceManager::components() const
{
return this->_comps_list.values();
}