Skip to content

Instantly share code, notes, and snippets.

@Einlander
Last active December 21, 2020 10:09
Show Gist options
  • Save Einlander/f9869c5a9a53a6f2b8611aafc7c59885 to your computer and use it in GitHub Desktop.
Save Einlander/f9869c5a9a53a6f2b8611aafc7c59885 to your computer and use it in GitHub Desktop.
Optimizes the navigation meshes get_simple_path() array output
func optimize_path(path:Array,remove_duplicates = true):
#fail early
if path.size() < 1:
return path
var last_normal:Vector3
var point:Vector3
var optimized_list = []
var uniq = []
#remove duplicates
if remove_duplicates == true:
uniq.append(path[0])
for _point in path:
if _point != uniq[uniq.size()-1]:
uniq.append(_point)
else:
uniq = path
#join straight lines
var current_normal:Vector3
for i in range(uniq.size()-1):
point = uniq[i]
current_normal = uniq[i].direction_to(uniq[i+1])
if (current_normal != last_normal):
optimized_list.append(uniq[i])
last_normal = current_normal
optimized_list.append(uniq[uniq.size()-1])
return optimized_list
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment