From f200dd913db6c3ed55280ab8b326ddac950ad9f4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 15 May 2023 10:58:29 +0800 Subject: [PATCH] 1 --- server/gameserver/mapinstance.cc | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/server/gameserver/mapinstance.cc b/server/gameserver/mapinstance.cc index 6f15512d..43c1b5f6 100644 --- a/server/gameserver/mapinstance.cc +++ b/server/gameserver/mapinstance.cc @@ -1113,5 +1113,43 @@ bool MapInstance::GetNearestGrass(const glm::vec3& center, glm::vec3& out_pt) void MapInstance::AdjustOnLandPoint(glm::vec3& point) { + float center[3]; + center[0] = point.x; + center[1] = point.y; + center[2] = point.z; + const float extents[3] = {4.0f/10.0f, 100.0f, 4.0f/10.0f}; + + dtQueryFilter filter; + filter.setIncludeFlags(0xffff); + filter.setExcludeFlags(0); + + int poly_count = 0; + dtStatus status = navmesh_query_->queryPolygons(center, + extents, + &filter, + polys_, + &poly_count, + MAX_POLYS); + if (dtStatusFailed(status) || poly_count <= 0) { + return; + } + for (int i = 0; i < poly_count; ++i) { + unsigned int slat = 0; + unsigned int it = 0; + unsigned int ip = 0; + navmesh_->decodePolyId(polys_[i], slat, it, ip); + + const dtMeshTile* tile = navmesh_->getTileByRef(polys_[i]); + if (!tile) { + abort(); + } + if (ip >= tile->header->polyCount) { + abort(); + } + const dtPoly* poly = &tile->polys[ip]; + for (int ii = 0; ii < poly->vertCount; ++ii) { + const float* vc = &tile->verts[poly->verts[ii]*3]; + } + } }