|
@@ -30,6 +30,8 @@
|
|
|
|
|
|
#include "a_star_grid_2d.h"
|
|
|
|
|
|
+#include "core/variant/typed_array.h"
|
|
|
+
|
|
|
static real_t heuristic_euclidian(const Vector2i &p_from, const Vector2i &p_to) {
|
|
|
real_t dx = (real_t)ABS(p_to.x - p_from.x);
|
|
|
real_t dy = (real_t)ABS(p_to.y - p_from.y);
|
|
@@ -492,17 +494,17 @@ Vector<Vector2> AStarGrid2D::get_point_path(const Vector2i &p_from_id, const Vec
|
|
|
return path;
|
|
|
}
|
|
|
|
|
|
-Vector<Vector2> AStarGrid2D::get_id_path(const Vector2i &p_from_id, const Vector2i &p_to_id) {
|
|
|
- ERR_FAIL_COND_V_MSG(dirty, Vector<Vector2>(), "Grid is not initialized. Call the update method.");
|
|
|
- ERR_FAIL_COND_V_MSG(!is_in_boundsv(p_from_id), Vector<Vector2>(), vformat("Can't get id path. Point out of bounds (%s/%s, %s/%s)", p_from_id.x, size.width, p_from_id.y, size.height));
|
|
|
- ERR_FAIL_COND_V_MSG(!is_in_boundsv(p_to_id), Vector<Vector2>(), vformat("Can't get id path. Point out of bounds (%s/%s, %s/%s)", p_to_id.x, size.width, p_to_id.y, size.height));
|
|
|
+TypedArray<Vector2i> AStarGrid2D::get_id_path(const Vector2i &p_from_id, const Vector2i &p_to_id) {
|
|
|
+ ERR_FAIL_COND_V_MSG(dirty, TypedArray<Vector2i>(), "Grid is not initialized. Call the update method.");
|
|
|
+ ERR_FAIL_COND_V_MSG(!is_in_boundsv(p_from_id), TypedArray<Vector2i>(), vformat("Can't get id path. Point out of bounds (%s/%s, %s/%s)", p_from_id.x, size.width, p_from_id.y, size.height));
|
|
|
+ ERR_FAIL_COND_V_MSG(!is_in_boundsv(p_to_id), TypedArray<Vector2i>(), vformat("Can't get id path. Point out of bounds (%s/%s, %s/%s)", p_to_id.x, size.width, p_to_id.y, size.height));
|
|
|
|
|
|
Point *a = _get_point(p_from_id.x, p_from_id.y);
|
|
|
Point *b = _get_point(p_to_id.x, p_to_id.y);
|
|
|
|
|
|
if (a == b) {
|
|
|
- Vector<Vector2> ret;
|
|
|
- ret.push_back(Vector2((float)a->id.x, (float)a->id.y));
|
|
|
+ TypedArray<Vector2i> ret;
|
|
|
+ ret.push_back(a);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -511,7 +513,7 @@ Vector<Vector2> AStarGrid2D::get_id_path(const Vector2i &p_from_id, const Vector
|
|
|
|
|
|
bool found_route = _solve(begin_point, end_point);
|
|
|
if (!found_route) {
|
|
|
- return Vector<Vector2>();
|
|
|
+ return TypedArray<Vector2i>();
|
|
|
}
|
|
|
|
|
|
Point *p = end_point;
|
|
@@ -521,20 +523,18 @@ Vector<Vector2> AStarGrid2D::get_id_path(const Vector2i &p_from_id, const Vector
|
|
|
p = p->prev_point;
|
|
|
}
|
|
|
|
|
|
- Vector<Vector2> path;
|
|
|
+ TypedArray<Vector2i> path;
|
|
|
path.resize(pc);
|
|
|
|
|
|
{
|
|
|
- Vector2 *w = path.ptrw();
|
|
|
-
|
|
|
p = end_point;
|
|
|
int64_t idx = pc - 1;
|
|
|
while (p != begin_point) {
|
|
|
- w[idx--] = Vector2((float)p->id.x, (float)p->id.y);
|
|
|
+ path[idx--] = p->id;
|
|
|
p = p->prev_point;
|
|
|
}
|
|
|
|
|
|
- w[0] = p->id;
|
|
|
+ path[0] = p->id;
|
|
|
}
|
|
|
|
|
|
return path;
|