From c4fb2256bdbbc9fb28679725c411ba5fcd451891 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 31 Mar 2023 11:34:24 +0800 Subject: [PATCH] 1 --- server/gameserver/mapservice.cc | 37 ++++++++++++++++++++++++++++++--- server/gameserver/mapservice.h | 2 +- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/server/gameserver/mapservice.cc b/server/gameserver/mapservice.cc index 5c6f6583..4caf99a7 100644 --- a/server/gameserver/mapservice.cc +++ b/server/gameserver/mapservice.cc @@ -162,9 +162,33 @@ void MapService::AddTriangle(mc::Triangle* tri) aabb_verts[11] = world_y + cell_width_; } { - glm::vec3 a[3 * 2]; - a[0] = glm::vec3(0.0f, 0.0f, 0.0f); + glm::vec3 t1[3] = {tri->vert0, tri->vert1, tri->vert2}; + glm::vec3 tmp_verts[4]; + for (int i = 0; i < 4; ++i) { + tmp_verts[i] = glm::vec3(aabb_verts[i * 3 + 0], + aabb_verts[i * 3 + 1], + aabb_verts[i * 3 + 2]); + } + + glm::vec3 t2[3] = { + tmp_verts[0], + tmp_verts[1], + tmp_verts[2]}; + + glm::vec3 t3[3] = { + tmp_verts[0], + tmp_verts[2], + tmp_verts[3]}; + + if (TriIntersect(t1, t2) || TriIntersect(t1, t3)) { + int grid_id = x + y * map_width_; + list_head* head = &map_cells_[grid_id]; + CellNode* node = new CellNode(); + node->tri = tri; + list_add_tail(&node->entry, head); + found = true; + } } #if 0 if (dtOverlapPolyPoly2D(tri_verts, 3, aabb_verts, 4)) { @@ -178,9 +202,11 @@ void MapService::AddTriangle(mc::Triangle* tri) #endif } } + #if 0 if (!found) { abort(); } + #endif } } @@ -204,8 +230,13 @@ void MapService::GetGridList(int grid_id, list_head* grid_list[9], int& grid_cou } } -bool MapService::TriIntersect(const glm::vec3 t1[3], const glm::vec3 t2[3]) +bool MapService::TriIntersect(glm::vec3 t1[3], glm::vec3 t2[3]) { + return true; + for (int i = 0; i < 3; ++i) { + t1[i].y = 0.0f; + t2[i].y = 0.0f; + } glm::vec2 bary_position; float distance; for (int v = 0; v < 3; ++v) { diff --git a/server/gameserver/mapservice.h b/server/gameserver/mapservice.h index 065a1d59..54679bd4 100644 --- a/server/gameserver/mapservice.h +++ b/server/gameserver/mapservice.h @@ -27,7 +27,7 @@ class MapService void AddTriangle(mc::Triangle* tri); int GetGridId(float world_x, float world_y); void GetGridList(int grid_id, list_head* grid_list[9], int& grid_count); - bool TriIntersect(const glm::vec3 t1[3], const glm::vec3 t2[3]); + bool TriIntersect(glm::vec3 t1[3], glm::vec3 t2[3]); private: list_head* map_cells_ = nullptr;