Сначала надо сделать расчёт мешей в отдельном потоке

This commit is contained in:
2025-07-24 18:10:55 +06:00
parent bd31b57d7d
commit 67476f5908
3 changed files with 44 additions and 12 deletions

View File

@@ -85,10 +85,6 @@ struct World {
}; };
struct DefVoxelInfo {
};
struct DefWorldInfo { struct DefWorldInfo {
}; };
@@ -153,7 +149,7 @@ public:
} Binary; } Binary;
struct { struct {
std::unordered_map<DefVoxelId_t, DefVoxelInfo> DefVoxel; std::unordered_map<DefVoxelId_t, DefVoxel_t> DefVoxel;
std::unordered_map<DefNodeId_t, DefNode_t> DefNode; std::unordered_map<DefNodeId_t, DefNode_t> DefNode;
std::unordered_map<DefWorldId_t, DefWorldInfo> DefWorld; std::unordered_map<DefWorldId_t, DefWorldInfo> DefWorld;
std::unordered_map<DefPortalId_t, DefPortalInfo> DefPortal; std::unordered_map<DefPortalId_t, DefPortalInfo> DefPortal;

View File

@@ -50,11 +50,21 @@ struct PP_Content_RegionRemove : public ParsedPacket {
{} {}
}; };
struct PP_Definition_FreeNode : public ParsedPacket { struct PP_Definition_Voxel : public ParsedPacket {
DefNodeId_t Id; DefVoxelId_t Id;
DefVoxel_t Def;
PP_Definition_FreeNode(DefNodeId_t id) PP_Definition_Voxel(DefVoxelId_t id, DefVoxel_t def)
: ParsedPacket(ToClient::L1::Definition, (uint8_t) ToClient::L2Definition::Node), : ParsedPacket(ToClient::L1::Definition, (uint8_t) ToClient::L2Definition::Voxel),
Id(id), Def(def)
{}
};
struct PP_Definition_FreeVoxel : public ParsedPacket {
DefVoxelId_t Id;
PP_Definition_FreeVoxel(DefVoxelId_t id)
: ParsedPacket(ToClient::L1::Definition, (uint8_t) ToClient::L2Definition::FreeVoxel),
Id(id) Id(id)
{} {}
}; };
@@ -69,6 +79,15 @@ struct PP_Definition_Node : public ParsedPacket {
{} {}
}; };
struct PP_Definition_FreeNode : public ParsedPacket {
DefNodeId_t Id;
PP_Definition_FreeNode(DefNodeId_t id)
: ParsedPacket(ToClient::L1::Definition, (uint8_t) ToClient::L2Definition::FreeNode),
Id(id)
{}
};
struct PP_Resource_InitResSend : public ParsedPacket { struct PP_Resource_InitResSend : public ParsedPacket {
Hash_t Hash; Hash_t Hash;
BinaryResource Resource; BinaryResource Resource;
@@ -327,16 +346,33 @@ void ServerSession::atFreeDrawTime(GlobalTime gTime, float dTime) {
} else if(pack->Level1 == ToClient::L1::Definition) { } else if(pack->Level1 == ToClient::L1::Definition) {
ToClient::L2Definition l2 = ToClient::L2Definition(pack->Level2); ToClient::L2Definition l2 = ToClient::L2Definition(pack->Level2);
if(l2 == ToClient::L2Definition::Node) {
if(l2 == ToClient::L2Definition::Voxel) {
PP_Definition_Voxel &p = *dynamic_cast<PP_Definition_Voxel*>(pack);
Registry.DefVoxel[p.Id] = p.Def;
onContentDefinesAdd[EnumDefContent::Voxel].push_back(p.Id);
} else if(l2 == ToClient::L2Definition::FreeVoxel) {
PP_Definition_FreeVoxel &p = *dynamic_cast<PP_Definition_FreeVoxel*>(pack);
{
auto iter = Registry.DefVoxel.find(p.Id);
if(iter != Registry.DefVoxel.end())
Registry.DefVoxel.erase(iter);
}
onContentDefinesLost[EnumDefContent::Voxel].push_back(p.Id);
} else if(l2 == ToClient::L2Definition::Node) {
PP_Definition_Node &p = *dynamic_cast<PP_Definition_Node*>(pack); PP_Definition_Node &p = *dynamic_cast<PP_Definition_Node*>(pack);
Registry.DefNode[p.Id] = p.Def; Registry.DefNode[p.Id] = p.Def;
onContentDefinesAdd[EnumDefContent::Node].push_back(p.Id); onContentDefinesAdd[EnumDefContent::Node].push_back(p.Id);
} else if(l2 == ToClient::L2Definition::FreeNode) { } else if(l2 == ToClient::L2Definition::FreeNode) {
PP_Definition_FreeNode &p = *dynamic_cast<PP_Definition_FreeNode*>(pack); PP_Definition_FreeNode &p = *dynamic_cast<PP_Definition_FreeNode*>(pack);
{
auto iter = Registry.DefNode.find(p.Id);
if(iter != Registry.DefNode.end())
Registry.DefNode.erase(iter);
}
onContentDefinesLost[EnumDefContent::Node].push_back(p.Id); onContentDefinesLost[EnumDefContent::Node].push_back(p.Id);
} }
} else if(pack->Level1 == ToClient::L1::Content) { } else if(pack->Level1 == ToClient::L1::Content) {
ToClient::L2Content l2 = ToClient::L2Content(pack->Level2); ToClient::L2Content l2 = ToClient::L2Content(pack->Level2);
if(l2 == ToClient::L2Content::ChunkVoxels) { if(l2 == ToClient::L2Content::ChunkVoxels) {