From dc2c106bad997dba892397c2943a7f46a6b9a76d Mon Sep 17 00:00:00 2001 From: HappyTanuki Date: Thu, 19 Jun 2025 03:26:03 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A1=B0=EC=9E=91=EC=9D=B4=20=EB=91=94?= =?UTF-8?q?=ED=95=A0=20=EB=95=8C=EA=B0=80=20=EC=83=9D=EA=B8=B0=EB=8A=94?= =?UTF-8?q?=EB=8D=B0=20=EB=AD=98=EA=B9=8C=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client/src/asteroid/tick.cpp | 5 +++++ Server/src/server.cpp | 15 +++++++++------ impl/vulkan_engine/vulkan/engine.cpp | 7 ++++++- include/vulkan_engine/asset/object/model.h | 2 ++ 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Client/src/asteroid/tick.cpp b/Client/src/asteroid/tick.cpp index 0f1aa2b..1dff33f 100644 --- a/Client/src/asteroid/tick.cpp +++ b/Client/src/asteroid/tick.cpp @@ -57,6 +57,7 @@ void Tick(veng::Engine& engine, std::float_t delta_time) { if (!w_laststate) { player->needsUpdate = true; + player->updateRedundantCount = 0; w_laststate = true; } } else { @@ -64,6 +65,7 @@ void Tick(veng::Engine& engine, std::float_t delta_time) { player_flame->visible = false; if (w_laststate) { player->needsUpdate = true; + player->updateRedundantCount = 0; w_laststate = false; } } @@ -116,6 +118,7 @@ void Tick(veng::Engine& engine, std::float_t delta_time) { player->angular_velocity = right * 6.f; if (!ad_laststate) { player->needsUpdate = true; + player->updateRedundantCount = 0; ad_laststate = true; } } else if (glfwGetKey(engine.vulkan_graphics->window->GetHandle(), @@ -124,6 +127,7 @@ void Tick(veng::Engine& engine, std::float_t delta_time) { player->angular_velocity = right * -6.f; if (!ad_laststate) { player->needsUpdate = true; + player->updateRedundantCount = 0; ad_laststate = true; } } else { @@ -131,6 +135,7 @@ void Tick(veng::Engine& engine, std::float_t delta_time) { player->angular_velocity = right * 0.f; if (ad_laststate) { player->needsUpdate = true; + player->updateRedundantCount = 0; ad_laststate = false; } } diff --git a/Server/src/server.cpp b/Server/src/server.cpp index b5cb548..31b25e0 100644 --- a/Server/src/server.cpp +++ b/Server/src/server.cpp @@ -13,6 +13,9 @@ #define LISTENIP "::" #define LISTENPORT 9010 +#define TICKRATE 60 +constexpr double TICKDELAY = (1 / TICKRATE); + std::uint8_t CLIENTID = 0; std::unordered_map MODELS; @@ -59,7 +62,7 @@ void ClientRefresher(utils::ThreadPool* tp, Network::IOCP* iocp) { static double last_frame_time_; auto current_time = glfwGetTime(); bool needs_all_update = false; - if (current_time - last_all_updated >= .01f) { + if (current_time - last_all_updated >= TICKDELAY) { needs_all_update = true; last_all_updated = glfwGetTime(); } @@ -100,12 +103,12 @@ void ClientRefresher(utils::ThreadPool* tp, Network::IOCP* iocp) { } CLIENTS_MUTEX.lock(); - for (auto& client : CLIENTS) { - if (client->sock == 0) continue; - for (auto& model : MODELS) { - if (model.second.name == "camera_lag") continue; + for (auto& model : MODELS) { + if (model.second.name == "camera_lag") continue; + model.second.Update(delta_time); + for (auto& client : CLIENTS) { + if (client->sock == 0) continue; std::vector send_data; - model.second.Update(delta_time); auto model_serialized = model.second.Serialize(); Packet::Header header; header.opcode = Packet::Opcode::UPDATEMODEL; diff --git a/impl/vulkan_engine/vulkan/engine.cpp b/impl/vulkan_engine/vulkan/engine.cpp index 0a44003..cbe3f7a 100644 --- a/impl/vulkan_engine/vulkan/engine.cpp +++ b/impl/vulkan_engine/vulkan/engine.cpp @@ -176,7 +176,12 @@ void Engine::NetworkUpload(std::shared_ptr sock) { data.insert(data.end(), header_serialized.begin(), header_serialized.end()); data.insert(data.end(), model.begin(), model.end()); - it.second->needsUpdate = false; + if (it.second->updateRedundantCount >= 2) { + it.second->needsUpdate = false; + it.second->updateRedundantCount = 0; + } else { + it.second->updateRedundantCount++; + } spdlog::debug("{} uploaded", it.second->name); } iocp_->send(sock, data); diff --git a/include/vulkan_engine/asset/object/model.h b/include/vulkan_engine/asset/object/model.h index a47aa1b..28dd209 100644 --- a/include/vulkan_engine/asset/object/model.h +++ b/include/vulkan_engine/asset/object/model.h @@ -164,6 +164,8 @@ struct Model { double lastUpdatedTime = 0.f; // 서버 기준 업데이트된 시간임 + std::uint8_t updateRedundantCount; + std::mutex modding; private: