You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-14 13:41:12 +00:00
shift the polygon heap only if index is in range
This commit is contained in:
@@ -314,7 +314,7 @@ void NavMeshQueries3D::_query_task_build_path_corridor(NavMeshPathQueryTask3D &p
|
|||||||
owner->get_travel_cost();
|
owner->get_travel_cost();
|
||||||
neighbor_poly.entry = new_entry;
|
neighbor_poly.entry = new_entry;
|
||||||
|
|
||||||
if (neighbor_poly.poly != nullptr) {
|
if (neighbor_poly.traversable_poly_index != traversable_polys.INVALID_INDEX) {
|
||||||
traversable_polys.shift(neighbor_poly.traversable_poly_index);
|
traversable_polys.shift(neighbor_poly.traversable_poly_index);
|
||||||
} else {
|
} else {
|
||||||
neighbor_poly.poly = connection.polygon;
|
neighbor_poly.poly = connection.polygon;
|
||||||
|
|||||||
@@ -201,6 +201,7 @@ class Heap {
|
|||||||
Indexer _indexer;
|
Indexer _indexer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
static constexpr uint32_t INVALID_INDEX = UINT32_MAX;
|
||||||
void reserve(uint32_t p_size) {
|
void reserve(uint32_t p_size) {
|
||||||
_buffer.reserve(p_size);
|
_buffer.reserve(p_size);
|
||||||
}
|
}
|
||||||
@@ -222,7 +223,7 @@ public:
|
|||||||
T pop() {
|
T pop() {
|
||||||
ERR_FAIL_COND_V_MSG(_buffer.is_empty(), T(), "Can't pop an empty heap.");
|
ERR_FAIL_COND_V_MSG(_buffer.is_empty(), T(), "Can't pop an empty heap.");
|
||||||
T value = _buffer[0];
|
T value = _buffer[0];
|
||||||
_indexer(value, UINT32_MAX);
|
_indexer(value, INVALID_INDEX);
|
||||||
if (_buffer.size() > 1) {
|
if (_buffer.size() > 1) {
|
||||||
_buffer[0] = _buffer[_buffer.size() - 1];
|
_buffer[0] = _buffer[_buffer.size() - 1];
|
||||||
_indexer(_buffer[0], 0);
|
_indexer(_buffer[0], 0);
|
||||||
@@ -246,7 +247,7 @@ public:
|
|||||||
|
|
||||||
void clear() {
|
void clear() {
|
||||||
for (const T &value : _buffer) {
|
for (const T &value : _buffer) {
|
||||||
_indexer(value, UINT32_MAX);
|
_indexer(value, INVALID_INDEX);
|
||||||
}
|
}
|
||||||
_buffer.clear();
|
_buffer.clear();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user