changed PolygonPathFinder::get_closest_point to return the closest position inside, rather then the closest vertex

This commit is contained in:
romulox_x 2015-02-01 09:23:31 -08:00
parent 67d357191f
commit 8db3c0a4db

View file

@ -525,24 +525,32 @@ bool PolygonPathFinder::is_point_inside(const Vector2& p_point) const {
Vector2 PolygonPathFinder::get_closest_point(const Vector2& p_point) const { Vector2 PolygonPathFinder::get_closest_point(const Vector2& p_point) const {
int closest_idx=-1;
float closest_dist=1e20; float closest_dist=1e20;
for(int i=0;i<points.size()-2;i++) { Vector2 closest_point;
for (Set<Edge>::Element *E=edges.front();E;E=E->next()) {
const Edge& e=E->get();
Vector2 seg[2]={
points[e.points[0]].pos,
points[e.points[1]].pos
};
Vector2 closest = Geometry::get_closest_point_to_segment_2d(p_point,seg);
float d = p_point.distance_squared_to(closest);
float d = p_point.distance_squared_to(points[i].pos);
if (d<closest_dist) { if (d<closest_dist) {
closest_dist=d; closest_dist=d;
closest_idx=i; closest_point=closest;
}
} }
} ERR_FAIL_COND_V(closest_dist==1e20,Vector2());
ERR_FAIL_COND_V(closest_idx==-1,Vector2()); return closest_point;
return points[closest_idx].pos;
} }
Vector<Vector2> PolygonPathFinder::get_intersections(const Vector2& p_from, const Vector2& p_to) const { Vector<Vector2> PolygonPathFinder::get_intersections(const Vector2& p_from, const Vector2& p_to) const {
Vector<Vector2> inters; Vector<Vector2> inters;