From 05a13a40e75d217267f41ac66263d9320a45fd97 Mon Sep 17 00:00:00 2001 From: Ariari04 Date: Wed, 4 Mar 2026 16:37:00 +0600 Subject: [PATCH] fixed: Box destroition --- server/server.cpp | 13 +++++++++++-- src/Space.cpp | 12 ++++++++---- src/network/WebSocketClientBase.cpp | 2 +- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/server/server.cpp b/server/server.cpp index 186a76a..db2b78f 100644 --- a/server/server.cpp +++ b/server/server.cpp @@ -176,9 +176,18 @@ private: std::lock_guard lock(g_boxes_mutex); std::string boxMsg = "BOXES:"; + bool first = true; + for (size_t i = 0; i < g_serverBoxes.size(); ++i) { const auto& box = g_serverBoxes[i]; + + if (box.destroyed) continue; + Eigen::Quaternionf q(box.rotation); + + if (!first) boxMsg += "|"; + first = false; + boxMsg += std::to_string(i) + ":" + std::to_string(box.position.x()) + ":" + std::to_string(box.position.y()) + ":" + @@ -187,10 +196,10 @@ private: std::to_string(q.x()) + ":" + std::to_string(q.y()) + ":" + std::to_string(q.z()) + ":" + - (std::to_string(box.destroyed ? 1 : 0)) + "|"; + "0"; } - if (!boxMsg.empty() && boxMsg.back() == '|') boxMsg.pop_back(); + // Если все коробки уничтожены — отправится просто "BOXES:" (это нормально) send_message(boxMsg); } diff --git a/src/Space.cpp b/src/Space.cpp index 3639912..4b515e1 100644 --- a/src/Space.cpp +++ b/src/Space.cpp @@ -350,6 +350,10 @@ namespace ZL } boxAlive.resize(boxCoordsArr.size(), true); +#ifdef NETWORK + std::fill(boxAlive.begin(), boxAlive.end(), false); + serverBoxesApplied = false; +#endif ZL::CheckGlError(); boxLabels.clear(); boxLabels.reserve(boxCoordsArr.size()); @@ -662,10 +666,10 @@ namespace ZL boxRenderArr[i].RefreshVBO(); } boxAlive.assign(boxCoordsArr.size(), true); - if (destroyedFlags.size() == boxAlive.size()) { - for (size_t i = 0; i < boxAlive.size(); ++i) { - if (destroyedFlags[i]) boxAlive[i] = false; - } + + size_t n = (std::min)(destroyedFlags.size(), boxAlive.size()); + for (size_t i = 0; i < n; ++i) { + if (destroyedFlags[i]) boxAlive[i] = false; // destroyed => не рисуем } serverBoxesApplied = true; } diff --git a/src/network/WebSocketClientBase.cpp b/src/network/WebSocketClientBase.cpp index 4e5ec20..710bf7d 100644 --- a/src/network/WebSocketClientBase.cpp +++ b/src/network/WebSocketClientBase.cpp @@ -144,7 +144,7 @@ namespace ZL { if (msg.rfind("PROJECTILE:", 0) == 0) { //auto parts = split(msg, ':'); - if (parts.size() >= 10) { + if (parts.size() >= 11) { try { ProjectileInfo pi; pi.shooterId = std::stoi(parts[1]);