From f173868aae93c554eb7ae85d7546b7dd43fd4c0e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 30 May 2023 15:45:57 +0800 Subject: [PATCH] 1 --- server/gameserver/glmhelper.cc | 7 +++++++ server/gameserver/glmhelper.h | 1 + server/gameserver/pbutils.cc | 15 +++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/server/gameserver/glmhelper.cc b/server/gameserver/glmhelper.cc index e13adf07..a28cceb4 100644 --- a/server/gameserver/glmhelper.cc +++ b/server/gameserver/glmhelper.cc @@ -76,3 +76,10 @@ bool GlmHelper::IsEqual2D(const glm::vec3& v1, const glm::vec3& v2) { return std::abs(v1.x - v2.x) < 0.00001f && std::abs(v1.z - v2.z) < 0.00001f; } + +bool GlmHelper::IsEqual3D(const glm::vec3& v1, const glm::vec3& v2) +{ + return std::abs(v1.x - v2.x) < 0.00001f && + std::abs(v1.y - v2.y) < 0.00001f && + std::abs(v1.z - v2.z) < 0.00001f; +} diff --git a/server/gameserver/glmhelper.h b/server/gameserver/glmhelper.h index 4417e4d9..9dc4ca37 100644 --- a/server/gameserver/glmhelper.h +++ b/server/gameserver/glmhelper.h @@ -14,6 +14,7 @@ class GlmHelper static bool IsZero(const glm::vec3& v); static bool IsEqual2D(const glm::vec3& v1, const glm::vec3& v2); + static bool IsEqual3D(const glm::vec3& v1, const glm::vec3& v2); static float CalcAngle(const glm::vec3& v1, const glm::vec3& v2); diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 0eefc6e7..ef5b959e 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2146,5 +2146,20 @@ void Room::NotifyNewsTicker(int msg_type, std::vector msg_content) void SyncObject::FillSMSyncPosition(cs::SMSyncPosition& sync_msg) { + if (!c.Get()) { + return; + } + bool need_sync = !GlmHelper::IsEqual3D(c.Get()->GetPos().ToGlmVec3(), pos) || + !GlmHelper::IsEqual3D(c.Get()->GetAttackDir(), dir) || + c.Get()->room->GetFrameNo() - last_sync_frameno > SERVER_FRAME_RATE * 10; + if (need_sync) { + auto obj = sync_msg.add_obj_list(); + obj->set_obj_uniid(obj_uniid); + TypeConvert::ToPb(c.Get()->GetPos().ToGlmVec3(), obj->mutable_pos()); + TypeConvert::ToPb(c.Get()->GetAttackDir(), obj->mutable_dir()); + pos = c.Get()->GetPos().ToGlmVec3(); + dir = c.Get()->GetAttackDir(); + last_sync_frameno = c.Get()->room->GetFrameNo(); + } }