1
0
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:
Kiro
2025-01-07 13:40:17 +01:00
parent aa65940a85
commit f70acb0308
2 changed files with 4 additions and 3 deletions

View File

@@ -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;

View File

@@ -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();
} }