*
This commit is contained in:
@@ -1205,7 +1205,7 @@ void VulkanRenderSession::drawWorld(GlobalTime gTime, float dTime, VkCommandBuff
|
|||||||
Pos::GlobalChunk x64offset = X64Offset >> Pos::Object_t::BS_Bit >> 4;
|
Pos::GlobalChunk x64offset = X64Offset >> Pos::Object_t::BS_Bit >> 4;
|
||||||
Pos::GlobalRegion x64offset_region = x64offset >> 2;
|
Pos::GlobalRegion x64offset_region = x64offset >> 2;
|
||||||
|
|
||||||
auto [voxelVertexs, nodeVertexs] = VKCTX->ThreadVertexObj.getChunksForRender(WorldId, Pos, 2, PCO.ProjView, x64offset_region);
|
auto [voxelVertexs, nodeVertexs] = VKCTX->ThreadVertexObj.getChunksForRender(WorldId, Pos, 1, PCO.ProjView, x64offset_region);
|
||||||
|
|
||||||
glm::mat4 orig = PCO.Model;
|
glm::mat4 orig = PCO.Model;
|
||||||
for(auto& [chunkPos, vertexs, vertexCount] : nodeVertexs) {
|
for(auto& [chunkPos, vertexs, vertexCount] : nodeVertexs) {
|
||||||
|
|||||||
@@ -2355,31 +2355,31 @@ void GameServer::stepSyncContent() {
|
|||||||
remoteClient->onUpdate();
|
remoteClient->onUpdate();
|
||||||
|
|
||||||
// Это для пробы строительства и ломания нод
|
// Это для пробы строительства и ломания нод
|
||||||
// while(!cec->Build.empty()) {
|
while(!remoteClient->Build.empty()) {
|
||||||
// Pos::GlobalNode node = cec->Build.front();
|
Pos::GlobalNode node = remoteClient->Build.front();
|
||||||
// cec->Build.pop();
|
remoteClient->Build.pop();
|
||||||
|
|
||||||
// Pos::GlobalRegion rPos = node >> 6;
|
Pos::GlobalRegion rPos = node >> 6;
|
||||||
// Pos::bvec4u cPos = (node >> 4) & 0x3;
|
Pos::bvec4u cPos = (node >> 4) & 0x3;
|
||||||
// Pos::bvec16u nPos = node & 0xf;
|
Pos::bvec16u nPos = node & 0xf;
|
||||||
|
|
||||||
// auto ®ion = Expanse.Worlds[0]->Regions[rPos];
|
auto ®ion = Expanse.Worlds[0]->Regions[rPos];
|
||||||
// region->Nodes[cPos.pack()][nPos.pack()].NodeId = 4;
|
region->Nodes[cPos.pack()][nPos.pack()].NodeId = 4;
|
||||||
// region->IsChunkChanged_Nodes |= 1ull << cPos.pack();
|
region->IsChunkChanged_Nodes |= 1ull << cPos.pack();
|
||||||
// }
|
}
|
||||||
|
|
||||||
// while(!cec->Break.empty()) {
|
while(!remoteClient->Break.empty()) {
|
||||||
// Pos::GlobalNode node = cec->Break.front();
|
Pos::GlobalNode node = remoteClient->Break.front();
|
||||||
// cec->Break.pop();
|
remoteClient->Break.pop();
|
||||||
|
|
||||||
// Pos::GlobalRegion rPos = node >> 6;
|
Pos::GlobalRegion rPos = node >> 6;
|
||||||
// Pos::bvec4u cPos = (node >> 4) & 0x3;
|
Pos::bvec4u cPos = (node >> 4) & 0x3;
|
||||||
// Pos::bvec16u nPos = node & 0xf;
|
Pos::bvec16u nPos = node & 0xf;
|
||||||
|
|
||||||
// auto ®ion = Expanse.Worlds[0]->Regions[rPos];
|
auto ®ion = Expanse.Worlds[0]->Regions[rPos];
|
||||||
// region->Nodes[cPos.pack()][nPos.pack()].NodeId = 0;
|
region->Nodes[cPos.pack()][nPos.pack()].NodeId = 0;
|
||||||
// region->IsChunkChanged_Nodes |= 1ull << cPos.pack();
|
region->IsChunkChanged_Nodes |= 1ull << cPos.pack();
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -764,7 +764,37 @@ void RemoteClient::NetworkAndResource_t::decrementAssets(ResUses_t::RefAssets_t&
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RemoteClient::onUpdate() {
|
void RemoteClient::onUpdate() {
|
||||||
|
Pos::Object pos = CameraPos;
|
||||||
|
|
||||||
|
Pos::GlobalRegion r1 = LastPos >> 12 >> 4 >> 2;
|
||||||
|
Pos::GlobalRegion r2 = pos >> 12 >> 4 >> 2;
|
||||||
|
if(r1 != r2) {
|
||||||
|
CrossedRegion = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!Actions.get_read().empty()) {
|
||||||
|
auto lock = Actions.lock();
|
||||||
|
while(!lock->empty()) {
|
||||||
|
uint8_t action = lock->front();
|
||||||
|
lock->pop();
|
||||||
|
|
||||||
|
glm::quat q = CameraQuat.toQuat();
|
||||||
|
glm::vec4 v = glm::mat4(q)*glm::vec4(0, 0, -6, 1);
|
||||||
|
Pos::GlobalNode pos = (Pos::GlobalNode) (glm::vec3) v;
|
||||||
|
pos += pos >> Pos::Object_t::BS_Bit;
|
||||||
|
|
||||||
|
if(action == 0) {
|
||||||
|
// Break
|
||||||
|
Break.push(pos);
|
||||||
|
|
||||||
|
} else if(action == 1) {
|
||||||
|
// Build
|
||||||
|
Build.push(pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LastPos = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::tuple<WorldId_t, Pos::Object, uint8_t>> RemoteClient::getViewPoints() {
|
std::vector<std::tuple<WorldId_t, Pos::Object, uint8_t>> RemoteClient::getViewPoints() {
|
||||||
|
|||||||
@@ -320,6 +320,7 @@ class RemoteClient {
|
|||||||
public:
|
public:
|
||||||
const std::string Username;
|
const std::string Username;
|
||||||
Pos::Object CameraPos = {0, 0, 0};
|
Pos::Object CameraPos = {0, 0, 0};
|
||||||
|
Pos::Object LastPos = CameraPos;
|
||||||
ToServer::PacketQuat CameraQuat = {0};
|
ToServer::PacketQuat CameraQuat = {0};
|
||||||
TOS::SpinlockObject<std::queue<uint8_t>> Actions;
|
TOS::SpinlockObject<std::queue<uint8_t>> Actions;
|
||||||
ResourceId RecievedAssets[(int) EnumAssets::MAX_ENUM] = {0};
|
ResourceId RecievedAssets[(int) EnumAssets::MAX_ENUM] = {0};
|
||||||
@@ -328,6 +329,7 @@ public:
|
|||||||
ContentViewInfo ContentViewState;
|
ContentViewInfo ContentViewState;
|
||||||
// Если игрок пересекал границы региона (для перерасчёта ContentViewState)
|
// Если игрок пересекал границы региона (для перерасчёта ContentViewState)
|
||||||
bool CrossedRegion = true;
|
bool CrossedRegion = true;
|
||||||
|
std::queue<Pos::GlobalNode> Build, Break;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RemoteClient(asio::io_context &ioc, tcp::socket socket, const std::string username, std::vector<ResourceFile::Hash_t> &&client_cache)
|
RemoteClient(asio::io_context &ioc, tcp::socket socket, const std::string username, std::vector<ResourceFile::Hash_t> &&client_cache)
|
||||||
|
|||||||
Reference in New Issue
Block a user