#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.14.2
 Author:         alpines
 Date:			 19.05.2017

 Script Function:
	Mesh Checker der überprüft, ob es sich um einen ungerichteten Graphen handelt.

	Thread-Link: https://autoit.de/index.php/Thread/45414-A-Algorithmus-Pathfinding-AI

#ce ----------------------------------------------------------------------------

#include "NavMesh.au3"

Global Const $__ROUND_ECHOLON = 0.0001

Local $sMeshPath = FileOpenDialog("Wähle eine mesh-Datei aus", @ScriptDir, "mesh-Datei (*.mesh)")
Local $aMesh = _NavMesh_LoadMeshFromFile($sMeshPath)

If Not UBound($aMesh) Then
	MsgBox(16, "Fehler", "Es handelt sich um eine invalide Mesh-Datei!")
	Exit
EndIf

For $i = 0 To UBound($aMesh) - 1
	Local $aWaypoints = _NavMesh_ListWaypointsByWaypoint($i, $aMesh)

	For $j = 0 To UBound($aWaypoints) - 1
		Local $aForwards  = _NavMesh_GetPath($i, $aWaypoints[$j], $aMesh)
		Local $aBackwards = _NavMesh_GetPath($aWaypoints[$j], $i, $aMesh)

		Local $iForwards  = _NavMesh_GetPathDistance($aForwards,  $aMesh)
		Local $iBackwards = _NavMesh_GetPathDistance($aBackwards, $aMesh)

		Local $sForwards = "", $sBackwards = ""

		For $k = 0 To UBound($aForwards) - 1
			$sForwards &= $aForwards[$k] & ($k < UBound($aForwards) - 1 ? "-" : "")
		Next

		For $k = 0 To UBound($aBackwards) - 1
			$sBackwards &= $aBackwards[$k] & ($k < UBound($aBackwards) - 1 ? "-" : "")
		Next

		If ($iForwards - $iBackwards) > $__ROUND_ECHOLON Then
			MsgBox(48, "Anderer Pfad", "Der Pfad von " & $i & " nach " & $j & " ist nicht gleich dem Pfad " & $i & " nach " & $i & "!" & _
									   @CRLF & @CRLF & _
									   "Distanz von " & $i& " nach " & $j & " beträgt: " & $iForwards & @CRLF & _
									   "Distanz von " & $j & " nach " & $i & " beträgt: " & $iBackwards & @CRLF & @CRLF & _
									   "Pfad von " & $i & " nach " & $j & " lautet: " & $sForwards & @CRLF & _
									   "Pfad von " & $j & " nach " & $i & " lautet: " & $sBackwards)
		EndIf
	Next
Next

MsgBox(64, "Fertig", "Überprüfung abgeschlossen!")