1
0
Fork 0

Merge pull request #66655 from MisterMX/feat/astargrid2d-vector2i

refactor(AStarGrid2D): Return `Vector2i` in `get_id_path`
This commit is contained in:
Rémi Verschelde 2022-10-03 09:24:40 +02:00
commit a377c5ca22
3 changed files with 14 additions and 14 deletions

View File

@ -30,6 +30,8 @@
#include "a_star_grid_2d.h" #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) { 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 dx = (real_t)ABS(p_to.x - p_from.x);
real_t dy = (real_t)ABS(p_to.y - p_from.y); 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; return path;
} }
Vector<Vector2> AStarGrid2D::get_id_path(const Vector2i &p_from_id, const Vector2i &p_to_id) { TypedArray<Vector2i> 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(dirty, TypedArray<Vector2i>(), "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_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), 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)); 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 *a = _get_point(p_from_id.x, p_from_id.y);
Point *b = _get_point(p_to_id.x, p_to_id.y); Point *b = _get_point(p_to_id.x, p_to_id.y);
if (a == b) { if (a == b) {
Vector<Vector2> ret; TypedArray<Vector2i> ret;
ret.push_back(Vector2((float)a->id.x, (float)a->id.y)); ret.push_back(a);
return ret; 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); bool found_route = _solve(begin_point, end_point);
if (!found_route) { if (!found_route) {
return Vector<Vector2>(); return TypedArray<Vector2i>();
} }
Point *p = end_point; 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; p = p->prev_point;
} }
Vector<Vector2> path; TypedArray<Vector2i> path;
path.resize(pc); path.resize(pc);
{ {
Vector2 *w = path.ptrw();
p = end_point; p = end_point;
int64_t idx = pc - 1; int64_t idx = pc - 1;
while (p != begin_point) { while (p != begin_point) {
w[idx--] = Vector2((float)p->id.x, (float)p->id.y); path[idx--] = p->id;
p = p->prev_point; p = p->prev_point;
} }
w[0] = p->id; path[0] = p->id;
} }
return path; return path;

View File

@ -169,7 +169,7 @@ public:
void clear(); void clear();
Vector<Vector2> get_point_path(const Vector2i &p_from, const Vector2i &p_to); Vector<Vector2> get_point_path(const Vector2i &p_from, const Vector2i &p_to);
Vector<Vector2> get_id_path(const Vector2i &p_from, const Vector2i &p_to); TypedArray<Vector2i> get_id_path(const Vector2i &p_from, const Vector2i &p_to);
}; };
VARIANT_ENUM_CAST(AStarGrid2D::DiagonalMode); VARIANT_ENUM_CAST(AStarGrid2D::DiagonalMode);

View File

@ -53,7 +53,7 @@
</description> </description>
</method> </method>
<method name="get_id_path"> <method name="get_id_path">
<return type="PackedVector2Array" /> <return type="Vector2i[]" />
<param index="0" name="from_id" type="Vector2i" /> <param index="0" name="from_id" type="Vector2i" />
<param index="1" name="to_id" type="Vector2i" /> <param index="1" name="to_id" type="Vector2i" />
<description> <description>