diff --git a/server/gameserver/mapservice.cc b/server/gameserver/mapservice.cc index d31be70b..655805cf 100644 --- a/server/gameserver/mapservice.cc +++ b/server/gameserver/mapservice.cc @@ -165,37 +165,6 @@ void MapService::AddTriangle(mc::Triangle* tri) glm::vec3 a[3 * 2]; a[0] = glm::vec3(0.0f, 0.0f, 0.0f); - glm::vec2 bary_position; - float distance; - - glm::vec3 v1; - glm::vec3 v2; - glm::vec3 orig = v1; - glm::vec3 dir = v2 - v1; - GlmHelper::Normalize(dir); - float max_distance = GlmHelper::Norm(v2 - v1); - for (int i = 0; i < 2; ++i){ - bool hit = glm::intersectRayTriangle - (orig, - dir, - a[i * 3 + 0], - a[i * 3 + 1], - a[i * 3 + 2], - bary_position, - distance - ); - if (hit && distance > 0.00001f) { - if (distance < max_distance + 1) { - found = true; - 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); - break; - } - } - } } #if 0 if (dtOverlapPolyPoly2D(tri_verts, 3, aabb_verts, 4)) { @@ -234,3 +203,34 @@ 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]) +{ + glm::vec2 bary_position; + float distance; + for (int v = 0; v < 2; ++v) { + glm::vec3 v1; + glm::vec3 v2; + glm::vec3 orig = v1; + glm::vec3 dir = v2 - v1; + GlmHelper::Normalize(dir); + float max_distance = GlmHelper::Norm(v2 - v1); + for (int i = 0; i < 2; ++i){ + bool hit = glm::intersectRayTriangle + (orig, + dir, + t2[0], + t2[1], + t2[2], + bary_position, + distance + ); + if (hit && distance > 0.00001f) { + if (distance < max_distance + 1) { + return true; + } + } + } + } + return false; +} diff --git a/server/gameserver/mapservice.h b/server/gameserver/mapservice.h index efbcd953..065a1d59 100644 --- a/server/gameserver/mapservice.h +++ b/server/gameserver/mapservice.h @@ -27,6 +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]); private: list_head* map_cells_ = nullptr;