Reapply e218cc417f but a little better
This commit is contained in:
@@ -183,6 +183,13 @@ float dtDistancePtSegSqr2D(const float* pt, const float* p, const float* q, floa
|
|||||||
return dx*dx + dz*dz;
|
return dx*dx + dz*dz;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float dtDistancePtPtSqr2D(const float* pt, const float* p)
|
||||||
|
{
|
||||||
|
float dx = pt[0] - p[0];
|
||||||
|
float dz = pt[2] - p[2];
|
||||||
|
return dx*dx + dz*dz;
|
||||||
|
}
|
||||||
|
|
||||||
void dtCalcPolyCenter(float* tc, const unsigned short* idx, int nidx, const float* verts)
|
void dtCalcPolyCenter(float* tc, const unsigned short* idx, int nidx, const float* verts)
|
||||||
{
|
{
|
||||||
tc[0] = 0.0f;
|
tc[0] = 0.0f;
|
||||||
|
|||||||
@@ -416,6 +416,8 @@ bool dtDistancePtPolyEdgesSqr(const float* pt, const float* verts, const int nve
|
|||||||
|
|
||||||
float dtDistancePtSegSqr2D(const float* pt, const float* p, const float* q, float& t);
|
float dtDistancePtSegSqr2D(const float* pt, const float* p, const float* q, float& t);
|
||||||
|
|
||||||
|
float dtDistancePtPtSqr2D(const float* pt, const float* p);
|
||||||
|
|
||||||
/// Derives the centroid of a convex polygon.
|
/// Derives the centroid of a convex polygon.
|
||||||
/// @param[out] tc The centroid of the polgyon. [(x, y, z)]
|
/// @param[out] tc The centroid of the polgyon. [(x, y, z)]
|
||||||
/// @param[in] idx The polygon indices. [(vertIndex) * @p nidx]
|
/// @param[in] idx The polygon indices. [(vertIndex) * @p nidx]
|
||||||
|
|||||||
@@ -482,12 +482,18 @@ dtStatus dtNavMeshQuery::findRandomPointAroundCircle(dtPolyRef startRef, const f
|
|||||||
v = &randomTile->verts[randomPoly->verts[j]*3];
|
v = &randomTile->verts[randomPoly->verts[j]*3];
|
||||||
dtVcopy(&verts[j*3],v);
|
dtVcopy(&verts[j*3],v);
|
||||||
}
|
}
|
||||||
|
|
||||||
const float s = frand();
|
|
||||||
const float t = frand();
|
|
||||||
|
|
||||||
float pt[3];
|
float pt[3];
|
||||||
dtRandomPointInConvexPoly(verts, randomPoly->vertCount, areas, s, t, pt);
|
int checksLimit = 100;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
const float s = frand();
|
||||||
|
const float t = frand();
|
||||||
|
dtRandomPointInConvexPoly(verts, randomPoly->vertCount, areas, s, t, pt);
|
||||||
|
}
|
||||||
|
while (dtDistancePtPtSqr2D(centerPos, pt) > radiusSqr && checksLimit-- > 0);
|
||||||
|
if (checksLimit <= 0)
|
||||||
|
return DT_FAILURE;
|
||||||
|
|
||||||
closestPointOnPoly(randomPolyRef, pt, pt, NULL);
|
closestPointOnPoly(randomPolyRef, pt, pt, NULL);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user