Сначала надо сделать расчёт мешей в отдельном потоке
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user