mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/PathGenerator: Split raycast paths into more points for better path z normalization. Solves many of the 'falling underground with charge' issues
This commit is contained in:
@@ -477,11 +477,29 @@ void PathGenerator::BuildPointPath(const float *startPoint, const float *endPoin
|
||||
dtStatus dtResult = DT_FAILURE;
|
||||
if (_straightLine)
|
||||
{
|
||||
// if the path is a straight line then start and end position are enough
|
||||
dtResult = DT_SUCCESS;
|
||||
pointCount = 2;
|
||||
memcpy(&pathPoints[0], startPoint, sizeof(float)* 3);
|
||||
memcpy(&pathPoints[3], endPoint, sizeof(float)* 3);
|
||||
pointCount = 1;
|
||||
memcpy(&pathPoints[VERTEX_SIZE * 0], startPoint, sizeof(float)* 3); // first point
|
||||
|
||||
// path has to be split into polygons with dist SMOOTH_PATH_STEP_SIZE between them
|
||||
G3D::Vector3 startVec = G3D::Vector3(startPoint[0], startPoint[1], startPoint[2]);
|
||||
G3D::Vector3 endVec = G3D::Vector3(endPoint[0], endPoint[1], endPoint[2]);
|
||||
G3D::Vector3 diffVec = (endVec - startVec);
|
||||
G3D::Vector3 prevVec = startVec;
|
||||
float len = diffVec.length();
|
||||
diffVec *= SMOOTH_PATH_STEP_SIZE / len;
|
||||
while (len > SMOOTH_PATH_STEP_SIZE)
|
||||
{
|
||||
len -= SMOOTH_PATH_STEP_SIZE;
|
||||
prevVec += diffVec;
|
||||
pathPoints[VERTEX_SIZE * pointCount + 0] = prevVec.x;
|
||||
pathPoints[VERTEX_SIZE * pointCount + 1] = prevVec.y;
|
||||
pathPoints[VERTEX_SIZE * pointCount + 2] = prevVec.z;
|
||||
++pointCount;
|
||||
}
|
||||
|
||||
memcpy(&pathPoints[VERTEX_SIZE * pointCount], endPoint, sizeof(float)* 3); // last point
|
||||
++pointCount;
|
||||
}
|
||||
else if (_useStraightPath)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user