Skip to content

Commit 7bccc82

Browse files
committed
Merge pull request #100401 from kiroxas/Simplify_NavMeshQueries3D_simplify_path_segment
Simplify `NavMeshQueries3D::simplify_path_segment`
2 parents 8385a12 + 774e914 commit 7bccc82

File tree

2 files changed

+9
-32
lines changed

2 files changed

+9
-32
lines changed

modules/navigation/3d/nav_mesh_queries_3d.cpp

+8-31
Original file line numberDiff line numberDiff line change
@@ -920,40 +920,16 @@ LocalVector<uint32_t> NavMeshQueries3D::get_simplified_path_indices(const LocalV
920920
p_epsilon = MAX(0.0, p_epsilon);
921921
real_t squared_epsilon = p_epsilon * p_epsilon;
922922

923-
LocalVector<bool> valid_points;
924-
valid_points.resize(p_path.size());
925-
for (uint32_t i = 0; i < valid_points.size(); i++) {
926-
valid_points[i] = false;
927-
}
928-
929-
simplify_path_segment(0, p_path.size() - 1, p_path, squared_epsilon, valid_points);
930-
931-
int valid_point_index = 0;
932-
933-
for (bool valid : valid_points) {
934-
if (valid) {
935-
valid_point_index += 1;
936-
}
937-
}
938-
939923
LocalVector<uint32_t> simplified_path_indices;
940-
simplified_path_indices.resize(valid_point_index);
941-
valid_point_index = 0;
942-
943-
for (uint32_t i = 0; i < valid_points.size(); i++) {
944-
if (valid_points[i]) {
945-
simplified_path_indices[valid_point_index] = i;
946-
valid_point_index += 1;
947-
}
948-
}
924+
simplified_path_indices.reserve(p_path.size());
925+
simplified_path_indices.push_back(0);
926+
simplify_path_segment(0, p_path.size() - 1, p_path, squared_epsilon, simplified_path_indices);
927+
simplified_path_indices.push_back(p_path.size() - 1);
949928

950929
return simplified_path_indices;
951930
}
952931

953-
void NavMeshQueries3D::simplify_path_segment(int p_start_inx, int p_end_inx, const LocalVector<Vector3> &p_points, real_t p_epsilon, LocalVector<bool> &r_valid_points) {
954-
r_valid_points[p_start_inx] = true;
955-
r_valid_points[p_end_inx] = true;
956-
932+
void NavMeshQueries3D::simplify_path_segment(int p_start_inx, int p_end_inx, const LocalVector<Vector3> &p_points, real_t p_epsilon, LocalVector<uint32_t> &r_simplified_path_indices) {
957933
Vector3 path_segment[2] = { p_points[p_start_inx], p_points[p_end_inx] };
958934

959935
real_t point_max_distance = 0.0;
@@ -972,8 +948,9 @@ void NavMeshQueries3D::simplify_path_segment(int p_start_inx, int p_end_inx, con
972948
}
973949

974950
if (point_max_distance > p_epsilon) {
975-
simplify_path_segment(p_start_inx, point_max_index, p_points, p_epsilon, r_valid_points);
976-
simplify_path_segment(point_max_index, p_end_inx, p_points, p_epsilon, r_valid_points);
951+
simplify_path_segment(p_start_inx, point_max_index, p_points, p_epsilon, r_simplified_path_indices);
952+
r_simplified_path_indices.push_back(point_max_index);
953+
simplify_path_segment(point_max_index, p_end_inx, p_points, p_epsilon, r_simplified_path_indices);
977954
}
978955
}
979956

modules/navigation/3d/nav_mesh_queries_3d.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class NavMeshQueries3D {
116116
static void clip_path(NavMeshPathQueryTask3D &p_query_task, const LocalVector<gd::NavigationPoly> &p_navigation_polys, const gd::NavigationPoly *from_poly, const Vector3 &p_to_point, const gd::NavigationPoly *p_to_poly, const Vector3 &p_map_up);
117117
static void _query_task_simplified_path_points(NavMeshPathQueryTask3D &p_query_task);
118118

119-
static void simplify_path_segment(int p_start_inx, int p_end_inx, const LocalVector<Vector3> &p_points, real_t p_epsilon, LocalVector<bool> &r_valid_points);
119+
static void simplify_path_segment(int p_start_inx, int p_end_inx, const LocalVector<Vector3> &p_points, real_t p_epsilon, LocalVector<uint32_t> &r_simplified_path_indices);
120120
static LocalVector<uint32_t> get_simplified_path_indices(const LocalVector<Vector3> &p_path, real_t p_epsilon);
121121
};
122122

0 commit comments

Comments
 (0)