mirror of https://github.com/godotengine/godot
Merge pull request #66655 from MisterMX/feat/astargrid2d-vector2i
refactor(AStarGrid2D): Return `Vector2i` in `get_id_path`
This commit is contained in:
commit
a377c5ca22
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue