Last active
December 21, 2020 10:09
-
-
Save Einlander/f9869c5a9a53a6f2b8611aafc7c59885 to your computer and use it in GitHub Desktop.
Optimizes the navigation meshes get_simple_path() array output
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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