private PathEntity addToPath(Entity entity, PathPoint pathpoint, PathPoint pathpoint1, PathPoint pathpoint2, float f) { pathpoint.totalPathDistance = 0.0F; pathpoint.distanceToNext = pathpoint.distanceTo(pathpoint1); pathpoint.distanceToTarget = pathpoint.distanceToNext; path.clearPath(); path.addPoint(pathpoint); PathPoint pathpoint3 = pathpoint; while (!path.isPathEmpty()) { PathPoint pathpoint4 = path.dequeue(); if (pathpoint4.Equals(pathpoint1)) { return(createEntityPath(pathpoint, pathpoint1)); } if (pathpoint4.distanceTo(pathpoint1) < pathpoint3.distanceTo(pathpoint1)) { pathpoint3 = pathpoint4; } pathpoint4.isFirst = true; int i = findPathOptions(entity, pathpoint4, pathpoint2, pathpoint1, f); int j = 0; while (j < i) { PathPoint pathpoint5 = pathOptions[j]; float f1 = pathpoint4.totalPathDistance + pathpoint4.distanceTo(pathpoint5); if (!pathpoint5.isAssigned() || f1 < pathpoint5.totalPathDistance) { pathpoint5.previous = pathpoint4; pathpoint5.totalPathDistance = f1; pathpoint5.distanceToNext = pathpoint5.distanceTo(pathpoint1); if (pathpoint5.isAssigned()) { path.changeDistance(pathpoint5, pathpoint5.totalPathDistance + pathpoint5.distanceToNext); } else { pathpoint5.distanceToTarget = pathpoint5.totalPathDistance + pathpoint5.distanceToNext; path.addPoint(pathpoint5); } } j++; } } if (pathpoint3 == pathpoint) { return(null); } else { return(createEntityPath(pathpoint, pathpoint3)); } }
/// <summary> /// Adds a path from start to end and returns the whole path (args: unused, start, end, unused, maxDistance) /// </summary> private PathEntity AddToPath(Entity par1Entity, PathPoint par2PathPoint, PathPoint par3PathPoint, PathPoint par4PathPoint, float par5) { par2PathPoint.TotalPathDistance = 0.0F; par2PathPoint.DistanceToNext = par2PathPoint.DistanceTo(par3PathPoint); par2PathPoint.DistanceToTarget = par2PathPoint.DistanceToNext; Path.ClearPath(); Path.AddPoint(par2PathPoint); PathPoint pathpoint = par2PathPoint; while (!Path.IsPathEmpty()) { PathPoint pathpoint1 = Path.Dequeue(); if (pathpoint1.Equals(par3PathPoint)) { return(CreateEntityPath(par2PathPoint, par3PathPoint)); } if (pathpoint1.DistanceTo(par3PathPoint) < pathpoint.DistanceTo(par3PathPoint)) { pathpoint = pathpoint1; } pathpoint1.IsFirst = true; int i = FindPathOptions(par1Entity, pathpoint1, par4PathPoint, par3PathPoint, par5); int j = 0; while (j < i) { PathPoint pathpoint2 = PathOptions[j]; float f = pathpoint1.TotalPathDistance + pathpoint1.DistanceTo(pathpoint2); if (!pathpoint2.IsAssigned() || f < pathpoint2.TotalPathDistance) { pathpoint2.Previous = pathpoint1; pathpoint2.TotalPathDistance = f; pathpoint2.DistanceToNext = pathpoint2.DistanceTo(par3PathPoint); if (pathpoint2.IsAssigned()) { Path.ChangeDistance(pathpoint2, pathpoint2.TotalPathDistance + pathpoint2.DistanceToNext); } else { pathpoint2.DistanceToTarget = pathpoint2.TotalPathDistance + pathpoint2.DistanceToNext; Path.AddPoint(pathpoint2); } } j++; } } if (pathpoint == par2PathPoint) { return(null); } else { return(CreateEntityPath(par2PathPoint, pathpoint)); } }