diff --git a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast index bffdd5cf..c56720e5 100755 Binary files a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast and b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast differ diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser index 62dbdb70..23473cb4 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser @@ -17,6 +17,10 @@ ); breakpoints = ( 6BBB88CC10EAA37B008FEA1F /* NavMeshTesterTool.cpp:282 */, + 6BB7FDB010F376F4006DA0A6 /* main.cpp:573 */, + 6BB7FDE910F37785006DA0A6 /* Sample_SoloMeshSimple.cpp:186 */, + 6BB7FE6810F381F1006DA0A6 /* Sample.cpp:81 */, + 6BB7FE7110F38203006DA0A6 /* Sample_TileMesh.cpp:169 */, ); codeSenseManager = 6B8632AA0F78115100E2684A /* Code sense */; executables = ( @@ -145,6 +149,220 @@ 6BB4965F10C8F2AE00BC0805 = 6BB4965F10C8F2AE00BC0805 /* PBXTextBookmark */; 6BB4966110C8F2AE00BC0805 = 6BB4966110C8F2AE00BC0805 /* PBXTextBookmark */; 6BB4967C10C8F8F500BC0805 = 6BB4967C10C8F8F500BC0805 /* PBXTextBookmark */; + 6BB7FD4B10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD4B10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD4C10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD4C10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD4D10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD4D10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD4E10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD4E10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD4F10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD4F10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5010F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5010F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5110F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5110F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5210F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5210F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5310F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5310F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5410F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5410F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5510F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5510F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5610F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5610F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5710F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5710F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5810F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5810F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5910F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5910F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5A10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5A10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5B10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5B10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5C10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5C10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5D10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5D10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5E10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5E10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD5F10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD5F10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD6010F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD6010F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD6110F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD6110F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD6210F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD6210F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD6310F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD6310F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD6410F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD6410F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD6510F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD6510F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD6610F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD6610F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD6710F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD6710F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD6810F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD6810F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD6910F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD6910F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD6A10F3564B006DA0A6 /* PBXTextBookmark */ = 6BB7FD6A10F3564B006DA0A6 /* PBXTextBookmark */; + 6BB7FD7510F361BE006DA0A6 /* PBXTextBookmark */ = 6BB7FD7510F361BE006DA0A6 /* PBXTextBookmark */; + 6BB7FD7C10F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD7C10F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD7D10F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD7D10F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD7E10F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD7E10F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD7F10F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD7F10F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8010F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8010F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8110F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8110F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8210F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8210F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8310F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8310F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8410F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8410F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8510F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8510F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8610F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8610F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8710F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8710F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8810F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8810F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8910F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8910F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8A10F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8A10F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8B10F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8B10F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8C10F36BD5006DA0A6 /* PBXTextBookmark */ = 6BB7FD8C10F36BD5006DA0A6 /* PBXTextBookmark */; + 6BB7FD8F10F36C53006DA0A6 /* PBXTextBookmark */ = 6BB7FD8F10F36C53006DA0A6 /* PBXTextBookmark */; + 6BB7FD9010F36C53006DA0A6 /* PBXTextBookmark */ = 6BB7FD9010F36C53006DA0A6 /* PBXTextBookmark */; + 6BB7FD9110F36C53006DA0A6 /* PBXTextBookmark */ = 6BB7FD9110F36C53006DA0A6 /* PBXTextBookmark */; + 6BB7FD9210F36C53006DA0A6 /* PBXTextBookmark */ = 6BB7FD9210F36C53006DA0A6 /* PBXTextBookmark */; + 6BB7FD9310F36C53006DA0A6 /* PBXTextBookmark */ = 6BB7FD9310F36C53006DA0A6 /* PBXTextBookmark */; + 6BB7FD9410F36C53006DA0A6 /* PBXTextBookmark */ = 6BB7FD9410F36C53006DA0A6 /* PBXTextBookmark */; + 6BB7FD9510F36C53006DA0A6 /* PBXTextBookmark */ = 6BB7FD9510F36C53006DA0A6 /* PBXTextBookmark */; + 6BB7FD9610F36C53006DA0A6 /* PBXTextBookmark */ = 6BB7FD9610F36C53006DA0A6 /* PBXTextBookmark */; + 6BB7FD9710F36C53006DA0A6 /* PBXTextBookmark */ = 6BB7FD9710F36C53006DA0A6 /* PBXTextBookmark */; + 6BB7FD9A10F36D7A006DA0A6 /* PBXTextBookmark */ = 6BB7FD9A10F36D7A006DA0A6 /* PBXTextBookmark */; + 6BB7FD9B10F36D7A006DA0A6 /* PBXTextBookmark */ = 6BB7FD9B10F36D7A006DA0A6 /* PBXTextBookmark */; + 6BB7FD9C10F36D7A006DA0A6 /* PBXTextBookmark */ = 6BB7FD9C10F36D7A006DA0A6 /* PBXTextBookmark */; + 6BB7FD9D10F36D7A006DA0A6 /* PBXTextBookmark */ = 6BB7FD9D10F36D7A006DA0A6 /* PBXTextBookmark */; + 6BB7FD9E10F36D7A006DA0A6 /* PBXTextBookmark */ = 6BB7FD9E10F36D7A006DA0A6 /* PBXTextBookmark */; + 6BB7FD9F10F36D7A006DA0A6 /* PBXTextBookmark */ = 6BB7FD9F10F36D7A006DA0A6 /* PBXTextBookmark */; + 6BB7FDA010F36D7A006DA0A6 /* PBXTextBookmark */ = 6BB7FDA010F36D7A006DA0A6 /* PBXTextBookmark */; + 6BB7FDA110F36D7A006DA0A6 /* PBXTextBookmark */ = 6BB7FDA110F36D7A006DA0A6 /* PBXTextBookmark */; + 6BB7FDB210F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDB210F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDB310F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDB310F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDB410F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDB410F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDB510F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDB510F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDB610F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDB610F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDB710F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDB710F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDB810F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDB810F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDB910F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDB910F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDBA10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDBA10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDBB10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDBB10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDBC10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDBC10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDBD10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDBD10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDBE10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDBE10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDBF10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDBF10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDC010F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDC010F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDC110F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDC110F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDC210F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDC210F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDC310F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDC310F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDC410F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDC410F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDC510F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDC510F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDC610F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDC610F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDC710F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDC710F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDC810F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDC810F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDC910F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDC910F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDCA10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDCA10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDCB10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDCB10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDCC10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDCC10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDCD10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDCD10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDCE10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDCE10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDCF10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDCF10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDD010F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDD010F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDD110F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDD110F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDD210F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDD210F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDD310F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDD310F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDD410F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDD410F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDD510F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDD510F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDD610F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDD610F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDD710F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDD710F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDD810F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDD810F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDD910F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDD910F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDDA10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDDA10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDDB10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDDB10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDDC10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDDC10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDDD10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDDD10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDDE10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDDE10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDDF10F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDDF10F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDE010F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDE010F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDE110F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDE110F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDE210F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDE210F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDE310F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDE310F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDE410F37703006DA0A6 /* PBXTextBookmark */ = 6BB7FDE410F37703006DA0A6 /* PBXTextBookmark */; + 6BB7FDED10F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDED10F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDEE10F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDEE10F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDEF10F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDEF10F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDF010F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDF010F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDF110F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDF110F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDF210F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDF210F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDF310F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDF310F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDF410F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDF410F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDF510F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDF510F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDF610F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDF610F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDF710F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDF710F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDF810F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDF810F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDF910F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDF910F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDFA10F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDFA10F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FDFB10F377DD006DA0A6 /* PBXTextBookmark */ = 6BB7FDFB10F377DD006DA0A6 /* PBXTextBookmark */; + 6BB7FE0F10F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE0F10F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1010F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1010F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1110F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1110F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1210F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1210F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1310F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1310F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1410F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1410F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1510F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1510F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1610F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1610F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1710F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1710F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1810F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1810F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1910F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1910F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1A10F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1A10F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1B10F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1B10F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1C10F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1C10F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1D10F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1D10F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1E10F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1E10F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE1F10F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE1F10F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE2010F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE2010F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE2110F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE2110F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE2210F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE2210F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE2310F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE2310F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE2410F37CF7006DA0A6 /* PBXTextBookmark */ = 6BB7FE2410F37CF7006DA0A6 /* PBXTextBookmark */; + 6BB7FE3A10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE3A10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE3B10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE3B10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE3C10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE3C10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE3D10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE3D10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE3E10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE3E10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE3F10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE3F10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4010F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4010F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4110F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4110F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4210F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4210F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4310F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4310F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4410F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4410F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4510F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4510F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4610F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4610F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4710F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4710F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4810F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4810F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4910F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4910F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4A10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4A10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4B10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4B10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4C10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4C10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4D10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4D10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4E10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4E10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE4F10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE4F10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5010F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5010F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5110F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5110F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5210F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5210F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5310F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5310F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5410F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5410F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5510F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5510F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5610F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5610F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5710F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5710F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5810F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5810F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5910F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5910F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5A10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5A10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE5B10F3817A006DA0A6 /* PBXTextBookmark */ = 6BB7FE5B10F3817A006DA0A6 /* PBXTextBookmark */; + 6BB7FE6010F381DC006DA0A6 /* PBXTextBookmark */ = 6BB7FE6010F381DC006DA0A6 /* PBXTextBookmark */; + 6BB7FE6110F381DC006DA0A6 /* PBXTextBookmark */ = 6BB7FE6110F381DC006DA0A6 /* PBXTextBookmark */; + 6BB7FE6210F381DC006DA0A6 /* PBXTextBookmark */ = 6BB7FE6210F381DC006DA0A6 /* PBXTextBookmark */; + 6BB7FE6310F381DC006DA0A6 /* PBXTextBookmark */ = 6BB7FE6310F381DC006DA0A6 /* PBXTextBookmark */; + 6BB7FE6410F381DC006DA0A6 /* PBXTextBookmark */ = 6BB7FE6410F381DC006DA0A6 /* PBXTextBookmark */; + 6BB7FE6510F381DC006DA0A6 /* PBXTextBookmark */ = 6BB7FE6510F381DC006DA0A6 /* PBXTextBookmark */; + 6BB7FE6B10F381FF006DA0A6 /* PBXTextBookmark */ = 6BB7FE6B10F381FF006DA0A6 /* PBXTextBookmark */; + 6BB7FE6C10F381FF006DA0A6 /* PBXTextBookmark */ = 6BB7FE6C10F381FF006DA0A6 /* PBXTextBookmark */; + 6BB7FE6D10F381FF006DA0A6 /* PBXTextBookmark */ = 6BB7FE6D10F381FF006DA0A6 /* PBXTextBookmark */; + 6BB7FE6E10F381FF006DA0A6 /* PBXTextBookmark */ = 6BB7FE6E10F381FF006DA0A6 /* PBXTextBookmark */; + 6BB7FE7210F38204006DA0A6 /* PBXTextBookmark */ = 6BB7FE7210F38204006DA0A6 /* PBXTextBookmark */; + 6BB7FE7410F38224006DA0A6 /* PBXTextBookmark */ = 6BB7FE7410F38224006DA0A6 /* PBXTextBookmark */; + 6BB7FE7510F38224006DA0A6 /* PBXTextBookmark */ = 6BB7FE7510F38224006DA0A6 /* PBXTextBookmark */; + 6BB7FE7610F38224006DA0A6 /* PBXTextBookmark */ = 6BB7FE7610F38224006DA0A6 /* PBXTextBookmark */; + 6BB7FE7710F38224006DA0A6 /* PBXTextBookmark */ = 6BB7FE7710F38224006DA0A6 /* PBXTextBookmark */; + 6BB7FE7810F38224006DA0A6 /* PBXTextBookmark */ = 6BB7FE7810F38224006DA0A6 /* PBXTextBookmark */; + 6BB7FE7910F38224006DA0A6 /* PBXTextBookmark */ = 6BB7FE7910F38224006DA0A6 /* PBXTextBookmark */; + 6BB7FE7A10F38224006DA0A6 /* PBXTextBookmark */ = 6BB7FE7A10F38224006DA0A6 /* PBXTextBookmark */; + 6BB7FE7B10F38224006DA0A6 /* PBXTextBookmark */ = 6BB7FE7B10F38224006DA0A6 /* PBXTextBookmark */; + 6BB7FE8210F3830D006DA0A6 /* PBXTextBookmark */ = 6BB7FE8210F3830D006DA0A6 /* PBXTextBookmark */; + 6BB7FE8310F3830D006DA0A6 /* PBXTextBookmark */ = 6BB7FE8310F3830D006DA0A6 /* PBXTextBookmark */; + 6BB7FE8410F3830D006DA0A6 /* PBXTextBookmark */ = 6BB7FE8410F3830D006DA0A6 /* PBXTextBookmark */; + 6BB7FE8510F3830D006DA0A6 /* PBXTextBookmark */ = 6BB7FE8510F3830D006DA0A6 /* PBXTextBookmark */; + 6BB7FE8610F3830D006DA0A6 /* PBXTextBookmark */ = 6BB7FE8610F3830D006DA0A6 /* PBXTextBookmark */; + 6BB7FE8710F3830D006DA0A6 /* PBXTextBookmark */ = 6BB7FE8710F3830D006DA0A6 /* PBXTextBookmark */; 6BB93CE710CFEB5D00F74F2B = 6BB93CE710CFEB5D00F74F2B /* PBXTextBookmark */; 6BB93CEB10CFEB5D00F74F2B = 6BB93CEB10CFEB5D00F74F2B /* PBXTextBookmark */; 6BB93D0510CFFC1300F74F2B = 6BB93D0510CFFC1300F74F2B /* PBXTextBookmark */; @@ -427,8 +645,8 @@ 6B137C7B0F7FCBE400459200 /* MeshLoaderObj.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {915, 800}}"; - sepNavSelRange = "{1134, 62}"; - sepNavVisRange = "{915, 681}"; + sepNavSelRange = "{1371, 0}"; + sepNavVisRange = "{919, 677}"; }; }; 6B137C7C0F7FCBE400459200 /* SDLMain.h */ = { @@ -440,9 +658,9 @@ }; 6B137C7E0F7FCBFE00459200 /* Recast.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 9488}}"; - sepNavSelRange = "{11228, 0}"; - sepNavVisRange = "{10817, 598}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 9600}}"; + sepNavSelRange = "{0, 918}"; + sepNavVisRange = "{0, 1447}"; }; }; 6B137C800F7FCBFE00459200 /* RecastLog.h */ = { @@ -519,38 +737,38 @@ }; 6B25B6100FFA62AD004F1BC4 /* Sample.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 1392}}"; - sepNavSelRange = "{392, 14}"; - sepNavVisRange = "{111, 725}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 1632}}"; + sepNavSelRange = "{1804, 0}"; + sepNavVisRange = "{1749, 547}"; }; }; 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 3024}}"; - sepNavSelRange = "{1284, 0}"; - sepNavVisRange = "{3048, 819}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 3456}}"; + sepNavSelRange = "{1949, 0}"; + sepNavVisRange = "{2601, 668}"; }; }; 6B25B6180FFA62BE004F1BC4 /* main.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 12000}}"; - sepNavSelRange = "{3928, 0}"; - sepNavVisRange = "{1250, 517}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 10576}}"; + sepNavSelRange = "{12520, 0}"; + sepNavVisRange = "{12361, 633}"; }; }; 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 1376}}"; - sepNavSelRange = "{2395, 13}"; - sepNavVisRange = "{1664, 810}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 1248}}"; + sepNavSelRange = "{1822, 0}"; + sepNavVisRange = "{1485, 719}"; sepNavWindowFrame = "{{15, 78}, {1011, 695}}"; }; }; 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1034, 14320}}"; - sepNavSelRange = "{12554, 0}"; - sepNavVisRange = "{12501, 672}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 14464}}"; + sepNavSelRange = "{3515, 0}"; + sepNavVisRange = "{3475, 484}"; }; }; 6B555DAE100B211D00247EA3 /* imguiRenderGL.h */ = { @@ -838,30 +1056,30 @@ }; 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 9904}}"; - sepNavSelRange = "{1126, 109}"; - sepNavVisRange = "{814, 527}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 10624}}"; + sepNavSelRange = "{1486, 0}"; + sepNavVisRange = "{1436, 507}"; }; }; 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 16112}}"; - sepNavSelRange = "{142, 0}"; - sepNavVisRange = "{217, 616}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 16464}}"; + sepNavSelRange = "{1409, 0}"; + sepNavVisRange = "{1213, 614}"; }; }; 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 1120}}"; - sepNavSelRange = "{91, 0}"; - sepNavVisRange = "{0, 631}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 1312}}"; + sepNavSelRange = "{1243, 0}"; + sepNavVisRange = "{956, 666}"; }; }; 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 1600}}"; - sepNavSelRange = "{189, 0}"; - sepNavVisRange = "{0, 737}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 1632}}"; + sepNavSelRange = "{1012, 27}"; + sepNavVisRange = "{128, 1276}"; }; }; 6BA1E89310C7C227008007F6 /* PBXTextBookmark */ = { @@ -926,18 +1144,2266 @@ }; 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 3920}}"; - sepNavSelRange = "{3997, 0}"; - sepNavVisRange = "{3627, 705}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 3792}}"; + sepNavSelRange = "{1091, 0}"; + sepNavVisRange = "{391, 908}"; }; }; 6BB788180FC04753003C24DB /* ChunkyTriMesh.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {915, 800}}"; - sepNavSelRange = "{1242, 0}"; - sepNavVisRange = "{919, 781}"; + sepNavSelRange = "{1267, 0}"; + sepNavVisRange = "{0, 1176}"; }; }; + 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 1376}}"; + sepNavSelRange = "{918, 0}"; + sepNavVisRange = "{0, 1158}"; + }; + }; + 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 7600}}"; + sepNavSelRange = "{919, 0}"; + sepNavVisRange = "{0, 1223}"; + }; + }; + 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 736}}"; + sepNavSelRange = "{1183, 0}"; + sepNavVisRange = "{837, 671}"; + }; + }; + 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 2944}}"; + sepNavSelRange = "{2550, 0}"; + sepNavVisRange = "{2205, 562}"; + }; + }; + 6BB7FD4B10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 65"; + rLen = 109; + rLoc = 2080; + rType = 0; + vrLen = 527; + vrLoc = 814; + }; + 6BB7FD4C10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 80"; + rLen = 13; + rLoc = 2125; + rType = 0; + vrLen = 810; + vrLoc = 1664; + }; + 6BB7FD4D10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */; + name = "NavMeshTesterTool.h: 1"; + rLen = 1348; + rLoc = 919; + rType = 0; + vrLen = 570; + vrLoc = 0; + }; + 6BB7FD4E10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 19"; + rLen = 15; + rLoc = 1377; + rType = 0; + vrLen = 720; + vrLoc = 111; + }; + 6BB7FD4F10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 1"; + rLen = 589; + rLoc = 919; + rType = 0; + vrLen = 643; + vrLoc = 0; + }; + 6BB7FD5010F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 539"; + rLen = 0; + rLoc = 12792; + rType = 0; + vrLen = 707; + vrLoc = 5758; + }; + 6BB7FD5110F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 1"; + rLen = 382; + rLoc = 919; + rType = 0; + vrLen = 690; + vrLoc = 0; + }; + 6BB7FD5210F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 1"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 669; + vrLoc = 0; + }; + 6BB7FD5310F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 429"; + rLen = 10; + rLoc = 9975; + rType = 0; + vrLen = 678; + vrLoc = 9366; + }; + 6BB7FD5410F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 80"; + rLen = 0; + rLoc = 2154; + rType = 0; + vrLen = 824; + vrLoc = 1599; + }; + 6BB7FD5510F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 107"; + rLen = 0; + rLoc = 2584; + rType = 0; + vrLen = 573; + vrLoc = 2025; + }; + 6BB7FD5610F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 33"; + rLen = 18; + rLoc = 1157; + rType = 0; + vrLen = 617; + vrLoc = 1029; + }; + 6BB7FD5710F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 152"; + rLen = 10; + rLoc = 3544; + rType = 0; + vrLen = 501; + vrLoc = 3208; + }; + 6BB7FD5810F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 34"; + rLen = 0; + rLoc = 1194; + rType = 0; + vrLen = 612; + vrLoc = 1029; + }; + 6BB7FD5910F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 203"; + rLen = 0; + rLoc = 4297; + rType = 0; + vrLen = 1019; + vrLoc = 4178; + }; + 6BB7FD5A10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 65"; + rLen = 109; + rLoc = 2080; + rType = 0; + vrLen = 527; + vrLoc = 814; + }; + 6BB7FD5B10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 205"; + rLen = 0; + rLoc = 4405; + rType = 0; + vrLen = 1036; + vrLoc = 4178; + }; + 6BB7FD5C10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 34"; + rLen = 10; + rLoc = 1183; + rType = 0; + vrLen = 612; + vrLoc = 1029; + }; + 6BB7FD5D10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 206"; + rLen = 0; + rLoc = 4480; + rType = 0; + vrLen = 1003; + vrLoc = 4178; + }; + 6BB7FD5E10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 80"; + rLen = 13; + rLoc = 2125; + rType = 0; + vrLen = 810; + vrLoc = 1664; + }; + 6BB7FD5F10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 528"; + rLen = 0; + rLoc = 12552; + rType = 0; + vrLen = 800; + vrLoc = 12168; + }; + 6BB7FD6010F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 528"; + rLen = 0; + rLoc = 12552; + rType = 0; + vrLen = 800; + vrLoc = 12168; + }; + 6BB7FD6110F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 1"; + rLen = 0; + rLoc = 1508; + rType = 0; + vrLen = 0; + vrLoc = 0; + }; + 6BB7FD6210F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 1"; + rLen = 0; + rLoc = 3914; + rType = 0; + vrLen = 0; + vrLoc = 0; + }; + 6BB7FD6310F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */; + name = "NavMeshTesterTool.h: 1"; + rLen = 1348; + rLoc = 919; + rType = 0; + vrLen = 570; + vrLoc = 0; + }; + 6BB7FD6410F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 51"; + rLen = 0; + rLoc = 1231; + rType = 0; + vrLen = 711; + vrLoc = 499; + }; + 6BB7FD6510F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 19"; + rLen = 15; + rLoc = 1377; + rType = 0; + vrLen = 720; + vrLoc = 111; + }; + 6BB7FD6610F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 1"; + rLen = 589; + rLoc = 919; + rType = 0; + vrLen = 643; + vrLoc = 0; + }; + 6BB7FD6710F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 1"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 669; + vrLoc = 0; + }; + 6BB7FD6810F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 539"; + rLen = 0; + rLoc = 12792; + rType = 0; + vrLen = 707; + vrLoc = 5758; + }; + 6BB7FD6910F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 1"; + rLen = 382; + rLoc = 919; + rType = 0; + vrLen = 690; + vrLoc = 0; + }; + 6BB7FD6A10F3564B006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 16"; + rLen = 0; + rLoc = 1242; + rType = 0; + vrLen = 596; + vrLoc = 26; + }; + 6BB7FD7510F361BE006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 16"; + rLen = 0; + rLoc = 1586; + rType = 0; + vrLen = 467; + vrLoc = 0; + }; + 6BB7FD7C10F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */; + name = "NavMeshTesterTool.h: 10"; + rLen = 0; + rLoc = 1090; + rType = 0; + vrLen = 570; + vrLoc = 0; + }; + 6BB7FD7D10F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 425"; + rLen = 0; + rLoc = 12133; + rType = 0; + vrLen = 1056; + vrLoc = 10485; + }; + 6BB7FD7E10F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 144"; + rLen = 0; + rLoc = 3468; + rType = 0; + vrLen = 710; + vrLoc = 2869; + }; + 6BB7FD7F10F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB93C7C10CFE1D500F74F2B /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 457"; + rLen = 106; + rLoc = 12026; + rType = 0; + vrLen = 853; + vrLoc = 11632; + }; + 6BB7FD8010F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 159"; + rLen = 17; + rLoc = 6062; + rType = 0; + vrLen = 747; + vrLoc = 4459; + }; + 6BB7FD8110F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 19"; + rLen = 11; + rLoc = 1121; + rType = 0; + vrLen = 649; + vrLoc = 0; + }; + 6BB7FD8210F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 49"; + rLen = 0; + rLoc = 1789; + rType = 0; + vrLen = 402; + vrLoc = 627; + }; + 6BB7FD8310F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 110"; + rLen = 0; + rLoc = 3110; + rType = 0; + vrLen = 699; + vrLoc = 4256; + }; + 6BB7FD8410F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */; + name = "NavMeshTesterTool.h: 10"; + rLen = 0; + rLoc = 1090; + rType = 0; + vrLen = 570; + vrLoc = 0; + }; + 6BB7FD8510F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 8"; + rLen = 58; + rLoc = 1076; + rType = 0; + vrLen = 643; + vrLoc = 0; + }; + 6BB7FD8610F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 8"; + rLen = 58; + rLoc = 1076; + rType = 0; + vrLen = 643; + vrLoc = 0; + }; + 6BB7FD8710F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 8"; + rLen = 58; + rLoc = 1076; + rType = 0; + vrLen = 643; + vrLoc = 0; + }; + 6BB7FD8810F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 17"; + rLen = 0; + rLoc = 1095; + rType = 0; + vrLen = 643; + vrLoc = 0; + }; + 6BB7FD8910F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 19"; + rLen = 11; + rLoc = 1121; + rType = 0; + vrLen = 649; + vrLoc = 0; + }; + 6BB7FD8A10F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 49"; + rLen = 0; + rLoc = 1789; + rType = 0; + vrLen = 402; + vrLoc = 627; + }; + 6BB7FD8B10F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 19"; + rLen = 11; + rLoc = 1121; + rType = 0; + vrLen = 649; + vrLoc = 0; + }; + 6BB7FD8C10F36BD5006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 126"; + rLen = 0; + rLoc = 3772; + rType = 0; + vrLen = 760; + vrLoc = 1622; + }; + 6BB7FD8F10F36C53006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 124"; + rLen = 0; + rLoc = 3640; + rType = 0; + vrLen = 760; + vrLoc = 1622; + }; + 6BB7FD9010F36C53006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; + name = "Sample_SoloMeshSimple.h: 18"; + rLen = 0; + rLoc = 1268; + rType = 0; + vrLen = 631; + vrLoc = 0; + }; + 6BB7FD9110F36C53006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 235"; + rLen = 371; + rLoc = 5529; + rType = 0; + vrLen = 686; + vrLoc = 4981; + }; + 6BB7FD9210F36C53006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 75"; + rLen = 0; + rLoc = 2531; + rType = 0; + vrLen = 579; + vrLoc = 1038; + }; + 6BB7FD9310F36C53006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 124"; + rLen = 0; + rLoc = 3640; + rType = 0; + vrLen = 760; + vrLoc = 1622; + }; + 6BB7FD9410F36C53006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; + name = "Sample_SoloMeshSimple.h: 18"; + rLen = 0; + rLoc = 1268; + rType = 0; + vrLen = 631; + vrLoc = 0; + }; + 6BB7FD9510F36C53006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 75"; + rLen = 0; + rLoc = 2531; + rType = 0; + vrLen = 629; + vrLoc = 1038; + }; + 6BB7FD9610F36C53006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 235"; + rLen = 371; + rLoc = 5529; + rType = 0; + vrLen = 686; + vrLoc = 4981; + }; + 6BB7FD9710F36C53006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 18"; + rLen = 0; + rLoc = 1378; + rType = 0; + vrLen = 627; + vrLoc = 0; + }; + 6BB7FD9A10F36D7A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 21"; + rLen = 0; + rLoc = 1427; + rType = 0; + vrLen = 1972; + vrLoc = 2667; + }; + 6BB7FD9B10F36D7A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 280"; + rLen = 0; + rLoc = 7609; + rType = 0; + vrLen = 736; + vrLoc = 6177; + }; + 6BB7FD9C10F36D7A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 349"; + rLen = 0; + rLoc = 11581; + rType = 0; + vrLen = 593; + vrLoc = 11132; + }; + 6BB7FD9D10F36D7A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 75"; + rLen = 7; + rLoc = 2326; + rType = 0; + vrLen = 465; + vrLoc = 938; + }; + 6BB7FD9E10F36D7A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 21"; + rLen = 0; + rLoc = 1427; + rType = 0; + vrLen = 1972; + vrLoc = 2667; + }; + 6BB7FD9F10F36D7A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 280"; + rLen = 0; + rLoc = 7609; + rType = 0; + vrLen = 736; + vrLoc = 6177; + }; + 6BB7FDA010F36D7A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 349"; + rLen = 0; + rLoc = 11581; + rType = 0; + vrLen = 593; + vrLoc = 11132; + }; + 6BB7FDA110F36D7A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 8"; + rLen = 0; + rLoc = 1077; + rType = 0; + vrLen = 679; + vrLoc = 0; + }; + 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 1008}}"; + sepNavSelRange = "{1231, 0}"; + sepNavVisRange = "{1130, 873}"; + }; + }; + 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 2656}}"; + sepNavSelRange = "{3463, 0}"; + sepNavVisRange = "{3036, 784}"; + }; + }; + 6BB7FDB010F376F4006DA0A6 /* main.cpp:573 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + functionName = "main(int argc, char *argv[])"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 573; + location = Recast; + modificationTime = 284393980.540733; + state = 1; + }; + 6BB7FDB210F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 1"; + rLen = 918; + rLoc = 0; + rType = 0; + vrLen = 1447; + vrLoc = 0; + }; + 6BB7FDB310F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */; + name = "NavMeshTesterTool.h: 18"; + rLen = 0; + rLoc = 918; + rType = 0; + vrLen = 1158; + vrLoc = 0; + }; + 6BB7FDB410F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1223; + vrLoc = 0; + }; + 6BB7FDB510F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1149; + vrLoc = 0; + }; + 6BB7FDB610F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 18"; + rLen = 0; + rLoc = 918; + rType = 0; + vrLen = 1206; + vrLoc = 0; + }; + 6BB7FDB710F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1272; + vrLoc = 0; + }; + 6BB7FDB810F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 900; + vrLoc = 391; + }; + 6BB7FDB910F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; + name = "Sample_SoloMeshSimple.h: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1184; + vrLoc = 0; + }; + 6BB7FDBA10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1215; + vrLoc = 0; + }; + 6BB7FDBB10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; + name = "Sample_SoloMeshTiled.h: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1189; + vrLoc = 0; + }; + 6BB7FDBC10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1253; + vrLoc = 59; + }; + 6BB7FDBD10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 35"; + rLen = 0; + rLoc = 1204; + rType = 0; + vrLen = 1182; + vrLoc = 0; + }; + 6BB7FDBE10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 422"; + rLen = 0; + rLoc = 9969; + rType = 0; + vrLen = 1212; + vrLoc = 0; + }; + 6BB7FDBF10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7B0F7FCBE400459200 /* MeshLoaderObj.h */; + name = "MeshLoaderObj.h: 38"; + rLen = 0; + rLoc = 1395; + rType = 0; + vrLen = 1196; + vrLoc = 0; + }; + 6BB7FDC010F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB788180FC04753003C24DB /* ChunkyTriMesh.h */; + name = "ChunkyTriMesh.h: 38"; + rLen = 0; + rLoc = 1267; + rType = 0; + vrLen = 1176; + vrLoc = 0; + }; + 6BB7FDC110F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */; + name = "ChunkyTriMesh.cpp: 30"; + rLen = 0; + rLoc = 1091; + rType = 0; + vrLen = 908; + vrLoc = 391; + }; + 6BB7FDC210F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */; + name = "InputGeom.h: 35"; + rLen = 37; + rLoc = 1206; + rType = 0; + vrLen = 873; + vrLoc = 1130; + }; + 6BB7FDC310F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 109"; + rLen = 0; + rLoc = 2952; + rType = 0; + vrLen = 856; + vrLoc = 2601; + }; + 6BB7FDC410F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 592"; + rLen = 0; + rLoc = 13582; + rType = 0; + vrLen = 791; + vrLoc = 13122; + }; + 6BB7FDC510F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 38"; + rLen = 0; + rLoc = 1687; + rType = 0; + vrLen = 506; + vrLoc = 428; + }; + 6BB7FDC610F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 13"; + rLen = 0; + rLoc = 1095; + rType = 0; + vrLen = 589; + vrLoc = 0; + }; + 6BB7FDC710F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 106"; + rLen = 0; + rLoc = 2654; + rType = 0; + vrLen = 546; + vrLoc = 0; + }; + 6BB7FDC810F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 15"; + rLen = 0; + rLoc = 1320; + rType = 0; + vrLen = 800; + vrLoc = 0; + }; + 6BB7FDC910F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; + name = "Sample_SoloMeshSimple.h: 9"; + rLen = 0; + rLoc = 1125; + rType = 0; + vrLen = 631; + vrLoc = 0; + }; + 6BB7FDCA10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 21"; + rLen = 0; + rLoc = 1427; + rType = 0; + vrLen = 1938; + vrLoc = 2667; + }; + 6BB7FDCB10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 1"; + rLen = 918; + rLoc = 0; + rType = 0; + vrLen = 1447; + vrLoc = 0; + }; + 6BB7FDCC10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */; + name = "NavMeshTesterTool.h: 18"; + rLen = 0; + rLoc = 918; + rType = 0; + vrLen = 1158; + vrLoc = 0; + }; + 6BB7FDCD10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; + name = "NavMeshTesterTool.cpp: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1223; + vrLoc = 0; + }; + 6BB7FDCE10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1149; + vrLoc = 0; + }; + 6BB7FDCF10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 18"; + rLen = 0; + rLoc = 918; + rType = 0; + vrLen = 1206; + vrLoc = 0; + }; + 6BB7FDD010F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1272; + vrLoc = 0; + }; + 6BB7FDD110F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 900; + vrLoc = 391; + }; + 6BB7FDD210F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; + name = "Sample_SoloMeshSimple.h: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1184; + vrLoc = 0; + }; + 6BB7FDD310F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1215; + vrLoc = 0; + }; + 6BB7FDD410F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; + name = "Sample_SoloMeshTiled.h: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1189; + vrLoc = 0; + }; + 6BB7FDD510F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1253; + vrLoc = 59; + }; + 6BB7FDD610F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 35"; + rLen = 0; + rLoc = 1204; + rType = 0; + vrLen = 1182; + vrLoc = 0; + }; + 6BB7FDD710F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 422"; + rLen = 0; + rLoc = 9969; + rType = 0; + vrLen = 1212; + vrLoc = 0; + }; + 6BB7FDD810F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 670; + vrLoc = 706; + }; + 6BB7FDD910F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7B0F7FCBE400459200 /* MeshLoaderObj.h */; + name = "MeshLoaderObj.h: 38"; + rLen = 0; + rLoc = 1395; + rType = 0; + vrLen = 1196; + vrLoc = 0; + }; + 6BB7FDDA10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB788180FC04753003C24DB /* ChunkyTriMesh.h */; + name = "ChunkyTriMesh.h: 38"; + rLen = 0; + rLoc = 1267; + rType = 0; + vrLen = 1176; + vrLoc = 0; + }; + 6BB7FDDB10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */; + name = "ChunkyTriMesh.cpp: 30"; + rLen = 0; + rLoc = 1091; + rType = 0; + vrLen = 908; + vrLoc = 391; + }; + 6BB7FDDC10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */; + name = "InputGeom.h: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1146; + vrLoc = 0; + }; + 6BB7FDDD10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 18"; + rLen = 0; + rLoc = 918; + rType = 0; + vrLen = 1235; + vrLoc = 0; + }; + 6BB7FDDE10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */; + name = "InputGeom.h: 46"; + rLen = 0; + rLoc = 1408; + rType = 0; + vrLen = 799; + vrLoc = 516; + }; + 6BB7FDDF10F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 210"; + rLen = 0; + rLoc = 4681; + rType = 0; + vrLen = 530; + vrLoc = 4386; + }; + 6BB7FDE010F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */; + name = "InputGeom.h: 35"; + rLen = 37; + rLoc = 1206; + rType = 0; + vrLen = 873; + vrLoc = 1130; + }; + 6BB7FDE110F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 18"; + rLen = 0; + rLoc = 918; + rType = 0; + vrLen = 1083; + vrLoc = 1157; + }; + 6BB7FDE210F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 592"; + rLen = 0; + rLoc = 13582; + rType = 0; + vrLen = 791; + vrLoc = 13122; + }; + 6BB7FDE310F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 109"; + rLen = 0; + rLoc = 2952; + rType = 0; + vrLen = 856; + vrLoc = 2601; + }; + 6BB7FDE410F37703006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 577"; + rLen = 0; + rLoc = 13160; + rType = 0; + vrLen = 682; + vrLoc = 13149; + }; + 6BB7FDE910F37785006DA0A6 /* Sample_SoloMeshSimple.cpp:186 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + functionName = "Sample_SoloMeshSimple::handleRender()"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 186; + location = Recast; + modificationTime = 284393980.540822; + state = 1; + }; + 6BB7FDED10F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7B0F7FCBE400459200 /* MeshLoaderObj.h */; + name = "MeshLoaderObj.h: 34"; + rLen = 0; + rLoc = 1307; + rType = 0; + vrLen = 677; + vrLoc = 919; + }; + 6BB7FDEE10F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 125"; + rLen = 0; + rLoc = 3463; + rType = 0; + vrLen = 784; + vrLoc = 3036; + }; + 6BB7FDEF10F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 186"; + rLen = 0; + rLoc = 5998; + rType = 0; + vrLen = 688; + vrLoc = 5647; + }; + 6BB7FDF010F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 624"; + rLen = 0; + rLoc = 14216; + rType = 0; + vrLen = 898; + vrLoc = 13801; + }; + 6BB7FDF110F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */; + name = "InputGeom.h: 35"; + rLen = 37; + rLoc = 1206; + rType = 0; + vrLen = 872; + vrLoc = 1130; + }; + 6BB7FDF210F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 577"; + rLen = 0; + rLoc = 13160; + rType = 0; + vrLen = 682; + vrLoc = 13149; + }; + 6BB7FDF310F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 106"; + rLen = 0; + rLoc = 2947; + rType = 0; + vrLen = 801; + vrLoc = 2681; + }; + 6BB7FDF410F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7B0F7FCBE400459200 /* MeshLoaderObj.h */; + name = "MeshLoaderObj.h: 34"; + rLen = 0; + rLoc = 1307; + rType = 0; + vrLen = 677; + vrLoc = 919; + }; + 6BB7FDF510F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 125"; + rLen = 0; + rLoc = 3463; + rType = 0; + vrLen = 784; + vrLoc = 3036; + }; + 6BB7FDF610F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 598"; + rLen = 0; + rLoc = 13582; + rType = 0; + vrLen = 898; + vrLoc = 13801; + }; + 6BB7FDF710F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 186"; + rLen = 0; + rLoc = 6006; + rType = 0; + vrLen = 777; + vrLoc = 5558; + }; + 6BB7FDF810F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 624"; + rLen = 0; + rLoc = 14216; + rType = 0; + vrLen = 898; + vrLoc = 13801; + }; + 6BB7FDF910F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 186"; + rLen = 0; + rLoc = 5998; + rType = 0; + vrLen = 688; + vrLoc = 5647; + }; + 6BB7FDFA10F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 624"; + rLen = 0; + rLoc = 14216; + rType = 0; + vrLen = 898; + vrLoc = 13801; + }; + 6BB7FDFB10F377DD006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */; + name = "InputGeom.h: 35"; + rLen = 0; + rLoc = 1231; + rType = 0; + vrLen = 872; + vrLoc = 1130; + }; + 6BB7FE0F10F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */; + name = "InputGeom.h: 35"; + rLen = 0; + rLoc = 1231; + rType = 0; + vrLen = 873; + vrLoc = 1130; + }; + 6BB7FE1010F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7B0F7FCBE400459200 /* MeshLoaderObj.h */; + name = "MeshLoaderObj.h: 36"; + rLen = 0; + rLoc = 1371; + rType = 0; + vrLen = 677; + vrLoc = 919; + }; + 6BB7FE1110F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 123"; + rLen = 0; + rLoc = 2763; + rType = 0; + vrLen = 833; + vrLoc = 2256; + }; + 6BB7FE1210F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 86"; + rLen = 56; + rLoc = 2489; + rType = 0; + vrLen = 818; + vrLoc = 2026; + }; + 6BB7FE1310F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; + name = "Sample_SoloMeshSimple.h: 78"; + rLen = 56; + rLoc = 2139; + rType = 0; + vrLen = 680; + vrLoc = 1674; + }; + 6BB7FE1410F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 215"; + rLen = 98; + rLoc = 6741; + rType = 0; + vrLen = 1200; + vrLoc = 6139; + }; + 6BB7FE1510F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 61"; + rLen = 0; + rLoc = 1805; + rType = 0; + vrLen = 575; + vrLoc = 1240; + }; + 6BB7FE1610F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; + name = "Sample_SoloMeshTiled.h: 107"; + rLen = 21; + rLoc = 2863; + rType = 0; + vrLen = 676; + vrLoc = 2369; + }; + 6BB7FE1710F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */; + name = "InputGeom.h: 35"; + rLen = 0; + rLoc = 1231; + rType = 0; + vrLen = 873; + vrLoc = 1130; + }; + 6BB7FE1810F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 56"; + rLen = 6; + rLoc = 1795; + rType = 0; + vrLen = 702; + vrLoc = 1737; + }; + 6BB7FE1910F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 86"; + rLen = 41; + rLoc = 2503; + rType = 0; + vrLen = 828; + vrLoc = 1861; + }; + 6BB7FE1A10F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 120"; + rLen = 0; + rLoc = 2680; + rType = 0; + vrLen = 714; + vrLoc = 2109; + }; + 6BB7FE1B10F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 89"; + rLen = 0; + rLoc = 2575; + rType = 0; + vrLen = 797; + vrLoc = 2053; + }; + 6BB7FE1C10F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 128"; + rLen = 1; + rLoc = 2889; + rType = 0; + vrLen = 835; + vrLoc = 2254; + }; + 6BB7FE1D10F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 89"; + rLen = 0; + rLoc = 2590; + rType = 0; + vrLen = 818; + vrLoc = 2026; + }; + 6BB7FE1E10F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 123"; + rLen = 0; + rLoc = 2763; + rType = 0; + vrLen = 833; + vrLoc = 2256; + }; + 6BB7FE1F10F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 86"; + rLen = 56; + rLoc = 2489; + rType = 0; + vrLen = 818; + vrLoc = 2026; + }; + 6BB7FE2010F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 341"; + rLen = 0; + rLoc = 10275; + rType = 0; + vrLen = 1199; + vrLoc = 9966; + }; + 6BB7FE2110F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; + name = "Sample_SoloMeshSimple.h: 78"; + rLen = 56; + rLoc = 2139; + rType = 0; + vrLen = 680; + vrLoc = 1674; + }; + 6BB7FE2210F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; + name = "Sample_SoloMeshTiled.h: 107"; + rLen = 21; + rLoc = 2863; + rType = 0; + vrLen = 676; + vrLoc = 2369; + }; + 6BB7FE2310F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 61"; + rLen = 0; + rLoc = 1805; + rType = 0; + vrLen = 575; + vrLoc = 1240; + }; + 6BB7FE2410F37CF7006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; + name = "Sample_SoloMeshTiled.h: 107"; + rLen = 56; + rLoc = 2831; + rType = 0; + vrLen = 676; + vrLoc = 2369; + }; + 6BB7FE3A10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; + name = "Sample_SoloMeshSimple.h: 33"; + rLen = 0; + rLoc = 1243; + rType = 0; + vrLen = 666; + vrLoc = 956; + }; + 6BB7FE3B10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; + name = "Sample_SoloMeshTiled.h: 23"; + rLen = 27; + rLoc = 1012; + rType = 0; + vrLen = 1276; + vrLoc = 128; + }; + 6BB7FE3C10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 58"; + rLen = 0; + rLoc = 1804; + rType = 0; + vrLen = 547; + vrLoc = 1749; + }; + 6BB7FE3D10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 25"; + rLen = 0; + rLoc = 1073; + rType = 0; + vrLen = 952; + vrLoc = 317; + }; + 6BB7FE3E10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 547"; + rLen = 0; + rLoc = 12520; + rType = 0; + vrLen = 633; + vrLoc = 12361; + }; + 6BB7FE3F10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 99"; + rLen = 100; + rLoc = 2410; + rType = 0; + vrLen = 610; + vrLoc = 2054; + }; + 6BB7FE4010F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 37"; + rLen = 0; + rLoc = 1361; + rType = 0; + vrLen = 686; + vrLoc = 963; + }; + 6BB7FE4110F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 37"; + rLen = 0; + rLoc = 1356; + rType = 0; + vrLen = 573; + vrLoc = 915; + }; + 6BB7FE4210F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 67"; + rLen = 0; + rLoc = 1886; + rType = 0; + vrLen = 763; + vrLoc = 1285; + }; + 6BB7FE4310F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; + name = "Sample_SoloMeshTiled.h: 107"; + rLen = 56; + rLoc = 2831; + rType = 0; + vrLen = 645; + vrLoc = 2400; + }; + 6BB7FE4410F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 58"; + rLen = 0; + rLoc = 1845; + rType = 0; + vrLen = 579; + vrLoc = 1606; + }; + 6BB7FE4510F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; + name = "Sample_SoloMeshSimple.h: 78"; + rLen = 0; + rLoc = 2224; + rType = 0; + vrLen = 646; + vrLoc = 1622; + }; + 6BB7FE4610F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 90"; + rLen = 0; + rLoc = 2576; + rType = 0; + vrLen = 799; + vrLoc = 2076; + }; + 6BB7FE4710F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 132"; + rLen = 0; + rLoc = 2907; + rType = 0; + vrLen = 732; + vrLoc = 2524; + }; + 6BB7FE4810F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; + name = "Sample_SoloMeshSimple.h: 33"; + rLen = 0; + rLoc = 1243; + rType = 0; + vrLen = 666; + vrLoc = 956; + }; + 6BB7FE4910F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; + name = "Sample_SoloMeshTiled.h: 31"; + rLen = 0; + rLoc = 1166; + rType = 0; + vrLen = 720; + vrLoc = 1082; + }; + 6BB7FE4A10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 42"; + rLen = 0; + rLoc = 1458; + rType = 0; + vrLen = 879; + vrLoc = 1989; + }; + 6BB7FE4B10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 600"; + rLen = 323; + rLoc = 16967; + rType = 0; + vrLen = 1175; + vrLoc = 16376; + }; + 6BB7FE4C10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 583"; + rLen = 0; + rLoc = 16604; + rType = 0; + vrLen = 852; + vrLoc = 16114; + }; + 6BB7FE4D10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 57"; + rLen = 0; + rLoc = 1804; + rType = 0; + vrLen = 704; + vrLoc = 1442; + }; + 6BB7FE4E10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 23"; + rLen = 0; + rLoc = 1024; + rType = 0; + vrLen = 975; + vrLoc = 317; + }; + 6BB7FE4F10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 57"; + rLen = 0; + rLoc = 1804; + rType = 0; + vrLen = 696; + vrLoc = 1442; + }; + 6BB7FE5010F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; + name = "Sample_SoloMeshTiled.h: 23"; + rLen = 27; + rLoc = 1012; + rType = 0; + vrLen = 1276; + vrLoc = 128; + }; + 6BB7FE5110F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 58"; + rLen = 0; + rLoc = 1804; + rType = 0; + vrLen = 547; + vrLoc = 1749; + }; + 6BB7FE5210F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 25"; + rLen = 0; + rLoc = 1073; + rType = 0; + vrLen = 952; + vrLoc = 317; + }; + 6BB7FE5310F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 94"; + rLen = 0; + rLoc = 2554; + rType = 0; + vrLen = 861; + vrLoc = 1955; + }; + 6BB7FE5410F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 68"; + rLen = 56; + rLoc = 1961; + rType = 0; + vrLen = 740; + vrLoc = 1495; + }; + 6BB7FE5510F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 67"; + rLen = 0; + rLoc = 1886; + rType = 0; + vrLen = 763; + vrLoc = 1285; + }; + 6BB7FE5610F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 547"; + rLen = 0; + rLoc = 12520; + rType = 0; + vrLen = 633; + vrLoc = 12361; + }; + 6BB7FE5710F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 93"; + rLen = 276; + rLoc = 2256; + rType = 0; + vrLen = 610; + vrLoc = 2054; + }; + 6BB7FE5810F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 36"; + rLen = 13; + rLoc = 1344; + rType = 0; + vrLen = 686; + vrLoc = 963; + }; + 6BB7FE5910F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 99"; + rLen = 100; + rLoc = 2410; + rType = 0; + vrLen = 610; + vrLoc = 2054; + }; + 6BB7FE5A10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 37"; + rLen = 0; + rLoc = 1356; + rType = 0; + vrLen = 573; + vrLoc = 915; + }; + 6BB7FE5B10F3817A006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 27"; + rLen = 0; + rLoc = 1099; + rType = 0; + vrLen = 719; + vrLoc = 1485; + }; + 6BB7FE6010F381DC006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 63"; + rLen = 0; + rLoc = 1822; + rType = 0; + vrLen = 719; + vrLoc = 1485; + }; + 6BB7FE6110F381DC006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 91"; + rLen = 0; + rLoc = 2075; + rType = 0; + vrLen = 325; + vrLoc = 1806; + }; + 6BB7FE6210F381DC006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 37"; + rLen = 0; + rLoc = 1356; + rType = 0; + vrLen = 570; + vrLoc = 918; + }; + 6BB7FE6310F381DC006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 63"; + rLen = 0; + rLoc = 1822; + rType = 0; + vrLen = 719; + vrLoc = 1485; + }; + 6BB7FE6410F381DC006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 91"; + rLen = 0; + rLoc = 2075; + rType = 0; + vrLen = 325; + vrLoc = 1806; + }; + 6BB7FE6510F381DC006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 154"; + rLen = 0; + rLoc = 3515; + rType = 0; + vrLen = 455; + vrLoc = 3382; + }; + 6BB7FE6810F381F1006DA0A6 /* Sample.cpp:81 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + functionName = "Sample::Sample()"; + hitCount = 1; + ignoreCount = 0; + lineNumber = 81; + location = Recast; + modificationTime = 284393992.62761; + state = 1; + }; + 6BB7FE6B10F381FF006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 78"; + rLen = 0; + rLoc = 1935; + rType = 0; + vrLen = 336; + vrLoc = 1806; + }; + 6BB7FE6C10F381FF006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 154"; + rLen = 0; + rLoc = 3515; + rType = 0; + vrLen = 494; + vrLoc = 3389; + }; + 6BB7FE6D10F381FF006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 78"; + rLen = 0; + rLoc = 1935; + rType = 0; + vrLen = 336; + vrLoc = 1806; + }; + 6BB7FE6E10F381FF006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 154"; + rLen = 0; + rLoc = 3515; + rType = 0; + vrLen = 517; + vrLoc = 3386; + }; + 6BB7FE7110F38203006DA0A6 /* Sample_TileMesh.cpp:169 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + functionName = "Sample_TileMesh::Sample_TileMesh()"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 169; + location = Recast; + modificationTime = 284393987.962665; + state = 1; + }; + 6BB7FE7210F38204006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 154"; + rLen = 0; + rLoc = 3515; + rType = 0; + vrLen = 484; + vrLoc = 3475; + }; + 6BB7FE7410F38224006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 154"; + rLen = 0; + rLoc = 3515; + rType = 0; + vrLen = 484; + vrLoc = 3475; + }; + 6BB7FE7510F38224006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 81"; + rLen = 0; + rLoc = 1949; + rType = 0; + vrLen = 668; + vrLoc = 2601; + }; + 6BB7FE7610F38224006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 45"; + rLen = 0; + rLoc = 1486; + rType = 0; + vrLen = 507; + vrLoc = 1436; + }; + 6BB7FE7710F38224006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 37"; + rLen = 0; + rLoc = 1361; + rType = 0; + vrLen = 686; + vrLoc = 963; + }; + 6BB7FE7810F38224006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 154"; + rLen = 0; + rLoc = 3515; + rType = 0; + vrLen = 484; + vrLoc = 3475; + }; + 6BB7FE7910F38224006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 81"; + rLen = 0; + rLoc = 1949; + rType = 0; + vrLen = 668; + vrLoc = 2601; + }; + 6BB7FE7A10F38224006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 45"; + rLen = 0; + rLoc = 1486; + rType = 0; + vrLen = 507; + vrLoc = 1436; + }; + 6BB7FE7B10F38224006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 43"; + rLen = 0; + rLoc = 1458; + rType = 0; + vrLen = 630; + vrLoc = 1139; + }; + 6BB7FE8210F3830D006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 40"; + rLen = 0; + rLoc = 1409; + rType = 0; + vrLen = 614; + vrLoc = 1213; + }; + 6BB7FE8310F3830D006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 36"; + rLen = 0; + rLoc = 1183; + rType = 0; + vrLen = 671; + vrLoc = 837; + }; + 6BB7FE8410F3830D006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: 'm_nlinks' was not declared in this scope"; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + rLen = 1; + rLoc = 110; + rType = 1; + }; + 6BB7FE8510F3830D006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 40"; + rLen = 0; + rLoc = 1409; + rType = 0; + vrLen = 614; + vrLoc = 1213; + }; + 6BB7FE8610F3830D006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */; + name = "ExtraLinkTool.h: 36"; + rLen = 0; + rLoc = 1183; + rType = 0; + vrLen = 671; + vrLoc = 837; + }; + 6BB7FE8710F3830D006DA0A6 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; + name = "ExtraLinkTool.cpp: 111"; + rLen = 0; + rLoc = 2550; + rType = 0; + vrLen = 562; + vrLoc = 2205; + }; 6BB93C7710CFE1D500F74F2B /* DebugDraw.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {915, 1168}}"; @@ -975,9 +3441,9 @@ }; 6BB93C7C10CFE1D500F74F2B /* RecastDebugDraw.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {922, 12736}}"; - sepNavSelRange = "{5238, 0}"; - sepNavVisRange = "{5002, 965}"; + sepNavIntBoundsRect = "{{0, 0}, {922, 12912}}"; + sepNavSelRange = "{12026, 106}"; + sepNavVisRange = "{11632, 853}"; }; }; 6BB93CE710CFEB5D00F74F2B /* PBXTextBookmark */ = { @@ -1136,7 +3602,7 @@ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; name = "main.cpp: 20"; rLen = 0; - rLoc = 381; + rLoc = 1296; rType = 0; vrLen = 548; vrLoc = 0; @@ -1186,7 +3652,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 13"; rLen = 0; - rLoc = 352; + rLoc = 1298; rType = 0; vrLen = 783; vrLoc = 664; @@ -1426,7 +3892,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 74"; rLen = 0; - rLoc = 1686; + rLoc = 1598; rType = 0; vrLen = 557; vrLoc = 1701; @@ -1446,7 +3912,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 63"; rLen = 0; - rLoc = 1685; + rLoc = 1597; rType = 0; vrLen = 566; vrLoc = 1556; @@ -1456,7 +3922,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 65"; rLen = 0; - rLoc = 1686; + rLoc = 1598; rType = 0; vrLen = 537; vrLoc = 1556; @@ -1516,7 +3982,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 63"; rLen = 0; - rLoc = 1685; + rLoc = 1597; rType = 0; vrLen = 524; vrLoc = 1556; @@ -1526,7 +3992,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 68"; rLen = 0; - rLoc = 2076; + rLoc = 2157; rType = 0; vrLen = 717; vrLoc = 1467; @@ -1546,7 +4012,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 64"; rLen = 0; - rLoc = 1685; + rLoc = 1597; rType = 0; vrLen = 524; vrLoc = 1556; @@ -1556,7 +4022,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 68"; rLen = 0; - rLoc = 2076; + rLoc = 2157; rType = 0; vrLen = 717; vrLoc = 1467; @@ -1576,7 +4042,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 69"; rLen = 0; - rLoc = 1986; + rLoc = 2067; rType = 0; vrLen = 411; vrLoc = 1766; @@ -1586,7 +4052,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 29"; rLen = 15; - rLoc = 1137; + rLoc = 1106; rType = 0; vrLen = 1052; vrLoc = 244; @@ -1596,7 +4062,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 303"; rLen = 0; - rLoc = 5546; + rLoc = 5877; rType = 0; vrLen = 716; vrLoc = 6712; @@ -1606,7 +4072,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 30"; rLen = 0; - rLoc = 1170; + rLoc = 1139; rType = 0; vrLen = 1052; vrLoc = 244; @@ -1616,7 +4082,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 72"; rLen = 1; - rLoc = 1900; + rLoc = 1981; rType = 0; vrLen = 740; vrLoc = 2310; @@ -1626,7 +4092,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 119"; rLen = 0; - rLoc = 2436; + rLoc = 2166; rType = 0; vrLen = 179; vrLoc = 2253; @@ -1636,7 +4102,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 308"; rLen = 0; - rLoc = 5546; + rLoc = 5877; rType = 0; vrLen = 719; vrLoc = 6799; @@ -1646,7 +4112,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 119"; rLen = 23; - rLoc = 2389; + rLoc = 2119; rType = 0; vrLen = 131; vrLoc = 2301; @@ -1666,7 +4132,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 424"; rLen = 0; - rLoc = 7537; + rLoc = 8068; rType = 0; vrLen = 597; vrLoc = 9490; @@ -1706,7 +4172,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 77"; rLen = 0; - rLoc = 1324; + rLoc = 2244; rType = 0; vrLen = 671; vrLoc = 1116; @@ -1716,7 +4182,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 306"; rLen = 0; - rLoc = 5349; + rLoc = 5682; rType = 0; vrLen = 701; vrLoc = 7092; @@ -1726,7 +4192,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 119"; rLen = 23; - rLoc = 2389; + rLoc = 2119; rType = 0; vrLen = 151; vrLoc = 2281; @@ -1736,7 +4202,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 64"; rLen = 0; - rLoc = 1766; + rLoc = 1847; rType = 0; vrLen = 550; vrLoc = 1636; @@ -1756,7 +4222,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 84"; rLen = 0; - rLoc = 2072; + rLoc = 2153; rType = 0; vrLen = 550; vrLoc = 1911; @@ -1776,7 +4242,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 64"; rLen = 10; - rLoc = 1797; + rLoc = 1878; rType = 0; vrLen = 475; vrLoc = 1686; @@ -1796,7 +4262,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 58"; rLen = 0; - rLoc = 1862; + rLoc = 2696; rType = 0; vrLen = 874; vrLoc = 711; @@ -1816,7 +4282,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 32"; rLen = 0; - rLoc = 786; + rLoc = 1750; rType = 0; vrLen = 877; vrLoc = 1181; @@ -1856,7 +4322,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 75"; rLen = 0; - rLoc = 1824; + rLoc = 2650; rType = 0; vrLen = 833; vrLoc = 1184; @@ -1866,7 +4332,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 63"; rLen = 0; - rLoc = 1685; + rLoc = 1597; rType = 0; vrLen = 496; vrLoc = 1513; @@ -1876,7 +4342,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 306"; rLen = 0; - rLoc = 5389; + rLoc = 5722; rType = 0; vrLen = 514; vrLoc = 6951; @@ -1886,7 +4352,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 75"; rLen = 0; - rLoc = 1824; + rLoc = 2650; rType = 0; vrLen = 733; vrLoc = 70; @@ -1895,8 +4361,8 @@ isa = PBXTextBookmark; fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 312"; - rLen = 19; - rLoc = 5484; + rLen = 0; + rLoc = 5777; rType = 0; vrLen = 543; vrLoc = 7057; @@ -1906,7 +4372,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 24"; rLen = 25; - rLoc = 480; + rLoc = 1444; rType = 0; vrLen = 561; vrLoc = 241; @@ -1926,7 +4392,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 18"; rLen = 19; - rLoc = 409; + rLoc = 1355; rType = 0; vrLen = 561; vrLoc = 241; @@ -1946,7 +4412,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 310"; rLen = 0; - rLoc = 5441; + rLoc = 5774; rType = 0; vrLen = 509; vrLoc = 7055; @@ -2026,7 +4492,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 93"; rLen = 6; - rLoc = 1681; + rLoc = 2783; rType = 0; vrLen = 483; vrLoc = 1116; @@ -2036,7 +4502,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 123"; rLen = 0; - rLoc = 2841; + rLoc = 2922; rType = 0; vrLen = 693; vrLoc = 2535; @@ -2046,7 +4512,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 27"; rLen = 0; - rLoc = 624; + rLoc = 1588; rType = 0; vrLen = 566; vrLoc = 375; @@ -2086,7 +4552,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 54"; rLen = 0; - rLoc = 1530; + rLoc = 1611; rType = 0; vrLen = 520; vrLoc = 1467; @@ -2116,7 +4582,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 98"; rLen = 0; - rLoc = 2425; + rLoc = 2506; rType = 0; vrLen = 504; vrLoc = 2028; @@ -2126,7 +4592,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 58"; rLen = 21; - rLoc = 1250; + rLoc = 2136; rType = 0; vrLen = 498; vrLoc = 852; @@ -2136,7 +4602,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 70"; rLen = 0; - rLoc = 1110; + rLoc = 2030; rType = 0; vrLen = 303; vrLoc = 810; @@ -2146,7 +4612,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 69"; rLen = 0; - rLoc = 1443; + rLoc = 2329; rType = 0; vrLen = 705; vrLoc = 1145; @@ -2156,7 +4622,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 180"; rLen = 0; - rLoc = 3821; + rLoc = 4799; rType = 0; vrLen = 512; vrLoc = 3316; @@ -2166,7 +4632,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 69"; rLen = 0; - rLoc = 1527; + rLoc = 2413; rType = 0; vrLen = 821; vrLoc = 1181; @@ -2176,7 +4642,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 176"; rLen = 0; - rLoc = 3821; + rLoc = 4799; rType = 0; vrLen = 705; vrLoc = 3054; @@ -2186,7 +4652,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 109"; rLen = 0; - rLoc = 2225; + rLoc = 2017; rType = 0; vrLen = 154; vrLoc = 2278; @@ -2196,7 +4662,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 159"; rLen = 0; - rLoc = 3668; + rLoc = 3716; rType = 0; vrLen = 500; vrLoc = 3320; @@ -2206,7 +4672,7 @@ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; name = "main.cpp: 349"; rLen = 0; - rLoc = 7429; + rLoc = 6182; rType = 0; vrLen = 802; vrLoc = 7025; @@ -2216,7 +4682,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 165"; rLen = 0; - rLoc = 3576; + rLoc = 4554; rType = 0; vrLen = 775; vrLoc = 2983; @@ -2226,7 +4692,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 69"; rLen = 0; - rLoc = 1527; + rLoc = 2413; rType = 0; vrLen = 821; vrLoc = 1181; @@ -2236,7 +4702,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 165"; rLen = 0; - rLoc = 3576; + rLoc = 4554; rType = 0; vrLen = 775; vrLoc = 2983; @@ -2246,7 +4712,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 27"; rLen = 0; - rLoc = 667; + rLoc = 1631; rType = 0; vrLen = 491; vrLoc = 328; @@ -2256,7 +4722,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 115"; rLen = 0; - rLoc = 2739; + rLoc = 2820; rType = 0; vrLen = 714; vrLoc = 2447; @@ -2295,7 +4761,7 @@ ignoreCount = 0; lineNumber = 282; location = Recast; - modificationTime = 283812903.91562; + modificationTime = 284393980.540556; state = 1; }; 6BBB88D310EAA384008FEA1F /* PBXTextBookmark */ = { @@ -2313,7 +4779,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 98"; rLen = 0; - rLoc = 2425; + rLoc = 2506; rType = 0; vrLen = 480; vrLoc = 1994; @@ -2323,7 +4789,7 @@ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; name = "main.cpp: 700"; rLen = 0; - rLoc = 15879; + rLoc = 14576; rType = 0; vrLen = 631; vrLoc = 15519; @@ -2343,7 +4809,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 573"; rLen = 0; - rLoc = 8868; + rLoc = 9094; rType = 0; vrLen = 407; vrLoc = 14553; @@ -2362,8 +4828,8 @@ isa = PBXTextBookmark; fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 76"; - rLen = 53; - rLoc = 1809; + rLen = 61; + rLoc = 2635; rType = 0; vrLen = 787; vrLoc = 1249; @@ -2373,7 +4839,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 632"; rLen = 0; - rLoc = 10279; + rLoc = 10366; rType = 0; vrLen = 565; vrLoc = 15643; @@ -2383,7 +4849,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 111"; rLen = 0; - rLoc = 2255; + rLoc = 2046; rType = 0; vrLen = 174; vrLoc = 2258; @@ -2393,7 +4859,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 622"; rLen = 0; - rLoc = 10070; + rLoc = 10057; rType = 0; vrLen = 723; vrLoc = 2508; @@ -2403,7 +4869,7 @@ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; name = "main.cpp: 696"; rLen = 0; - rLoc = 15816; + rLoc = 14513; rType = 0; vrLen = 546; vrLoc = 15519; @@ -2413,7 +4879,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 122"; rLen = 0; - rLoc = 2885; + rLoc = 2966; rType = 0; vrLen = 657; vrLoc = 2594; @@ -2433,7 +4899,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 289"; rLen = 0; - rLoc = 5441; + rLoc = 5774; rType = 0; vrLen = 641; vrLoc = 6480; @@ -2443,7 +4909,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 165"; rLen = 0; - rLoc = 3574; + rLoc = 4552; rType = 0; vrLen = 819; vrLoc = 2939; @@ -2452,8 +4918,8 @@ isa = PBXTextBookmark; fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 76"; - rLen = 53; - rLoc = 1809; + rLen = 61; + rLoc = 2635; rType = 0; vrLen = 820; vrLoc = 1216; @@ -2463,7 +4929,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 84"; rLen = 0; - rLoc = 1325; + rLoc = 2245; rType = 0; vrLen = 381; vrLoc = 1046; @@ -2472,8 +4938,8 @@ isa = PBXTextBookmark; fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 76"; - rLen = 53; - rLoc = 1809; + rLen = 61; + rLoc = 2635; rType = 0; vrLen = 851; vrLoc = 1185; @@ -2483,7 +4949,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 76"; rLen = 0; - rLoc = 1181; + rLoc = 2101; rType = 0; vrLen = 340; vrLoc = 1046; @@ -2493,7 +4959,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 63"; rLen = 0; - rLoc = 1314; + rLoc = 2200; rType = 0; vrLen = 851; vrLoc = 1185; @@ -2503,7 +4969,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 80"; rLen = 0; - rLoc = 1222; + rLoc = 2142; rType = 0; vrLen = 336; vrLoc = 1093; @@ -2513,7 +4979,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 216"; rLen = 0; - rLoc = 5259; + rLoc = 5490; rType = 0; vrLen = 809; vrLoc = 4384; @@ -2523,7 +4989,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 35"; rLen = 0; - rLoc = 1258; + rLoc = 1225; rType = 0; vrLen = 785; vrLoc = 1452; @@ -2533,7 +4999,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 165"; rLen = 0; - rLoc = 3855; + rLoc = 3903; rType = 0; vrLen = 875; vrLoc = 3936; @@ -2542,7 +5008,7 @@ isa = PBXTextBookmark; fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 27"; - rLen = 31; + rLen = 0; rLoc = 1099; rType = 0; vrLen = 615; @@ -2553,7 +5019,7 @@ fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; name = "Sample_SoloMeshSimple.h: 8"; rLen = 0; - rLoc = 165; + rLoc = 1084; rType = 0; vrLen = 627; vrLoc = 0; @@ -2562,8 +5028,8 @@ isa = PBXTextBookmark; fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 229"; - rLen = 34; - rLoc = 5509; + rLen = 0; + rLoc = 5777; rType = 0; vrLen = 749; vrLoc = 4504; @@ -2573,7 +5039,7 @@ fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; name = "Sample_SoloMeshSimple.h: 5"; rLen = 0; - rLoc = 119; + rLoc = 1038; rType = 0; vrLen = 630; vrLoc = 0; @@ -2582,8 +5048,8 @@ isa = PBXTextBookmark; fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; name = "Sample_SoloMeshSimple.h: 12"; - rLen = 9; - rLoc = 253; + rLen = 0; + rLoc = 1160; rType = 0; vrLen = 634; vrLoc = 0; @@ -2603,7 +5069,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 186"; rLen = 0; - rLoc = 5946; + rLoc = 7225; rType = 0; vrLen = 746; vrLoc = 5683; @@ -2623,7 +5089,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 80"; rLen = 0; - rLoc = 1222; + rLoc = 2142; rType = 0; vrLen = 336; vrLoc = 1093; @@ -2633,7 +5099,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 26"; rLen = 0; - rLoc = 577; + rLoc = 1541; rType = 0; vrLen = 735; vrLoc = 111; @@ -2643,7 +5109,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 377"; rLen = 60; - rLoc = 8834; + rLoc = 9060; rType = 0; vrLen = 516; vrLoc = 8290; @@ -2653,7 +5119,7 @@ fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; name = "Sample_SoloMeshSimple.h: 5"; rLen = 0; - rLoc = 121; + rLoc = 1040; rType = 0; vrLen = 671; vrLoc = 175; @@ -2693,7 +5159,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 85"; rLen = 0; - rLoc = 1284; + rLoc = 2204; rType = 0; vrLen = 819; vrLoc = 3048; @@ -2713,7 +5179,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 186"; rLen = 0; - rLoc = 5946; + rLoc = 7225; rType = 0; vrLen = 746; vrLoc = 5683; @@ -2723,7 +5189,7 @@ fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; name = "Sample_SoloMeshSimple.h: 5"; rLen = 0; - rLoc = 121; + rLoc = 1040; rType = 0; vrLen = 709; vrLoc = 764; @@ -2733,7 +5199,7 @@ fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; name = "Sample.cpp: 85"; rLen = 0; - rLoc = 1284; + rLoc = 2204; rType = 0; vrLen = 819; vrLoc = 3048; @@ -2743,7 +5209,7 @@ fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; name = "Sample_SoloMeshSimple.h: 55"; rLen = 0; - rLoc = 1136; + rLoc = 2031; rType = 0; vrLen = 737; vrLoc = 736; @@ -2753,7 +5219,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 67"; rLen = 29; - rLoc = 1381; + rLoc = 2267; rType = 0; vrLen = 828; vrLoc = 976; @@ -2763,7 +5229,7 @@ fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; name = "Sample_SoloMeshSimple.h: 55"; rLen = 29; - rLoc = 1075; + rLoc = 1970; rType = 0; vrLen = 727; vrLoc = 736; @@ -2772,8 +5238,8 @@ isa = PBXTextBookmark; fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 75"; - rLen = 61; - rLoc = 2255; + rLen = 0; + rLoc = 2046; rType = 0; vrLen = 809; vrLoc = 1623; @@ -2783,7 +5249,7 @@ fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; name = "Sample_SoloMeshSimple.h: 66"; rLen = 0; - rLoc = 1511; + rLoc = 2224; rType = 0; vrLen = 730; vrLoc = 795; @@ -2793,7 +5259,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 186"; rLen = 0; - rLoc = 5946; + rLoc = 7225; rType = 0; vrLen = 746; vrLoc = 5683; @@ -2803,7 +5269,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 37"; rLen = 0; - rLoc = 817; + rLoc = 1753; rType = 0; vrLen = 510; vrLoc = 641; @@ -2813,7 +5279,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 45"; rLen = 0; - rLoc = 931; + rLoc = 1826; rType = 0; vrLen = 847; vrLoc = 1373; @@ -2823,7 +5289,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 86"; rLen = 0; - rLoc = 1896; + rLoc = 3191; rType = 0; vrLen = 777; vrLoc = 7108; @@ -2833,7 +5299,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 260"; rLen = 0; - rLoc = 7574; + rLoc = 9184; rType = 0; vrLen = 721; vrLoc = 10888; @@ -2843,7 +5309,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 408"; rLen = 0; - rLoc = 11343; + rLoc = 12953; rType = 0; vrLen = 999; vrLoc = 13764; @@ -2853,7 +5319,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 544"; rLen = 0; - rLoc = 14656; + rLoc = 16266; rType = 0; vrLen = 806; vrLoc = 14288; @@ -2863,7 +5329,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 580"; rLen = 0; - rLoc = 15486; + rLoc = 16965; rType = 0; vrLen = 1001; vrLoc = 15104; @@ -2873,9 +5339,9 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 1003"; rLen = 0; - rLoc = 30628; + rLoc = 31694; rType = 0; - vrLen = 2490; + vrLen = 2484; vrLoc = 28144; }; 6BBB897C10EAB179008FEA1F /* PBXTextBookmark */ = { @@ -2883,7 +5349,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 82"; rLen = 41; - rLoc = 1815; + rLoc = 2833; rType = 0; vrLen = 718; vrLoc = 1306; @@ -2893,7 +5359,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 17"; rLen = 31; - rLoc = 386; + rLoc = 1328; rType = 0; vrLen = 625; vrLoc = 0; @@ -2903,9 +5369,9 @@ fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; name = "Sample_SoloMeshTiled.h: 78"; rLen = 0; - rLoc = 1695; + rLoc = 2558; rType = 0; - vrLen = 740; + vrLen = 731; vrLoc = 1547; }; 6BBB898610EAB1AA008FEA1F /* PBXTextBookmark */ = { @@ -2913,7 +5379,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 17"; rLen = 31; - rLoc = 386; + rLoc = 1328; rType = 0; vrLen = 625; vrLoc = 0; @@ -2923,7 +5389,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 7"; rLen = 0; - rLoc = 142; + rLoc = 1061; rType = 0; vrLen = 616; vrLoc = 217; @@ -2933,7 +5399,7 @@ fRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 7"; rLen = 0; - rLoc = 142; + rLoc = 1061; rType = 0; vrLen = 616; vrLoc = 217; @@ -2943,7 +5409,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 17"; rLen = 14; - rLoc = 392; + rLoc = 1338; rType = 0; vrLen = 725; vrLoc = 111; @@ -2953,7 +5419,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 60"; rLen = 0; - rLoc = 1790; + rLoc = 1702; rType = 0; vrLen = 833; vrLoc = 1599; @@ -2963,7 +5429,7 @@ fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; name = "Sample_SoloMeshSimple.h: 4"; rLen = 0; - rLoc = 91; + rLoc = 1010; rType = 0; vrLen = 631; vrLoc = 0; @@ -2973,7 +5439,7 @@ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; name = "main.cpp: 196"; rLen = 0; - rLoc = 3928; + rLoc = 2719; rType = 0; vrLen = 548; vrLoc = 1207; @@ -2983,7 +5449,7 @@ fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; name = "Sample.h: 17"; rLen = 14; - rLoc = 392; + rLoc = 1338; rType = 0; vrLen = 725; vrLoc = 111; @@ -2993,7 +5459,7 @@ fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; name = "Sample_TileMesh.h: 60"; rLen = 0; - rLoc = 1790; + rLoc = 1702; rType = 0; vrLen = 833; vrLoc = 1599; @@ -3003,7 +5469,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 83"; rLen = 0; - rLoc = 2028; + rLoc = 2109; rType = 0; vrLen = 454; vrLoc = 1877; @@ -3013,7 +5479,7 @@ fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; name = "Sample_SoloMeshTiled.h: 4"; rLen = 0; - rLoc = 89; + rLoc = 1008; rType = 0; vrLen = 737; vrLoc = 0; @@ -3023,7 +5489,7 @@ fRef = 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */; name = "Sample_SoloMeshSimple.h: 4"; rLen = 0; - rLoc = 91; + rLoc = 1010; rType = 0; vrLen = 631; vrLoc = 0; @@ -3033,7 +5499,7 @@ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; name = "main.cpp: 196"; rLen = 0; - rLoc = 3928; + rLoc = 2719; rType = 0; vrLen = 548; vrLoc = 1207; @@ -3043,7 +5509,7 @@ fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; name = "Sample_SoloMeshTiled.h: 8"; rLen = 0; - rLoc = 189; + rLoc = 1108; rType = 0; vrLen = 737; vrLoc = 0; @@ -3073,7 +5539,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 83"; rLen = 0; - rLoc = 2028; + rLoc = 2109; rType = 0; vrLen = 454; vrLoc = 1877; @@ -3083,7 +5549,7 @@ fRef = 6BA1E88F10C7BFD3008007F6 /* Sample_SoloMeshTiled.h */; name = "Sample_SoloMeshTiled.h: 8"; rLen = 0; - rLoc = 189; + rLoc = 1108; rType = 0; vrLen = 737; vrLoc = 0; @@ -3113,7 +5579,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 97"; rLen = 0; - rLoc = 2282; + rLoc = 2363; rType = 0; vrLen = 573; vrLoc = 2076; diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 index 5b34b76c..010327bc 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 @@ -280,14 +280,14 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 42 + 37 34 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 460}, {282, 660}} + {{0, 464}, {282, 660}} PBXTopSmartGroupGIDs @@ -322,7 +322,7 @@ PBXProjectModuleGUID 6B8632A30F78115100E2684A PBXProjectModuleLabel - Sample_TileMesh.cpp + ExtraLinkTool.cpp PBXSplitModuleInNavigatorKey Split0 @@ -330,11 +330,11 @@ PBXProjectModuleGUID 6B8632A40F78115100E2684A PBXProjectModuleLabel - Sample_TileMesh.cpp + ExtraLinkTool.cpp _historyCapacity 0 bookmark - 6BBB89A710EAC398008FEA1F + 6BB7FE8710F3830D006DA0A6 history 6B57D358108C66B200DDD053 @@ -359,27 +359,33 @@ 6BB93D0A10CFFC1300F74F2B 6BB93D1510CFFC6D00F74F2B 6BB93D1B10CFFD7600F74F2B - 6B98693110DF8929007D8D84 - 6B98693310DF8929007D8D84 6B9869F710DFFA98007D8D84 6B9869F810DFFA98007D8D84 6BBB87D710EA97CC008FEA1F - 6BBB87D910EA97CC008FEA1F - 6BBB87DA10EA97CC008FEA1F 6BBB883C10EA9B6F008FEA1F 6BBB884E10EA9ECC008FEA1F 6BBB889B10EAA094008FEA1F - 6BBB894510EAAB73008FEA1F - 6BBB898310EAB1AA008FEA1F - 6BBB898810EAB225008FEA1F - 6BBB898E10EABB10008FEA1F - 6BBB898F10EABB10008FEA1F - 6BBB899110EABB10008FEA1F - 6BBB899210EABB10008FEA1F - 6BBB899D10EABD34008FEA1F - 6BBB899E10EABD34008FEA1F 6BBB899F10EABD34008FEA1F - 6BBB89A010EABD34008FEA1F + 6BB7FD7F10F36BD5006DA0A6 + 6BB7FDB210F37703006DA0A6 + 6BB7FDB310F37703006DA0A6 + 6BB7FDB410F37703006DA0A6 + 6BB7FDC010F37703006DA0A6 + 6BB7FDC110F37703006DA0A6 + 6BB7FDEE10F377DD006DA0A6 + 6BB7FE0F10F37CF7006DA0A6 + 6BB7FE1010F37CF7006DA0A6 + 6BB7FE3A10F3817A006DA0A6 + 6BB7FE3B10F3817A006DA0A6 + 6BB7FE3C10F3817A006DA0A6 + 6BB7FE3E10F3817A006DA0A6 + 6BB7FE6010F381DC006DA0A6 + 6BB7FE7410F38224006DA0A6 + 6BB7FE7510F38224006DA0A6 + 6BB7FE7610F38224006DA0A6 + 6BB7FE8210F3830D006DA0A6 + 6BB7FE8310F3830D006DA0A6 + 6BB7FE8410F3830D006DA0A6 prevStack @@ -387,189 +393,98 @@ 6B98693810DF8929007D8D84 6B98693910DF8929007D8D84 6B9869FC10DFFA98007D8D84 - 6BBB87E310EA97CC008FEA1F - 6BBB87E410EA97CC008FEA1F 6BBB87E510EA97CC008FEA1F - 6BBB87E610EA97CC008FEA1F - 6BBB87E710EA97CC008FEA1F - 6BBB87E810EA97CC008FEA1F 6BBB87E910EA97CC008FEA1F - 6BBB87EB10EA97CC008FEA1F - 6BBB87EC10EA97CC008FEA1F - 6BBB87EF10EA97CC008FEA1F - 6BBB87F010EA97CC008FEA1F - 6BBB87F110EA97CC008FEA1F - 6BBB87F410EA97CC008FEA1F - 6BBB87F510EA97CC008FEA1F - 6BBB87F610EA97CC008FEA1F - 6BBB87F710EA97CC008FEA1F - 6BBB87F810EA97CC008FEA1F - 6BBB87FA10EA97CC008FEA1F - 6BBB87FB10EA97CC008FEA1F - 6BBB87FC10EA97CC008FEA1F - 6BBB87FD10EA97CC008FEA1F - 6BBB87FE10EA97CC008FEA1F - 6BBB87FF10EA97CC008FEA1F - 6BBB880010EA97CC008FEA1F - 6BBB880110EA97CC008FEA1F - 6BBB880210EA97CC008FEA1F - 6BBB880310EA97CC008FEA1F - 6BBB880510EA97CC008FEA1F - 6BBB880610EA97CC008FEA1F - 6BBB880710EA97CC008FEA1F - 6BBB880810EA97CC008FEA1F - 6BBB880910EA97CC008FEA1F - 6BBB880A10EA97CC008FEA1F - 6BBB880B10EA97CC008FEA1F - 6BBB880C10EA97CC008FEA1F - 6BBB880D10EA97CC008FEA1F - 6BBB880E10EA97CC008FEA1F - 6BBB880F10EA97CC008FEA1F - 6BBB881010EA97CC008FEA1F - 6BBB881110EA97CC008FEA1F - 6BBB881210EA97CC008FEA1F - 6BBB881310EA97CC008FEA1F - 6BBB881410EA97CC008FEA1F - 6BBB881510EA97CC008FEA1F - 6BBB881610EA97CC008FEA1F - 6BBB881710EA97CC008FEA1F - 6BBB881810EA97CC008FEA1F - 6BBB882710EA99CA008FEA1F - 6BBB882810EA99CA008FEA1F - 6BBB882910EA99CA008FEA1F - 6BBB882A10EA99CA008FEA1F - 6BBB883610EA9B3D008FEA1F - 6BBB883710EA9B3D008FEA1F - 6BBB883E10EA9B6F008FEA1F 6BBB883F10EA9B6F008FEA1F 6BBB885510EA9ECC008FEA1F - 6BBB885610EA9ECC008FEA1F - 6BBB885710EA9ECC008FEA1F - 6BBB885810EA9ECC008FEA1F - 6BBB885910EA9ECC008FEA1F - 6BBB885A10EA9ECC008FEA1F - 6BBB885B10EA9ECC008FEA1F - 6BBB885C10EA9ECC008FEA1F - 6BBB885D10EA9ECC008FEA1F - 6BBB885E10EA9ECC008FEA1F - 6BBB885F10EA9ECC008FEA1F - 6BBB886010EA9ECC008FEA1F - 6BBB886110EA9ECC008FEA1F 6BBB886210EA9ECC008FEA1F - 6BBB886310EA9ECC008FEA1F - 6BBB886410EA9ECC008FEA1F - 6BBB886510EA9ECC008FEA1F - 6BBB886610EA9ECC008FEA1F - 6BBB886710EA9ECC008FEA1F - 6BBB886810EA9ECC008FEA1F - 6BBB886910EA9ECC008FEA1F - 6BBB886A10EA9ECC008FEA1F - 6BBB886B10EA9ECC008FEA1F - 6BBB886C10EA9ECC008FEA1F - 6BBB886D10EA9ECC008FEA1F - 6BBB886E10EA9ECC008FEA1F - 6BBB886F10EA9ECC008FEA1F - 6BBB887010EA9ECC008FEA1F - 6BBB887110EA9ECC008FEA1F - 6BBB887210EA9ECC008FEA1F - 6BBB887310EA9ECC008FEA1F - 6BBB887410EA9ECC008FEA1F - 6BBB887E10EA9FE6008FEA1F - 6BBB887F10EA9FE6008FEA1F - 6BBB888010EA9FE6008FEA1F - 6BBB888110EA9FE6008FEA1F - 6BBB888210EA9FE6008FEA1F - 6BBB888310EA9FE6008FEA1F - 6BBB888410EA9FE6008FEA1F - 6BBB889610EAA050008FEA1F 6BBB889D10EAA094008FEA1F - 6BBB88B410EAA316008FEA1F - 6BBB88B510EAA316008FEA1F - 6BBB88B610EAA316008FEA1F - 6BBB88B710EAA316008FEA1F - 6BBB88B810EAA316008FEA1F - 6BBB88B910EAA316008FEA1F - 6BBB88BA10EAA316008FEA1F - 6BBB88BB10EAA316008FEA1F - 6BBB88BC10EAA316008FEA1F - 6BBB88BD10EAA316008FEA1F - 6BBB88C110EAA316008FEA1F - 6BBB88C210EAA316008FEA1F - 6BBB88C310EAA316008FEA1F - 6BBB88C510EAA316008FEA1F - 6BBB88C610EAA316008FEA1F - 6BBB88C710EAA316008FEA1F - 6BBB88C810EAA316008FEA1F - 6BBB88D310EAA384008FEA1F - 6BBB88D410EAA384008FEA1F - 6BBB88D510EAA384008FEA1F - 6BBB88DA10EAA39C008FEA1F - 6BBB88E410EAA3D9008FEA1F - 6BBB88E510EAA3D9008FEA1F - 6BBB88E610EAA3D9008FEA1F - 6BBB88E710EAA3D9008FEA1F - 6BBB88E810EAA3D9008FEA1F - 6BBB88E910EAA3D9008FEA1F - 6BBB88F010EAA44E008FEA1F - 6BBB88F410EAA4E6008FEA1F - 6BBB88FC10EAA614008FEA1F - 6BBB88FD10EAA614008FEA1F - 6BBB88FE10EAA614008FEA1F - 6BBB88FF10EAA614008FEA1F - 6BBB890010EAA614008FEA1F - 6BBB890110EAA614008FEA1F - 6BBB890210EAA614008FEA1F - 6BBB890310EAA614008FEA1F - 6BBB890A10EAA6C2008FEA1F - 6BBB890D10EAA6C2008FEA1F - 6BBB890E10EAA6C2008FEA1F - 6BBB891B10EAA87B008FEA1F - 6BBB891C10EAA87B008FEA1F - 6BBB891D10EAA87B008FEA1F - 6BBB891F10EAA87B008FEA1F - 6BBB892310EAA87B008FEA1F - 6BBB892510EAA87B008FEA1F - 6BBB892710EAA87B008FEA1F - 6BBB892810EAA87B008FEA1F - 6BBB892910EAA87B008FEA1F - 6BBB892A10EAA87B008FEA1F - 6BBB892B10EAA87B008FEA1F - 6BBB892F10EAA899008FEA1F - 6BBB893A10EAAADC008FEA1F - 6BBB893C10EAAADC008FEA1F - 6BBB893D10EAAADC008FEA1F - 6BBB893E10EAAADC008FEA1F - 6BBB894A10EAAB73008FEA1F - 6BBB894C10EAAB73008FEA1F - 6BBB894E10EAAB73008FEA1F - 6BBB895010EAAB73008FEA1F - 6BBB895210EAAB73008FEA1F - 6BBB895310EAAB73008FEA1F - 6BBB895510EAAB73008FEA1F - 6BBB896010EAAE6C008FEA1F - 6BBB896110EAAE6C008FEA1F - 6BBB896310EAAE6C008FEA1F - 6BBB896C10EAB179008FEA1F - 6BBB896E10EAB179008FEA1F - 6BBB897010EAB179008FEA1F - 6BBB897210EAB179008FEA1F - 6BBB897410EAB179008FEA1F - 6BBB897610EAB179008FEA1F - 6BBB897810EAB179008FEA1F - 6BBB897A10EAB179008FEA1F - 6BBB897C10EAB179008FEA1F - 6BBB898510EAB1AA008FEA1F - 6BBB898610EAB1AA008FEA1F - 6BBB898A10EAB225008FEA1F - 6BBB899410EABB10008FEA1F - 6BBB899510EABB10008FEA1F - 6BBB899610EABB10008FEA1F - 6BBB899710EABB10008FEA1F - 6BBB899810EABB10008FEA1F - 6BBB899910EABB10008FEA1F - 6BBB89A110EABD34008FEA1F - 6BBB89A210EABD34008FEA1F - 6BBB89A310EABD34008FEA1F + 6BB7FD6110F3564B006DA0A6 + 6BB7FD6310F3564B006DA0A6 + 6BB7FD6410F3564B006DA0A6 + 6BB7FD6510F3564B006DA0A6 + 6BB7FD6610F3564B006DA0A6 + 6BB7FD6910F3564B006DA0A6 + 6BB7FD8310F36BD5006DA0A6 + 6BB7FD8410F36BD5006DA0A6 + 6BB7FD8510F36BD5006DA0A6 + 6BB7FD8610F36BD5006DA0A6 + 6BB7FD8710F36BD5006DA0A6 + 6BB7FD8810F36BD5006DA0A6 + 6BB7FD8910F36BD5006DA0A6 + 6BB7FD8B10F36BD5006DA0A6 + 6BB7FD9F10F36D7A006DA0A6 + 6BB7FDC510F37703006DA0A6 + 6BB7FDC610F37703006DA0A6 + 6BB7FDC710F37703006DA0A6 + 6BB7FDC810F37703006DA0A6 + 6BB7FDCB10F37703006DA0A6 + 6BB7FDCC10F37703006DA0A6 + 6BB7FDCD10F37703006DA0A6 + 6BB7FDCE10F37703006DA0A6 + 6BB7FDCF10F37703006DA0A6 + 6BB7FDD010F37703006DA0A6 + 6BB7FDD810F37703006DA0A6 + 6BB7FDD910F37703006DA0A6 + 6BB7FDDA10F37703006DA0A6 + 6BB7FDDB10F37703006DA0A6 + 6BB7FDDC10F37703006DA0A6 + 6BB7FDDD10F37703006DA0A6 + 6BB7FDDE10F37703006DA0A6 + 6BB7FDDF10F37703006DA0A6 + 6BB7FDE010F37703006DA0A6 + 6BB7FDE110F37703006DA0A6 + 6BB7FDE210F37703006DA0A6 + 6BB7FDE310F37703006DA0A6 + 6BB7FDF210F377DD006DA0A6 + 6BB7FDF310F377DD006DA0A6 + 6BB7FDF410F377DD006DA0A6 + 6BB7FDF510F377DD006DA0A6 + 6BB7FDF610F377DD006DA0A6 + 6BB7FDF810F377DD006DA0A6 + 6BB7FDFA10F377DD006DA0A6 + 6BB7FE1710F37CF7006DA0A6 + 6BB7FE1810F37CF7006DA0A6 + 6BB7FE1910F37CF7006DA0A6 + 6BB7FE1A10F37CF7006DA0A6 + 6BB7FE1B10F37CF7006DA0A6 + 6BB7FE1C10F37CF7006DA0A6 + 6BB7FE1D10F37CF7006DA0A6 + 6BB7FE1E10F37CF7006DA0A6 + 6BB7FE1F10F37CF7006DA0A6 + 6BB7FE2110F37CF7006DA0A6 + 6BB7FE2210F37CF7006DA0A6 + 6BB7FE2310F37CF7006DA0A6 + 6BB7FE4310F3817A006DA0A6 + 6BB7FE4410F3817A006DA0A6 + 6BB7FE4510F3817A006DA0A6 + 6BB7FE4610F3817A006DA0A6 + 6BB7FE4710F3817A006DA0A6 + 6BB7FE4810F3817A006DA0A6 + 6BB7FE4910F3817A006DA0A6 + 6BB7FE4A10F3817A006DA0A6 + 6BB7FE4B10F3817A006DA0A6 + 6BB7FE4C10F3817A006DA0A6 + 6BB7FE4D10F3817A006DA0A6 + 6BB7FE4E10F3817A006DA0A6 + 6BB7FE4F10F3817A006DA0A6 + 6BB7FE5010F3817A006DA0A6 + 6BB7FE5110F3817A006DA0A6 + 6BB7FE5210F3817A006DA0A6 + 6BB7FE5310F3817A006DA0A6 + 6BB7FE5410F3817A006DA0A6 + 6BB7FE5510F3817A006DA0A6 + 6BB7FE5610F3817A006DA0A6 + 6BB7FE5710F3817A006DA0A6 + 6BB7FE5810F3817A006DA0A6 + 6BB7FE5910F3817A006DA0A6 + 6BB7FE6310F381DC006DA0A6 + 6BB7FE6410F381DC006DA0A6 + 6BB7FE7810F38224006DA0A6 + 6BB7FE7910F38224006DA0A6 + 6BB7FE7A10F38224006DA0A6 + 6BB7FE8510F3830D006DA0A6 + 6BB7FE8610F3830D006DA0A6 SplitCount @@ -583,18 +498,18 @@ GeometryConfiguration Frame - {{0, 0}, {976, 515}} + {{0, 0}, {976, 527}} RubberWindowFrame 0 59 1280 719 0 0 1280 778 Module PBXNavigatorGroup Proportion - 515pt + 527pt Proportion - 158pt + 146pt Tabs @@ -608,7 +523,7 @@ GeometryConfiguration Frame - {{10, 27}, {976, 194}} + {{10, 27}, {976, 119}} Module XCDetailModule @@ -662,7 +577,7 @@ GeometryConfiguration Frame - {{10, 27}, {976, 131}} + {{10, 27}, {976, 119}} RubberWindowFrame 0 59 1280 719 0 0 1280 778 @@ -692,11 +607,11 @@ TableOfContents - 6BBB881A10EA97CC008FEA1F + 6BB7FD6B10F3564B006DA0A6 1CA23ED40692098700951B8B - 6BBB881B10EA97CC008FEA1F + 6BB7FD6C10F3564B006DA0A6 6B8632A30F78115100E2684A - 6BBB881C10EA97CC008FEA1F + 6BB7FD6D10F3564B006DA0A6 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -845,14 +760,14 @@ TableOfContents - 6BBB882C10EA99CA008FEA1F + 6BB7FD6E10F3564B006DA0A6 1CCC7628064C1048000F2A68 1CCC7629064C1048000F2A68 - 6BBB882D10EA99CA008FEA1F - 6BBB882E10EA99CA008FEA1F - 6BBB882F10EA99CA008FEA1F - 6BBB883010EA99CA008FEA1F - 6BBB883110EA99CA008FEA1F + 6BB7FD6F10F3564B006DA0A6 + 6BB7FD7010F3564B006DA0A6 + 6BB7FD7110F3564B006DA0A6 + 6BB7FD7210F3564B006DA0A6 + 6BB7FD7310F3564B006DA0A6 ToolbarConfigUserDefaultsMinorVersion 2 @@ -884,8 +799,8 @@ 5 WindowOrderList - 6BBB888F10EAA01C008FEA1F - 6BBB889010EAA01C008FEA1F + 6BB7FDE610F37703006DA0A6 + 6BB7FDE710F37703006DA0A6 /Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj WindowString diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/project.pbxproj b/RecastDemo/Build/Xcode/Recast.xcodeproj/project.pbxproj index affada49..0021ee16 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/project.pbxproj +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/project.pbxproj @@ -35,6 +35,8 @@ 6BA1E88C10C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */; }; 6BB788170FC0472B003C24DB /* ChunkyTriMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */; }; 6BB7FC0B10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */; }; + 6BB7FD4A10F3559D006DA0A6 /* ExtraLinkTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */; }; + 6BB7FDA510F36F0E006DA0A6 /* InputGeom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; }; 6BB93C7D10CFE1D500F74F2B /* DebugDraw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6BB93C7A10CFE1D500F74F2B /* DebugDraw.cpp */; }; 6BB93C7E10CFE1D500F74F2B /* DetourDebugDraw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6BB93C7B10CFE1D500F74F2B /* DetourDebugDraw.cpp */; }; 6BB93C7F10CFE1D500F74F2B /* RecastDebugDraw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6BB93C7C10CFE1D500F74F2B /* RecastDebugDraw.cpp */; }; @@ -96,6 +98,10 @@ 6BB788180FC04753003C24DB /* ChunkyTriMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChunkyTriMesh.h; path = ../../Include/ChunkyTriMesh.h; sourceTree = SOURCE_ROOT; }; 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NavMeshTesterTool.h; path = ../../Include/NavMeshTesterTool.h; sourceTree = SOURCE_ROOT; }; 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NavMeshTesterTool.cpp; path = ../../Source/NavMeshTesterTool.cpp; sourceTree = SOURCE_ROOT; }; + 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraLinkTool.h; path = ../../Include/ExtraLinkTool.h; sourceTree = SOURCE_ROOT; }; + 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ExtraLinkTool.cpp; path = ../../Source/ExtraLinkTool.cpp; sourceTree = SOURCE_ROOT; }; + 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InputGeom.h; path = ../../Include/InputGeom.h; sourceTree = SOURCE_ROOT; }; + 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InputGeom.cpp; path = ../../Source/InputGeom.cpp; sourceTree = SOURCE_ROOT; }; 6BB93C7710CFE1D500F74F2B /* DebugDraw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DebugDraw.h; path = ../../../DebugUtils/Include/DebugDraw.h; sourceTree = SOURCE_ROOT; }; 6BB93C7810CFE1D500F74F2B /* DetourDebugDraw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DetourDebugDraw.h; path = ../../../DebugUtils/Include/DetourDebugDraw.h; sourceTree = SOURCE_ROOT; }; 6BB93C7910CFE1D500F74F2B /* RecastDebugDraw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RecastDebugDraw.h; path = ../../../DebugUtils/Include/RecastDebugDraw.h; sourceTree = SOURCE_ROOT; }; @@ -141,6 +147,8 @@ 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */, 6B137C7C0F7FCBE400459200 /* SDLMain.h */, 6B137C6E0F7FCBBB00459200 /* SDLMain.m */, + 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */, + 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */, ); name = Classes; sourceTree = ""; @@ -237,6 +245,8 @@ children = ( 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */, 6BB7FC0A10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp */, + 6BB7FD4810F3558D006DA0A6 /* ExtraLinkTool.h */, + 6BB7FD4910F3559D006DA0A6 /* ExtraLinkTool.cpp */, 6B25B6100FFA62AD004F1BC4 /* Sample.h */, 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */, 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */, @@ -363,6 +373,8 @@ 6BB93C7F10CFE1D500F74F2B /* RecastDebugDraw.cpp in Sources */, 6BB93CF610CFEC4500F74F2B /* RecastDump.cpp in Sources */, 6BB7FC0B10EBB6AA006DA0A6 /* NavMeshTesterTool.cpp in Sources */, + 6BB7FD4A10F3559D006DA0A6 /* ExtraLinkTool.cpp in Sources */, + 6BB7FDA510F36F0E006DA0A6 /* InputGeom.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/RecastDemo/Include/ExtraLinkTool.h b/RecastDemo/Include/ExtraLinkTool.h new file mode 100644 index 00000000..b0b7029c --- /dev/null +++ b/RecastDemo/Include/ExtraLinkTool.h @@ -0,0 +1,45 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef EXTRALINKTOOL_H +#define EXTRALINKTOOL_H + +#include "Sample.h" + +// Tool to create extra links for InputGeom + +class ExtraLinkTool : public SampleTool +{ + Sample* m_sample; + float m_hitPos[3]; + bool m_hitPosSet; + +public: + ExtraLinkTool(); + ~ExtraLinkTool(); + + virtual int type() { return TOOL_EXTRA_LINK; } + virtual void init(Sample* sample); + virtual void reset(); + virtual void handleMenu(); + virtual void handleClick(const float* p, bool shift); + virtual void handleRender(); + virtual void handleRenderOverlay(double* proj, double* model, int* view); +}; + +#endif // EXTRALINKTOOL_H diff --git a/RecastDemo/Include/InputGeom.h b/RecastDemo/Include/InputGeom.h new file mode 100644 index 00000000..391def8b --- /dev/null +++ b/RecastDemo/Include/InputGeom.h @@ -0,0 +1,62 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef INPUTGEOM_H +#define INPUTGEOM_H + +#include "ChunkyTriMesh.h" +#include "MeshLoaderObj.h" + +struct ExtraLink +{ + float spos[3]; // Start position of the link. + float epos[3]; // End position of the link. +}; + +class InputGeom +{ + rcChunkyTriMesh* m_chunkyMesh; + rcMeshLoaderObj* m_mesh; + float m_meshBMin[3], m_meshBMax[3]; + + static const int MAX_LINKS = 256; + + ExtraLink m_links[MAX_LINKS]; + int m_nlinks; + +public: + InputGeom(); + ~InputGeom(); + + bool loadMesh(const char* filepath); + + // Method to return static mesh data. + inline const rcMeshLoaderObj* getMesh() const { return m_mesh; } + inline const float* getMeshBoundsMin() const { return m_meshBMin; } + inline const float* getMeshBoundsMax() const { return m_meshBMax; } + inline const rcChunkyTriMesh* getChunkyMesh() const { return m_chunkyMesh; } + bool raycastMesh(float* src, float* dst, float& tmin); + + // Extra links + int getExtraLinkCount() const { return m_nlinks; } + ExtraLink* getExtraLink(int i) { return &m_links[i]; } + void addExtraLink(const float* spos, const float* epos); + void deleteExtraLink(int i); +}; + +#endif // INPUTGEOM_H diff --git a/RecastDemo/Include/NavMeshTesterTool.h b/RecastDemo/Include/NavMeshTesterTool.h index e25173a0..9a662196 100644 --- a/RecastDemo/Include/NavMeshTesterTool.h +++ b/RecastDemo/Include/NavMeshTesterTool.h @@ -1,3 +1,21 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + #ifndef NAVMESHTESTERTOOL_H #define NAVMESHTESTERTOOL_H diff --git a/RecastDemo/Include/Sample.h b/RecastDemo/Include/Sample.h index 160048da..80365bf8 100644 --- a/RecastDemo/Include/Sample.h +++ b/RecastDemo/Include/Sample.h @@ -1,7 +1,26 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + #ifndef RECASTSAMPLE_H #define RECASTSAMPLE_H #include "DebugDraw.h" +#include "DetourNavMesh.h" struct DebugDrawGL : public duDebugDraw { @@ -16,6 +35,7 @@ enum SampleToolType TOOL_NONE = 0, TOOL_TILE_EDIT, TOOL_NAVMESH_TESTER, + TOOL_EXTRA_LINK, }; struct SampleTool @@ -34,12 +54,8 @@ struct SampleTool class Sample { protected: - const float* m_verts; - int m_nverts; - const int* m_tris; - const float* m_trinorms; - int m_ntris; - float m_bmin[3], m_bmax[3]; + class InputGeom* m_geom; + dtNavMesh* m_navMesh; float m_cellSize; float m_cellHeight; @@ -69,12 +85,11 @@ public: virtual void handleClick(const float* p, bool shift); virtual void handleRender(); virtual void handleRenderOverlay(double* proj, double* model, int* view); - virtual void handleMeshChanged(const float* verts, int nverts, - const int* tris, const float* trinorms, int ntris, - const float* bmin, const float* bmax); + virtual void handleMeshChanged(class InputGeom* geom); virtual bool handleBuild(); - virtual class dtNavMesh* getNavMesh() { return 0; } + virtual class InputGeom* getInputGeom() { return m_geom; } + virtual class dtNavMesh* getNavMesh() { return m_navMesh; } virtual float getAgentRadius() { return m_agentRadius; } virtual float getAgentHeight() { return m_agentHeight; } diff --git a/RecastDemo/Include/Sample_SoloMeshSimple.h b/RecastDemo/Include/Sample_SoloMeshSimple.h index 81cbb80f..defed4db 100644 --- a/RecastDemo/Include/Sample_SoloMeshSimple.h +++ b/RecastDemo/Include/Sample_SoloMeshSimple.h @@ -1,3 +1,21 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + #ifndef RECASTSAMPLESOLOMESHSIMPLE_H #define RECASTSAMPLESOLOMESHSIMPLE_H @@ -9,8 +27,6 @@ class Sample_SoloMeshSimple : public Sample //Sample_SoloMesh { protected: - dtNavMesh* m_navMesh; - bool m_keepInterResults; rcBuildTimes m_buildTimes; @@ -57,12 +73,8 @@ public: virtual void handleRender(); virtual void handleRenderOverlay(double* proj, double* model, int* view); - virtual void handleMeshChanged(const float* verts, int nverts, - const int* tris, const float* trinorms, int ntris, - const float* bmin, const float* bmax); + virtual void handleMeshChanged(class InputGeom* geom); virtual bool handleBuild(); - - virtual class dtNavMesh* getNavMesh() { return m_navMesh; } }; diff --git a/RecastDemo/Include/Sample_SoloMeshTiled.h b/RecastDemo/Include/Sample_SoloMeshTiled.h index 75fc1a98..d8e776aa 100644 --- a/RecastDemo/Include/Sample_SoloMeshTiled.h +++ b/RecastDemo/Include/Sample_SoloMeshTiled.h @@ -1,3 +1,21 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + #ifndef RECASTSAMPLESOLOMESHTILED_H #define RECASTSAMPLESOLOMESHTILED_H @@ -10,8 +28,6 @@ class Sample_SoloMeshTiled : public Sample { protected: - dtNavMesh* m_navMesh; - struct Tile { inline Tile() : chf(0), solid(0), cset(0), pmesh(0), dmesh(0), buildTime(0) {} @@ -39,7 +55,6 @@ protected: float m_tileSize; rcBuildTimes m_buildTimes; - rcChunkyTriMesh* m_chunkyMesh; rcPolyMesh* m_pmesh; rcPolyMeshDetail* m_dmesh; rcConfig m_cfg; @@ -87,12 +102,8 @@ public: virtual void handleRender(); virtual void handleRenderOverlay(double* proj, double* model, int* view); - virtual void handleMeshChanged(const float* verts, int nverts, - const int* tris, const float* trinorms, int ntris, - const float* bmin, const float* bmax); + virtual void handleMeshChanged(class InputGeom* geom); virtual bool handleBuild(); - - virtual class dtNavMesh* getNavMesh() { return m_navMesh; } }; diff --git a/RecastDemo/Include/Sample_TileMesh.h b/RecastDemo/Include/Sample_TileMesh.h index 7adcc4cb..f0ecb1dc 100644 --- a/RecastDemo/Include/Sample_TileMesh.h +++ b/RecastDemo/Include/Sample_TileMesh.h @@ -24,18 +24,14 @@ #include "Recast.h" #include "RecastLog.h" #include "ChunkyTriMesh.h" -#include "NavMeshTesterTool.h" class Sample_TileMesh : public Sample { protected: - bool m_keepInterResults; bool m_buildAll; rcBuildTimes m_buildTimes; - dtNavMesh* m_navMesh; - rcChunkyTriMesh* m_chunkyMesh; unsigned char* m_triflags; rcHeightfield* m_solid; rcCompactHeightfield* m_chf; @@ -68,12 +64,8 @@ public: virtual void handleDebugMode(); virtual void handleRender(); virtual void handleRenderOverlay(double* proj, double* model, int* view); - virtual void handleMeshChanged(const float* verts, int nverts, - const int* tris, const float* trinorms, int ntris, - const float* bmin, const float* bmax); + virtual void handleMeshChanged(class InputGeom* geom); virtual bool handleBuild(); - - virtual class dtNavMesh* getNavMesh() { return m_navMesh; } void buildTile(const float* pos); void removeTile(const float* pos); diff --git a/RecastDemo/Source/ExtraLinkTool.cpp b/RecastDemo/Source/ExtraLinkTool.cpp new file mode 100644 index 00000000..64191cde --- /dev/null +++ b/RecastDemo/Source/ExtraLinkTool.cpp @@ -0,0 +1,176 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include "SDL.h" +#include "SDL_opengl.h" +#include "imgui.h" +#include "ExtraLinkTool.h" +#include "InputGeom.h" +#include "Sample.h" +#include "Recast.h" +#include "RecastDebugDraw.h" +#include "DetourDebugDraw.h" + +#ifdef WIN32 +# define snprintf _snprintf +#endif + +static void drawCross(const float* p, const float s, const float dy) +{ + glBegin(GL_LINES); + glVertex3f(p[0]-s,p[1]+dy,p[2]); + glVertex3f(p[0]+s,p[1]+dy,p[2]); + glVertex3f(p[0],p[1]-s+dy,p[2]); + glVertex3f(p[0],p[1]+s+dy,p[2]); + glVertex3f(p[0],p[1]+dy,p[2]-s); + glVertex3f(p[0],p[1]+dy,p[2]+s); + glEnd(); +} + +ExtraLinkTool::ExtraLinkTool() : + m_sample(0), + m_hitPosSet(0) +{ +} + +ExtraLinkTool::~ExtraLinkTool() +{ +} + +void ExtraLinkTool::init(Sample* sample) +{ + m_sample = sample; +} + +void ExtraLinkTool::reset() +{ + m_hitPosSet = false; +} + +void ExtraLinkTool::handleMenu() +{ + if (m_hitPosSet) + { + imguiValue("Click to set link start."); + } + else + { + imguiValue("Click to set link end."); + } +} + +void ExtraLinkTool::handleClick(const float* p, bool shift) +{ + if (!m_sample) return; + InputGeom* geom = m_sample->getInputGeom(); + if (!geom) return; + + if (shift) + { + // Delete + float nearestDist = FLT_MAX; + int nearestIndex = -1; + for (int i = 0; i < geom->getExtraLinkCount(); ++i) + { + ExtraLink* link = geom->getExtraLink(i); + float d; + d = vdistSqr(p, link->spos); + if (d < nearestDist) + { + nearestDist = d; + nearestIndex = i; + } + d = vdistSqr(p, link->epos); + if (d < nearestDist) + { + nearestDist = d; + nearestIndex = i; + } + } + + if (nearestIndex != -1 && + sqrtf(nearestDist) < m_sample->getAgentRadius()) + { + geom->deleteExtraLink(nearestIndex); + } + } + else + { + // Create + if (!m_hitPosSet) + { + vcopy(m_hitPos, p); + m_hitPosSet = true; + } + else + { + geom->addExtraLink(m_hitPos, p); + m_hitPosSet = false; + } + } + +} + +void ExtraLinkTool::handleRender() +{ + if (m_hitPosSet) + { + const float s = m_sample->getAgentRadius(); + glColor4ub(0,0,0,128); + glLineWidth(2.0f); + drawCross(m_hitPos, s, 0.1f); + glLineWidth(1.0f); + } + + const float s = m_sample->getAgentRadius(); + + InputGeom* geom = m_sample->getInputGeom(); + if (!geom) return; + + DebugDrawGL dd; + const float linkCol[4] = {1,1,1,0.75f}; + for (int i = 0; i < geom->getExtraLinkCount(); ++i) + { + ExtraLink* link = geom->getExtraLink(i); + + duDebugDrawArc(&dd, link->spos, link->epos, linkCol, 2.0f); + + glLineWidth(2.0f); + glColor4ub(0,0,0,255); + drawCross(link->spos, s, 0.1f); + drawCross(link->epos, s, 0.1f); + glLineWidth(1.0f); + } +} + +void ExtraLinkTool::handleRenderOverlay(double* proj, double* model, int* view) +{ + GLdouble x, y, z; + + // Draw start and end point labels + if (m_hitPosSet && gluProject((GLdouble)m_hitPos[0], (GLdouble)m_hitPos[1], (GLdouble)m_hitPos[2], + model, proj, view, &x, &y, &z)) + { + imguiDrawText((int)x, (int)(y-25), IMGUI_ALIGN_CENTER, "Start", imguiRGBA(0,0,0,220)); + } +} diff --git a/RecastDemo/Source/InputGeom.cpp b/RecastDemo/Source/InputGeom.cpp new file mode 100644 index 00000000..db538d57 --- /dev/null +++ b/RecastDemo/Source/InputGeom.cpp @@ -0,0 +1,173 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#define _USE_MATH_DEFINES +#include +#include "Recast.h" +#include "RecastLog.h" +#include "InputGeom.h" +#include "ChunkyTriMesh.h" +#include "MeshLoaderObj.h" + + + +static bool intersectSegmentTriangle(const float* sp, const float* sq, + const float* a, const float* b, const float* c, + float &t) +{ + float v, w; + float ab[3], ac[3], qp[3], ap[3], norm[3], e[3]; + vsub(ab, b, a); + vsub(ac, c, a); + vsub(qp, sp, sq); + + // Compute triangle normal. Can be precalculated or cached if + // intersecting multiple segments against the same triangle + vcross(norm, ab, ac); + + // Compute denominator d. If d <= 0, segment is parallel to or points + // away from triangle, so exit early + float d = vdot(qp, norm); + if (d <= 0.0f) return false; + + // Compute intersection t value of pq with plane of triangle. A ray + // intersects iff 0 <= t. Segment intersects iff 0 <= t <= 1. Delay + // dividing by d until intersection has been found to pierce triangle + vsub(ap, sp, a); + t = vdot(ap, norm); + if (t < 0.0f) return false; + if (t > d) return false; // For segment; exclude this code line for a ray test + + // Compute barycentric coordinate components and test if within bounds + vcross(e, qp, ap); + v = vdot(ac, e); + if (v < 0.0f || v > d) return false; + w = -vdot(ab, e); + if (w < 0.0f || v + w > d) return false; + + // Segment/ray intersects triangle. Perform delayed division + t /= d; + + return true; +} + + + +InputGeom::InputGeom() : + m_chunkyMesh(0), + m_mesh(0), + m_nlinks(0) +{ +} + +InputGeom::~InputGeom() +{ + delete m_chunkyMesh; + delete m_mesh; +} + +bool InputGeom::loadMesh(const char* filepath) +{ + if (m_mesh) + { + delete m_chunkyMesh; + m_chunkyMesh = 0; + delete m_mesh; + m_mesh = 0; + m_nlinks = 0; + } + + m_mesh = new rcMeshLoaderObj; + if (!m_mesh) + { + if (rcGetLog()) + rcGetLog()->log(RC_LOG_ERROR, "loadMesh: Out of memory 'm_mesh'."); + return false; + } + if (!m_mesh->load(filepath)) + { + if (rcGetLog()) + rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Could not load '%s'", filepath); + return false; + } + + rcCalcBounds(m_mesh->getVerts(), m_mesh->getVertCount(), m_meshBMin, m_meshBMax); + + m_chunkyMesh = new rcChunkyTriMesh; + if (!m_chunkyMesh) + { + if (rcGetLog()) + rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Out of memory 'm_chunkyMesh'."); + return false; + } + if (!rcCreateChunkyTriMesh(m_mesh->getVerts(), m_mesh->getTris(), m_mesh->getTriCount(), 256, m_chunkyMesh)) + { + if (rcGetLog()) + rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Failed to build chunky mesh."); + return false; + } + + return true; +} + +bool InputGeom::raycastMesh(float* src, float* dst, float& tmin) +{ + float dir[3]; + vsub(dir, dst, src); + + int nt = m_mesh->getTriCount(); + const float* verts = m_mesh->getVerts(); + const float* normals = m_mesh->getNormals(); + const int* tris = m_mesh->getTris(); + tmin = 1.0f; + bool hit = false; + + for (int i = 0; i < nt*3; i += 3) + { + const float* n = &normals[i]; + if (vdot(dir, n) > 0) + continue; + + float t = 1; + if (intersectSegmentTriangle(src, dst, + &verts[tris[i]*3], + &verts[tris[i+1]*3], + &verts[tris[i+2]*3], t)) + { + if (t < tmin) + tmin = t; + hit = true; + } + } + + return hit; +} + +void InputGeom::addExtraLink(const float* spos, const float* epos) +{ + if (m_nlinks >= MAX_LINKS) return; + ExtraLink* link = &m_links[m_nlinks++]; + vcopy(link->spos, spos); + vcopy(link->epos, epos); +} + +void InputGeom::deleteExtraLink(int i) +{ + m_nlinks--; + m_links[i] = m_links[m_nlinks]; +} diff --git a/RecastDemo/Source/NavMeshTesterTool.cpp b/RecastDemo/Source/NavMeshTesterTool.cpp index 6e6b68cf..4fbed966 100644 --- a/RecastDemo/Source/NavMeshTesterTool.cpp +++ b/RecastDemo/Source/NavMeshTesterTool.cpp @@ -1,3 +1,21 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + #define _USE_MATH_DEFINES #include #include diff --git a/RecastDemo/Source/Sample.cpp b/RecastDemo/Source/Sample.cpp index 50154c8c..4789e956 100644 --- a/RecastDemo/Source/Sample.cpp +++ b/RecastDemo/Source/Sample.cpp @@ -1,7 +1,26 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + #define _USE_MATH_DEFINES #include #include #include "Sample.h" +#include "InputGeom.h" #include "Recast.h" #include "RecastDebugDraw.h" #include "imgui.h" @@ -55,11 +74,8 @@ void DebugDrawGL::end() Sample::Sample() : - m_verts(0), - m_nverts(0), - m_tris(0), - m_trinorms(0), - m_ntris(0), + m_geom(0), + m_navMesh(0), m_tool(0) { resetCommonSettings(); @@ -67,6 +83,7 @@ Sample::Sample() : Sample::~Sample() { + delete m_navMesh; delete m_tool; } @@ -92,33 +109,28 @@ void Sample::handleDebugMode() void Sample::handleRender() { - if (!m_verts || !m_tris || !m_trinorms) + if (!m_geom) return; DebugDrawGL dd; // Draw mesh - duDebugDrawTriMesh(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); + duDebugDrawTriMesh(&dd, m_geom->getMesh()->getVerts(), m_geom->getMesh()->getVertCount(), + m_geom->getMesh()->getTris(), m_geom->getMesh()->getNormals(), m_geom->getMesh()->getTriCount(), 0); // Draw bounds + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMax(); float col[4] = {1,1,1,0.5f}; - duDebugDrawBoxWire(&dd, m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); + duDebugDrawBoxWire(&dd, bmin[0],bmin[1],bmin[2], bmax[0],bmax[1],bmax[2], col); } void Sample::handleRenderOverlay(double* proj, double* model, int* view) { } -void Sample::handleMeshChanged(const float* verts, int nverts, - const int* tris, const float* trinorms, int ntris, - const float* bmin, const float* bmax) +void Sample::handleMeshChanged(InputGeom* geom) { - m_verts = verts; - m_nverts = nverts; - m_tris = tris; - m_trinorms = trinorms; - m_ntris = ntris; - vcopy(m_bmin, bmin); - vcopy(m_bmax, bmax); + m_geom = geom; } void Sample::resetCommonSettings() @@ -144,11 +156,16 @@ void Sample::handleCommonSettings() imguiSlider("Cell Size", &m_cellSize, 0.1f, 1.0f, 0.01f); imguiSlider("Cell Height", &m_cellHeight, 0.1f, 1.0f, 0.01f); - int gw = 0, gh = 0; - rcCalcGridSize(m_bmin, m_bmax, m_cellSize, &gw, &gh); - char text[64]; - snprintf(text, 64, "Voxels %d x %d", gw, gh); - imguiValue(text); + if (m_geom) + { + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMax(); + int gw = 0, gh = 0; + rcCalcGridSize(bmin, bmax, m_cellSize, &gw, &gh); + char text[64]; + snprintf(text, 64, "Voxels %d x %d", gw, gh); + imguiValue(text); + } imguiSeparator(); imguiLabel("Agent"); diff --git a/RecastDemo/Source/Sample_SoloMeshSimple.cpp b/RecastDemo/Source/Sample_SoloMeshSimple.cpp index b5dc99e8..dcafe3d9 100644 --- a/RecastDemo/Source/Sample_SoloMeshSimple.cpp +++ b/RecastDemo/Source/Sample_SoloMeshSimple.cpp @@ -1,3 +1,21 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + #define _USE_MATH_DEFINES #include #include @@ -5,6 +23,7 @@ #include "SDL.h" #include "SDL_opengl.h" #include "imgui.h" +#include "InputGeom.h" #include "Sample.h" #include "Sample_SoloMeshSimple.h" #include "Recast.h" @@ -15,6 +34,7 @@ #include "DetourNavMeshBuilder.h" #include "DetourDebugDraw.h" #include "NavMeshTesterTool.h" +#include "ExtraLinkTool.h" #ifdef WIN32 # define snprintf _snprintf @@ -22,7 +42,6 @@ Sample_SoloMeshSimple::Sample_SoloMeshSimple() : - m_navMesh(0), m_keepInterResults(false), m_triflags(0), m_solid(0), @@ -70,6 +89,19 @@ void Sample_SoloMeshSimple::handleSettings() void Sample_SoloMeshSimple::handleTools() { + int type = !m_tool ? TOOL_NONE : m_tool->type(); + + if (imguiCheck("Test Navmesh", type == TOOL_NAVMESH_TESTER)) + { + setTool(new NavMeshTesterTool); + } + if (imguiCheck("Create Extra Links", type == TOOL_EXTRA_LINK)) + { + setTool(new ExtraLinkTool); + } + + imguiSeparator(); + if (m_tool) m_tool->handleMenu(); } @@ -81,7 +113,7 @@ void Sample_SoloMeshSimple::handleDebugMode() for (int i = 0; i < MAX_DRAWMODE; ++i) valid[i] = false; - if (m_verts && m_tris) + if (m_geom) { valid[DRAWMODE_NAVMESH] = m_navMesh != 0; valid[DRAWMODE_NAVMESH_TRANS] = m_navMesh != 0; @@ -151,7 +183,7 @@ void Sample_SoloMeshSimple::handleDebugMode() void Sample_SoloMeshSimple::handleRender() { - if (!m_verts || !m_tris || !m_trinorms) + if (!m_geom || !m_geom->getMesh()) return; float col[4]; @@ -164,20 +196,25 @@ void Sample_SoloMeshSimple::handleRender() if (m_drawMode == DRAWMODE_MESH) { // Draw mesh - duDebugDrawTriMeshSlope(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, m_agentMaxSlope); + duDebugDrawTriMeshSlope(&dd, m_geom->getMesh()->getVerts(), m_geom->getMesh()->getVertCount(), + m_geom->getMesh()->getTris(), m_geom->getMesh()->getNormals(), m_geom->getMesh()->getTriCount(), + m_agentMaxSlope); } else if (m_drawMode != DRAWMODE_NAVMESH_TRANS) { // Draw mesh - duDebugDrawTriMesh(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); + duDebugDrawTriMesh(&dd, m_geom->getMesh()->getVerts(), m_geom->getMesh()->getVertCount(), + m_geom->getMesh()->getTris(), m_geom->getMesh()->getNormals(), m_geom->getMesh()->getTriCount(), 0); } glDisable(GL_FOG); glDepthMask(GL_FALSE); // Draw bounds + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMax(); col[0] = 1; col[1] = 1; col[2] = 1; col[3] = 0.5f; - duDebugDrawBoxWire(&dd, m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); + duDebugDrawBoxWire(&dd, bmin[0],bmin[1],bmin[2], bmax[0],bmax[1],bmax[2], col); if (m_navMesh && (m_drawMode == DRAWMODE_NAVMESH || @@ -271,11 +308,9 @@ void Sample_SoloMeshSimple::handleRenderOverlay(double* proj, double* model, int m_tool->handleRenderOverlay(proj, model, view); } -void Sample_SoloMeshSimple::handleMeshChanged(const float* verts, int nverts, - const int* tris, const float* trinorms, int ntris, - const float* bmin, const float* bmax) +void Sample_SoloMeshSimple::handleMeshChanged(class InputGeom* geom) { - Sample::handleMeshChanged(verts, nverts, tris, trinorms, ntris, bmin, bmax); + Sample::handleMeshChanged(geom); delete m_navMesh; m_navMesh = 0; if (m_tool) @@ -287,7 +322,7 @@ void Sample_SoloMeshSimple::handleMeshChanged(const float* verts, int nverts, bool Sample_SoloMeshSimple::handleBuild() { - if (!m_verts || ! m_tris) + if (!m_geom || !m_geom->getMesh()) { if (rcGetLog()) rcGetLog()->log(RC_LOG_ERROR, "buildNavigation: Input mesh is not specified."); @@ -296,6 +331,13 @@ bool Sample_SoloMeshSimple::handleBuild() cleanup(); + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMin(); + const float* verts = m_geom->getMesh()->getVerts(); + const int nverts = m_geom->getMesh()->getVertCount(); + const int* tris = m_geom->getMesh()->getTris(); + const int ntris = m_geom->getMesh()->getTriCount(); + // // Step 1. Initialize build config. // @@ -319,8 +361,8 @@ bool Sample_SoloMeshSimple::handleBuild() // Set the area where the navigation will be build. // Here the bounds of the input mesh are used, but the // area could be specified by an user defined box, etc. - vcopy(m_cfg.bmin, m_bmin); - vcopy(m_cfg.bmax, m_bmax); + vcopy(m_cfg.bmin, bmin); + vcopy(m_cfg.bmax, bmax); rcCalcGridSize(m_cfg.bmin, m_cfg.bmax, m_cfg.cs, &m_cfg.width, &m_cfg.height); // Reset build times gathering. @@ -334,7 +376,7 @@ bool Sample_SoloMeshSimple::handleBuild() { rcGetLog()->log(RC_LOG_PROGRESS, "Building navigation:"); rcGetLog()->log(RC_LOG_PROGRESS, " - %d x %d cells", m_cfg.width, m_cfg.height); - rcGetLog()->log(RC_LOG_PROGRESS, " - %.1fK verts, %.1fK tris", m_nverts/1000.0f, m_ntris/1000.0f); + rcGetLog()->log(RC_LOG_PROGRESS, " - %.1fK verts, %.1fK tris", nverts/1000.0f, ntris/1000.0f); } // @@ -359,20 +401,20 @@ bool Sample_SoloMeshSimple::handleBuild() // Allocate array that can hold triangle flags. // If you have multiple meshes you need to process, allocate // and array which can hold the max number of triangles you need to process. - m_triflags = new unsigned char[m_ntris]; + m_triflags = new unsigned char[ntris]; if (!m_triflags) { if (rcGetLog()) - rcGetLog()->log(RC_LOG_ERROR, "buildNavigation: Out of memory 'triangleFlags' (%d).", m_ntris); + rcGetLog()->log(RC_LOG_ERROR, "buildNavigation: Out of memory 'triangleFlags' (%d).", ntris); return false; } // Find triangles which are walkable based on their slope and rasterize them. // If your input data is multiple meshes, you can transform them here, calculate // the flags for each of the meshes and rasterize them. - memset(m_triflags, 0, m_ntris*sizeof(unsigned char)); - rcMarkWalkableTriangles(m_cfg.walkableSlopeAngle, m_verts, m_nverts, m_tris, m_ntris, m_triflags); - rcRasterizeTriangles(m_verts, m_nverts, m_tris, m_triflags, m_ntris, *m_solid); + memset(m_triflags, 0, ntris*sizeof(unsigned char)); + rcMarkWalkableTriangles(m_cfg.walkableSlopeAngle, verts, nverts, tris, ntris, m_triflags); + rcRasterizeTriangles(verts, nverts, tris, m_triflags, ntris, *m_solid); if (!m_keepInterResults) { diff --git a/RecastDemo/Source/Sample_SoloMeshTiled.cpp b/RecastDemo/Source/Sample_SoloMeshTiled.cpp index 9757204f..c7bd0460 100644 --- a/RecastDemo/Source/Sample_SoloMeshTiled.cpp +++ b/RecastDemo/Source/Sample_SoloMeshTiled.cpp @@ -1,3 +1,21 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + #define _USE_MATH_DEFINES #include #include @@ -5,6 +23,7 @@ #include "SDL.h" #include "SDL_opengl.h" #include "imgui.h" +#include "InputGeom.h" #include "Sample.h" #include "Sample_SoloMeshTiled.h" #include "Recast.h" @@ -14,17 +33,16 @@ #include "DetourNavMeshBuilder.h" #include "DetourDebugDraw.h" #include "NavMeshTesterTool.h" +#include "ExtraLinkTool.h" #ifdef WIN32 # define snprintf _snprintf #endif Sample_SoloMeshTiled::Sample_SoloMeshTiled() : - m_navMesh(0), m_measurePerTileTimings(false), m_keepInterResults(false), m_tileSize(64), - m_chunkyMesh(0), m_pmesh(0), m_dmesh(0), m_tileSet(0), @@ -42,8 +60,6 @@ Sample_SoloMeshTiled::~Sample_SoloMeshTiled() void Sample_SoloMeshTiled::cleanup() { - delete m_chunkyMesh; - m_chunkyMesh = 0; delete m_tileSet; m_tileSet = 0; delete m_pmesh; @@ -63,14 +79,19 @@ void Sample_SoloMeshTiled::handleSettings() imguiLabel("Tiling"); imguiSlider("TileSize", &m_tileSize, 16.0f, 1024.0f, 16.0f); - char text[64]; - int gw = 0, gh = 0; - rcCalcGridSize(m_bmin, m_bmax, m_cellSize, &gw, &gh); - const int ts = (int)m_tileSize; - const int tw = (gw + ts-1) / ts; - const int th = (gh + ts-1) / ts; - snprintf(text, 64, "Tiles %d x %d", tw, th); - imguiValue(text); + if (m_geom) + { + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMax(); + char text[64]; + int gw = 0, gh = 0; + rcCalcGridSize(bmin, bmax, m_cellSize, &gw, &gh); + const int ts = (int)m_tileSize; + const int tw = (gw + ts-1) / ts; + const int th = (gh + ts-1) / ts; + snprintf(text, 64, "Tiles %d x %d", tw, th); + imguiValue(text); + } imguiSeparator(); if (imguiCheck("Keep Itermediate Results", m_keepInterResults)) @@ -83,6 +104,19 @@ void Sample_SoloMeshTiled::handleSettings() void Sample_SoloMeshTiled::handleTools() { + int type = !m_tool ? TOOL_NONE : m_tool->type(); + + if (imguiCheck("Test Navmesh", type == TOOL_NAVMESH_TESTER)) + { + setTool(new NavMeshTesterTool); + } + if (imguiCheck("Create Extra Links", type == TOOL_EXTRA_LINK)) + { + setTool(new ExtraLinkTool); + } + + imguiSeparator(); + if (m_tool) m_tool->handleMenu(); } @@ -113,7 +147,7 @@ void Sample_SoloMeshTiled::handleDebugMode() if (m_pmesh) hasPmesh = true; if (m_dmesh) hasDmesh = true; - if (m_verts && m_tris) + if (m_geom) { valid[DRAWMODE_NAVMESH] = m_navMesh != 0; valid[DRAWMODE_NAVMESH_TRANS] = m_navMesh != 0; @@ -183,7 +217,7 @@ void Sample_SoloMeshTiled::handleDebugMode() void Sample_SoloMeshTiled::handleRender() { - if (!m_verts || !m_tris || !m_trinorms) + if (!m_geom || !m_geom->getMesh()) return; float col[4]; @@ -196,25 +230,30 @@ void Sample_SoloMeshTiled::handleRender() if (m_drawMode == DRAWMODE_MESH) { // Draw mesh - duDebugDrawTriMeshSlope(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, m_agentMaxSlope); + duDebugDrawTriMeshSlope(&dd, m_geom->getMesh()->getVerts(), m_geom->getMesh()->getVertCount(), + m_geom->getMesh()->getTris(), m_geom->getMesh()->getNormals(), m_geom->getMesh()->getTriCount(), + m_agentMaxSlope); } else if (m_drawMode != DRAWMODE_NAVMESH_TRANS) { // Draw mesh - duDebugDrawTriMesh(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); + duDebugDrawTriMesh(&dd, m_geom->getMesh()->getVerts(), m_geom->getMesh()->getVertCount(), + m_geom->getMesh()->getTris(), m_geom->getMesh()->getNormals(), m_geom->getMesh()->getTriCount(), 0); } glDisable(GL_FOG); glDepthMask(GL_FALSE); // Draw bounds + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMax(); col[0] = 1; col[1] = 1; col[2] = 1; col[3] = 0.5f; - duDebugDrawBoxWire(&dd, m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); + duDebugDrawBoxWire(&dd, bmin[0],bmin[1],bmin[2], bmax[0],bmax[1],bmax[2], col); // Tiling grid. const int ts = (int)m_tileSize; int gw = 0, gh = 0; - rcCalcGridSize(m_bmin, m_bmax, m_cellSize, &gw, &gh); + rcCalcGridSize(bmin, bmax, m_cellSize, &gw, &gh); int tw = (gw + ts-1) / ts; int th = (gh + ts-1) / ts; const float s = ts*m_cellSize; @@ -225,9 +264,9 @@ void Sample_SoloMeshTiled::handleRender() for (int x = 0; x < tw; ++x) { float fx, fy, fz; - fx = m_bmin[0] + x*s; - fy = m_bmin[1]; - fz = m_bmin[2] + y*s; + fx = bmin[0] + x*s; + fy = bmin[1]; + fz = bmin[2] + y*s; glVertex3f(fx,fy,fz); glVertex3f(fx+s,fy,fz); @@ -543,11 +582,9 @@ void Sample_SoloMeshTiled::handleRenderOverlay(double* proj, double* model, int* m_tool->handleRenderOverlay(proj, model, view); } -void Sample_SoloMeshTiled::handleMeshChanged(const float* verts, int nverts, - const int* tris, const float* trinorms, int ntris, - const float* bmin, const float* bmax) +void Sample_SoloMeshTiled::handleMeshChanged(class InputGeom* geom) { - Sample::handleMeshChanged(verts, nverts, tris, trinorms, ntris, bmin, bmax); + Sample::handleMeshChanged(geom); m_statTimePerTileSamples = 0; m_statPolysPerTileSamples = 0; if (m_tool) @@ -559,7 +596,7 @@ void Sample_SoloMeshTiled::handleMeshChanged(const float* verts, int nverts, bool Sample_SoloMeshTiled::handleBuild() { - if (!m_verts || ! m_tris) + if (!m_geom || !m_geom->getMesh() || !m_geom->getChunkyMesh()) { if (rcGetLog()) rcGetLog()->log(RC_LOG_ERROR, "buildNavigation: Input mesh is not specified."); @@ -576,6 +613,13 @@ bool Sample_SoloMeshTiled::handleBuild() cleanup(); + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMin(); + const float* verts = m_geom->getMesh()->getVerts(); + const int nverts = m_geom->getMesh()->getVertCount(); + const int ntris = m_geom->getMesh()->getTriCount(); + const rcChunkyTriMesh* chunkyMesh = m_geom->getChunkyMesh(); + // Init build configuration from GUI memset(&m_cfg, 0, sizeof(m_cfg)); m_cfg.cs = m_cellSize; @@ -597,8 +641,8 @@ bool Sample_SoloMeshTiled::handleBuild() // Set the area where the navigation will be build. // Here the bounds of the input mesh are used, but the // area could be specified by an user defined box, etc. - vcopy(m_cfg.bmin, m_bmin); - vcopy(m_cfg.bmax, m_bmax); + vcopy(m_cfg.bmin, bmin); + vcopy(m_cfg.bmax, bmax); rcCalcGridSize(m_cfg.bmin, m_cfg.bmax, m_cfg.cs, &m_cfg.width, &m_cfg.height); // Reset build times gathering. @@ -629,30 +673,13 @@ bool Sample_SoloMeshTiled::handleBuild() rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Out of memory 'tileSet->tiles' (%d).", m_tileSet->height * m_tileSet->width); return false; } - - // Build chunky trimesh for local polygon queries. - rcTimeVal chunkyStartTime = rcGetPerformanceTimer(); - m_chunkyMesh = new rcChunkyTriMesh; - if (!m_chunkyMesh) - { - if (rcGetLog()) - rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Out of memory 'm_chunkyMesh'."); - return false; - } - if (!rcCreateChunkyTriMesh(m_verts, m_tris, m_ntris, 256, m_chunkyMesh)) - { - if (rcGetLog()) - rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Could not build chunky mesh."); - return false; - } - rcTimeVal chunkyEndTime = rcGetPerformanceTimer(); if (rcGetLog()) { rcGetLog()->log(RC_LOG_PROGRESS, "Building navigation:"); rcGetLog()->log(RC_LOG_PROGRESS, " - %d x %d cells", m_cfg.width, m_cfg.height); rcGetLog()->log(RC_LOG_PROGRESS, " - %d x %d tiles", m_tileSet->width, m_tileSet->height); - rcGetLog()->log(RC_LOG_PROGRESS, " - %.1f verts, %.1f tris", m_nverts/1000.0f, m_ntris/1000.0f); + rcGetLog()->log(RC_LOG_PROGRESS, " - %.1f verts, %.1f tris", nverts/1000.0f, ntris/1000.0f); } // Initialize per tile config. @@ -662,11 +689,14 @@ bool Sample_SoloMeshTiled::handleBuild() tileCfg.height = m_cfg.tileSize + m_cfg.borderSize*2; // Allocate array that can hold triangle flags for all geom chunks. - unsigned char* triangleFlags = new unsigned char[m_chunkyMesh->maxTrisPerChunk]; + unsigned char* triangleFlags = new unsigned char[chunkyMesh->maxTrisPerChunk]; if (!triangleFlags) { if (rcGetLog()) - rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Out of memory 'triangleFlags' (%d).", m_chunkyMesh->maxTrisPerChunk); + { + rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Out of memory 'triangleFlags' (%d).", + chunkyMesh->maxTrisPerChunk); + } return false; } @@ -699,7 +729,7 @@ bool Sample_SoloMeshTiled::handleBuild() tbmax[0] = tileCfg.bmax[0]; tbmax[1] = tileCfg.bmax[2]; int cid[256];// TODO: Make grow when returning too many items. - const int ncid = rcGetChunksInRect(m_chunkyMesh, tbmin, tbmax, cid, 256); + const int ncid = rcGetChunksInRect(chunkyMesh, tbmin, tbmax, cid, 256); if (!ncid) continue; @@ -719,15 +749,15 @@ bool Sample_SoloMeshTiled::handleBuild() for (int i = 0; i < ncid; ++i) { - const rcChunkyTriMeshNode& node = m_chunkyMesh->nodes[cid[i]]; - const int* tris = &m_chunkyMesh->tris[node.i*3]; + const rcChunkyTriMeshNode& node = chunkyMesh->nodes[cid[i]]; + const int* tris = &chunkyMesh->tris[node.i*3]; const int ntris = node.n; memset(triangleFlags, 0, ntris*sizeof(unsigned char)); rcMarkWalkableTriangles(tileCfg.walkableSlopeAngle, - m_verts, m_nverts, tris, ntris, triangleFlags); + verts, nverts, tris, ntris, triangleFlags); - rcRasterizeTriangles(m_verts, m_nverts, tris, triangleFlags, ntris, *solid); + rcRasterizeTriangles(verts, nverts, tris, triangleFlags, ntris, *solid); } rcFilterLedgeSpans(tileCfg.walkableHeight, tileCfg.walkableClimb, *solid); @@ -756,7 +786,8 @@ bool Sample_SoloMeshTiled::handleBuild() continue; } - if (!rcBuildRegions(*chf, tileCfg.walkableRadius, tileCfg.borderSize, tileCfg.minRegionSize, tileCfg.mergeRegionSize)) + if (!rcBuildRegions(*chf, tileCfg.walkableRadius, tileCfg.borderSize, + tileCfg.minRegionSize, tileCfg.mergeRegionSize)) { if (rcGetLog()) rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: [%d,%d] Could not build regions.", x, y); @@ -958,8 +989,6 @@ bool Sample_SoloMeshTiled::handleBuild() { const float pc = 100.0f / rcGetDeltaTimeUsec(totStartTime, totEndTime); - rcGetLog()->log(RC_LOG_PROGRESS, "Chunky Mesh: %.1fms (%.1f%%)", rcGetDeltaTimeUsec(chunkyStartTime, chunkyEndTime)/1000.0f, rcGetDeltaTimeUsec(chunkyStartTime, chunkyEndTime)*pc); - rcGetLog()->log(RC_LOG_PROGRESS, "Rasterize: %.1fms (%.1f%%)", m_buildTimes.rasterizeTriangles/1000.0f, m_buildTimes.rasterizeTriangles*pc); rcGetLog()->log(RC_LOG_PROGRESS, "Build Compact: %.1fms (%.1f%%)", m_buildTimes.buildCompact/1000.0f, m_buildTimes.buildCompact*pc); diff --git a/RecastDemo/Source/Sample_TileMesh.cpp b/RecastDemo/Source/Sample_TileMesh.cpp index 08854d65..e056f3a9 100644 --- a/RecastDemo/Source/Sample_TileMesh.cpp +++ b/RecastDemo/Source/Sample_TileMesh.cpp @@ -23,6 +23,7 @@ #include "SDL.h" #include "SDL_opengl.h" #include "imgui.h" +#include "InputGeom.h" #include "Sample.h" #include "Sample_TileMesh.h" #include "Recast.h" @@ -31,6 +32,8 @@ #include "DetourNavMesh.h" #include "DetourNavMeshBuilder.h" #include "DetourDebugDraw.h" +#include "NavMeshTesterTool.h" +#include "ExtraLinkTool.h" #ifdef WIN32 # define snprintf _snprintf @@ -150,8 +153,6 @@ public: Sample_TileMesh::Sample_TileMesh() : m_keepInterResults(false), m_buildAll(true), - m_navMesh(0), - m_chunkyMesh(0), m_triflags(0), m_solid(0), m_chf(0), @@ -175,8 +176,6 @@ Sample_TileMesh::Sample_TileMesh() : Sample_TileMesh::~Sample_TileMesh() { cleanup(); - delete m_navMesh; - delete m_chunkyMesh; } void Sample_TileMesh::cleanup() @@ -193,6 +192,8 @@ void Sample_TileMesh::cleanup() m_pmesh = 0; delete m_dmesh; m_dmesh = 0; + delete m_navMesh; + m_navMesh = 0; } void Sample_TileMesh::handleSettings() @@ -208,39 +209,53 @@ void Sample_TileMesh::handleSettings() imguiLabel("Tiling"); imguiSlider("TileSize", &m_tileSize, 16.0f, 1024.0f, 16.0f); - char text[64]; - int gw = 0, gh = 0; - rcCalcGridSize(m_bmin, m_bmax, m_cellSize, &gw, &gh); - const int ts = (int)m_tileSize; - const int tw = (gw + ts-1) / ts; - const int th = (gh + ts-1) / ts; - snprintf(text, 64, "Tiles %d x %d", tw, th); - imguiValue(text); + if (m_geom) + { + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMax(); + char text[64]; + int gw = 0, gh = 0; + rcCalcGridSize(bmin, bmax, m_cellSize, &gw, &gh); + const int ts = (int)m_tileSize; + const int tw = (gw + ts-1) / ts; + const int th = (gh + ts-1) / ts; + snprintf(text, 64, "Tiles %d x %d", tw, th); + imguiValue(text); - // Max tiles and max polys affect how the tile IDs are caculated. - // There are 22 bits available for identifying a tile and a polygon. - int tileBits = rcMin((int)ilog2(nextPow2(tw*th)), 14); - if (tileBits > 14) tileBits = 14; - int polyBits = 22 - tileBits; - m_maxTiles = 1 << tileBits; - m_maxPolysPerTile = 1 << polyBits; - snprintf(text, 64, "Max Tiles %d", m_maxTiles); - imguiValue(text); - snprintf(text, 64, "Max Polys %d", m_maxPolysPerTile); - imguiValue(text); + // Max tiles and max polys affect how the tile IDs are caculated. + // There are 22 bits available for identifying a tile and a polygon. + int tileBits = rcMin((int)ilog2(nextPow2(tw*th)), 14); + if (tileBits > 14) tileBits = 14; + int polyBits = 22 - tileBits; + m_maxTiles = 1 << tileBits; + m_maxPolysPerTile = 1 << polyBits; + snprintf(text, 64, "Max Tiles %d", m_maxTiles); + imguiValue(text); + snprintf(text, 64, "Max Polys %d", m_maxPolysPerTile); + imguiValue(text); + } + else + { + m_maxTiles = 0; + m_maxPolysPerTile = 0; + } } void Sample_TileMesh::handleTools() { int type = !m_tool ? TOOL_NONE : m_tool->type(); + if (imguiCheck("Test Navmesh", type == TOOL_NAVMESH_TESTER)) + { + setTool(new NavMeshTesterTool); + } if (imguiCheck("Create Tiles", type == TOOL_TILE_EDIT)) { setTool(new NavMeshTileTool); } - if (imguiCheck("Test Navmesh", type == TOOL_NAVMESH_TESTER)) + if (imguiCheck("Create Extra Links", type == TOOL_EXTRA_LINK)) { - setTool(new NavMeshTesterTool); + setTool(new ExtraLinkTool); } imguiSeparator(); @@ -288,24 +303,27 @@ static void getPolyCenter(dtNavMesh* navMesh, dtPolyRef ref, float* center) void Sample_TileMesh::handleRender() { - if (!m_verts || !m_tris || !m_trinorms) + if (!m_geom || !m_geom->getMesh()) return; DebugDrawGL dd; // Draw mesh - duDebugDrawTriMesh(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); + duDebugDrawTriMesh(&dd, m_geom->getMesh()->getVerts(), m_geom->getMesh()->getVertCount(), + m_geom->getMesh()->getTris(), m_geom->getMesh()->getNormals(), m_geom->getMesh()->getTriCount(), 0); glDepthMask(GL_FALSE); // Draw bounds - float col[4] = {1,1,1,0.5f}; - duDebugDrawBoxWire(&dd, m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMax(); + const float col[4] = {1,1,1,0.5f}; + duDebugDrawBoxWire(&dd, bmin[0],bmin[1],bmin[2], bmax[0],bmax[1],bmax[2], col); // Tiling grid. const int ts = (int)m_tileSize; int gw = 0, gh = 0; - rcCalcGridSize(m_bmin, m_bmax, m_cellSize, &gw, &gh); + rcCalcGridSize(bmin, bmax, m_cellSize, &gw, &gh); int tw = (gw + ts-1) / ts; int th = (gh + ts-1) / ts; const float s = ts*m_cellSize; @@ -316,9 +334,9 @@ void Sample_TileMesh::handleRender() for (int x = 0; x < tw; ++x) { float fx, fy, fz; - fx = m_bmin[0] + x*s; - fy = m_bmin[1]; - fz = m_bmin[2] + y*s; + fx = bmin[0] + x*s; + fy = bmin[1]; + fz = bmin[2] + y*s; glVertex3f(fx,fy,fz); glVertex3f(fx+s,fy,fz); @@ -368,22 +386,10 @@ void Sample_TileMesh::handleRenderOverlay(double* proj, double* model, int* view m_tool->handleRenderOverlay(proj, model, view); } -void Sample_TileMesh::handleMeshChanged(const float* verts, int nverts, - const int* tris, const float* trinorms, int ntris, - const float* bmin, const float* bmax) +void Sample_TileMesh::handleMeshChanged(class InputGeom* geom) { - m_verts = verts; - m_nverts = nverts; - m_tris = tris; - m_trinorms = trinorms; - m_ntris = ntris; - vcopy(m_bmin, bmin); - vcopy(m_bmax, bmax); - - delete m_chunkyMesh; - m_chunkyMesh = 0; - delete m_navMesh; - m_navMesh = 0; + Sample::handleMeshChanged(geom); + cleanup(); if (m_tool) @@ -395,7 +401,7 @@ void Sample_TileMesh::handleMeshChanged(const float* verts, int nverts, bool Sample_TileMesh::handleBuild() { - if (!m_verts || !m_tris) + if (!m_geom || !m_geom->getMesh()) { if (rcGetLog()) rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: No vertices and triangles."); @@ -410,29 +416,18 @@ bool Sample_TileMesh::handleBuild() rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Could not allocate navmesh."); return false; } - if (!m_navMesh->init(m_bmin, m_tileSize*m_cellSize, m_tileSize*m_cellSize, m_agentMaxClimb*m_cellHeight, m_maxTiles, m_maxPolysPerTile, 2048)) + const float* bmin = m_geom->getMeshBoundsMin(); + const float tileWorldWidth = m_tileSize*m_cellSize; + const float tileWorldHeight = m_tileSize*m_cellSize; + const float portalHeight = m_agentMaxClimb*m_cellHeight; + + if (!m_navMesh->init(bmin, tileWorldWidth, tileWorldHeight, portalHeight, m_maxTiles, m_maxPolysPerTile, 2048)) { if (rcGetLog()) rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Could not init navmesh."); return false; } - // Build chunky mesh. - delete m_chunkyMesh; - m_chunkyMesh = new rcChunkyTriMesh; - if (!m_chunkyMesh) - { - if (rcGetLog()) - rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Out of memory 'm_chunkyMesh'."); - return false; - } - if (!rcCreateChunkyTriMesh(m_verts, m_tris, m_ntris, 256, m_chunkyMesh)) - { - if (rcGetLog()) - rcGetLog()->log(RC_LOG_ERROR, "buildTiledNavigation: Could not build chunky mesh."); - return false; - } - if (m_buildAll) buildAllTiles(); @@ -447,19 +442,22 @@ void Sample_TileMesh::buildTile(const float* pos) if (!m_navMesh) return; + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMax(); + const float ts = m_tileSize*m_cellSize; - const int tx = (int)floorf((pos[0]-m_bmin[0]) / ts); - const int ty = (int)floorf((pos[2]-m_bmin[2]) / ts); + const int tx = (int)floorf((pos[0] - bmin[0]) / ts); + const int ty = (int)floorf((pos[2] - bmin[2]) / ts); if (tx < 0 || ty < 0) return; - m_tileBmin[0] = m_bmin[0] + tx*ts; - m_tileBmin[1] = m_bmin[1]; - m_tileBmin[2] = m_bmin[2] + ty*ts; + m_tileBmin[0] = bmin[0] + tx*ts; + m_tileBmin[1] = bmin[1]; + m_tileBmin[2] = bmin[2] + ty*ts; - m_tileBmax[0] = m_bmin[0] + (tx+1)*ts; - m_tileBmax[1] = m_bmax[1]; - m_tileBmax[2] = m_bmin[2] + (ty+1)*ts; + m_tileBmax[0] = bmin[0] + (tx+1)*ts; + m_tileBmax[1] = bmax[1]; + m_tileBmax[2] = bmin[2] + (ty+1)*ts; m_tileCol[0] = 0.3f; m_tileCol[1] = 0.8f; m_tileCol[2] = 0; m_tileCol[3] = 1; @@ -482,17 +480,22 @@ void Sample_TileMesh::removeTile(const float* pos) if (!m_navMesh) return; + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMax(); + const float ts = m_tileSize*m_cellSize; - const int tx = (int)floorf((pos[0]-m_bmin[0]) / ts); - const int ty = (int)floorf((pos[2]-m_bmin[2]) / ts); + const int tx = (int)floorf((pos[0] - bmin[0]) / ts); + const int ty = (int)floorf((pos[2] - bmin[2]) / ts); + if (tx < 0 || ty < 0) + return; - m_tileBmin[0] = m_bmin[0] + tx*ts; - m_tileBmin[1] = m_bmin[1]; - m_tileBmin[2] = m_bmin[2] + ty*ts; + m_tileBmin[0] = bmin[0] + tx*ts; + m_tileBmin[1] = bmin[1]; + m_tileBmin[2] = bmin[2] + ty*ts; - m_tileBmax[0] = m_bmin[0] + (tx+1)*ts; - m_tileBmax[1] = m_bmax[1]; - m_tileBmax[2] = m_bmin[2] + (ty+1)*ts; + m_tileBmax[0] = bmin[0] + (tx+1)*ts; + m_tileBmax[1] = bmax[1]; + m_tileBmax[2] = bmin[2] + (ty+1)*ts; m_tileCol[0] = 0.8f; m_tileCol[1] = 0.1f; m_tileCol[2] = 0; m_tileCol[3] = 1; @@ -504,8 +507,10 @@ void Sample_TileMesh::removeTile(const float* pos) void Sample_TileMesh::buildAllTiles() { + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMax(); int gw = 0, gh = 0; - rcCalcGridSize(m_bmin, m_bmax, m_cellSize, &gw, &gh); + rcCalcGridSize(bmin, bmax, m_cellSize, &gw, &gh); const int ts = (int)m_tileSize; const int tw = (gw + ts-1) / ts; const int th = (gh + ts-1) / ts; @@ -515,13 +520,13 @@ void Sample_TileMesh::buildAllTiles() { for (int x = 0; x < tw; ++x) { - m_tileBmin[0] = m_bmin[0] + x*tcs; - m_tileBmin[1] = m_bmin[1]; - m_tileBmin[2] = m_bmin[2] + y*tcs; + m_tileBmin[0] = bmin[0] + x*tcs; + m_tileBmin[1] = bmin[1]; + m_tileBmin[2] = bmin[2] + y*tcs; - m_tileBmax[0] = m_bmin[0] + (x+1)*tcs; - m_tileBmax[1] = m_bmax[1]; - m_tileBmax[2] = m_bmin[2] + (y+1)*tcs; + m_tileBmax[0] = bmin[0] + (x+1)*tcs; + m_tileBmax[1] = bmax[1]; + m_tileBmax[2] = bmin[2] + (y+1)*tcs; int dataSize = 0; unsigned char* data = buildTileMesh(m_tileBmin, m_tileBmax, dataSize); @@ -539,8 +544,10 @@ void Sample_TileMesh::buildAllTiles() void Sample_TileMesh::removeAllTiles() { + const float* bmin = m_geom->getMeshBoundsMin(); + const float* bmax = m_geom->getMeshBoundsMax(); int gw = 0, gh = 0; - rcCalcGridSize(m_bmin, m_bmax, m_cellSize, &gw, &gh); + rcCalcGridSize(bmin, bmax, m_cellSize, &gw, &gh); const int ts = (int)m_tileSize; const int tw = (gw + ts-1) / ts; const int th = (gh + ts-1) / ts; @@ -552,7 +559,7 @@ void Sample_TileMesh::removeAllTiles() unsigned char* Sample_TileMesh::buildTileMesh(const float* bmin, const float* bmax, int& dataSize) { - if (!m_verts || ! m_tris) + if (!m_geom || !m_geom->getMesh() || !m_geom->getChunkyMesh()) { if (rcGetLog()) rcGetLog()->log(RC_LOG_ERROR, "buildNavigation: Input mesh is not specified."); @@ -561,6 +568,11 @@ unsigned char* Sample_TileMesh::buildTileMesh(const float* bmin, const float* bm cleanup(); + const float* verts = m_geom->getMesh()->getVerts(); + const int nverts = m_geom->getMesh()->getVertCount(); + const int ntris = m_geom->getMesh()->getTriCount(); + const rcChunkyTriMesh* chunkyMesh = m_geom->getChunkyMesh(); + // Init build configuration from GUI memset(&m_cfg, 0, sizeof(m_cfg)); m_cfg.cs = m_cellSize; @@ -599,7 +611,7 @@ unsigned char* Sample_TileMesh::buildTileMesh(const float* bmin, const float* bm { rcGetLog()->log(RC_LOG_PROGRESS, "Building navigation:"); rcGetLog()->log(RC_LOG_PROGRESS, " - %d x %d cells", m_cfg.width, m_cfg.height); - rcGetLog()->log(RC_LOG_PROGRESS, " - %.1fK verts, %.1fK tris", m_nverts/1000.0f, m_ntris/1000.0f); + rcGetLog()->log(RC_LOG_PROGRESS, " - %.1fK verts, %.1fK tris", nverts/1000.0f, ntris/1000.0f); } // Allocate voxel heighfield where we rasterize our input data to. @@ -620,11 +632,11 @@ unsigned char* Sample_TileMesh::buildTileMesh(const float* bmin, const float* bm // Allocate array that can hold triangle flags. // If you have multiple meshes you need to process, allocate // and array which can hold the max number of triangles you need to process. - m_triflags = new unsigned char[m_chunkyMesh->maxTrisPerChunk]; + m_triflags = new unsigned char[chunkyMesh->maxTrisPerChunk]; if (!m_triflags) { if (rcGetLog()) - rcGetLog()->log(RC_LOG_ERROR, "buildNavigation: Out of memory 'triangleFlags' (%d).", m_chunkyMesh->maxTrisPerChunk); + rcGetLog()->log(RC_LOG_ERROR, "buildNavigation: Out of memory 'triangleFlags' (%d).", chunkyMesh->maxTrisPerChunk); return 0; } @@ -635,7 +647,7 @@ unsigned char* Sample_TileMesh::buildTileMesh(const float* bmin, const float* bm tbmax[0] = m_cfg.bmax[0]; tbmax[1] = m_cfg.bmax[2]; int cid[256];// TODO: Make grow when returning too many items. - const int ncid = rcGetChunksInRect(m_chunkyMesh, tbmin, tbmax, cid, 256); + const int ncid = rcGetChunksInRect(chunkyMesh, tbmin, tbmax, cid, 256); if (!ncid) return 0; @@ -643,17 +655,17 @@ unsigned char* Sample_TileMesh::buildTileMesh(const float* bmin, const float* bm for (int i = 0; i < ncid; ++i) { - const rcChunkyTriMeshNode& node = m_chunkyMesh->nodes[cid[i]]; - const int* tris = &m_chunkyMesh->tris[node.i*3]; + const rcChunkyTriMeshNode& node = chunkyMesh->nodes[cid[i]]; + const int* tris = &chunkyMesh->tris[node.i*3]; const int ntris = node.n; m_tileTriCount += ntris; memset(m_triflags, 0, ntris*sizeof(unsigned char)); rcMarkWalkableTriangles(m_cfg.walkableSlopeAngle, - m_verts, m_nverts, tris, ntris, m_triflags); + verts, nverts, tris, ntris, m_triflags); - rcRasterizeTriangles(m_verts, m_nverts, tris, m_triflags, ntris, *m_solid); + rcRasterizeTriangles(verts, nverts, tris, m_triflags, ntris, *m_solid); } if (!m_keepInterResults) diff --git a/RecastDemo/Source/main.cpp b/RecastDemo/Source/main.cpp index 7008a75d..9a8b4071 100644 --- a/RecastDemo/Source/main.cpp +++ b/RecastDemo/Source/main.cpp @@ -1,3 +1,21 @@ +// +// Copyright (c) 2009 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + #include #define _USE_MATH_DEFINES #include @@ -13,7 +31,7 @@ #include "imguiRenderGL.h" #include "Recast.h" #include "RecastDebugDraw.h" -#include "MeshLoaderObj.h" +#include "InputGeom.h" #include "Sample_SoloMeshSimple.h" #include "Sample_SoloMeshTiled.h" @@ -24,16 +42,6 @@ #endif - -/*GLFont g_font; -void drawText(int x, int y, int dir, const char* text, unsigned int col) -{ - if (dir < 0) - g_font.drawText((float)x - g_font.getTextLength(text), (float)y, text, col); - else - g_font.drawText((float)x, (float)y, text, col); -}*/ - struct FileList { static const int MAX_FILES = 256; @@ -114,80 +122,6 @@ static void scanDirectory(const char* path, const char* ext, FileList& list) list.sort(); } -bool intersectSegmentTriangle(const float* sp, const float* sq, - const float* a, const float* b, const float* c, - float &t) -{ - float v, w; - float ab[3], ac[3], qp[3], ap[3], norm[3], e[3]; - vsub(ab, b, a); - vsub(ac, c, a); - vsub(qp, sp, sq); - - // Compute triangle normal. Can be precalculated or cached if - // intersecting multiple segments against the same triangle - vcross(norm, ab, ac); - - // Compute denominator d. If d <= 0, segment is parallel to or points - // away from triangle, so exit early - float d = vdot(qp, norm); - if (d <= 0.0f) return false; - - // Compute intersection t value of pq with plane of triangle. A ray - // intersects iff 0 <= t. Segment intersects iff 0 <= t <= 1. Delay - // dividing by d until intersection has been found to pierce triangle - vsub(ap, sp, a); - t = vdot(ap, norm); - if (t < 0.0f) return false; - if (t > d) return false; // For segment; exclude this code line for a ray test - - // Compute barycentric coordinate components and test if within bounds - vcross(e, qp, ap); - v = vdot(ac, e); - if (v < 0.0f || v > d) return false; - w = -vdot(ab, e); - if (w < 0.0f || v + w > d) return false; - - // Segment/ray intersects triangle. Perform delayed division - t /= d; - - return true; -} - -static bool raycast(rcMeshLoaderObj& mesh, float* src, float* dst, float& tmin) -{ - float dir[3]; - vsub(dir, dst, src); - - int nt = mesh.getTriCount(); - const float* verts = mesh.getVerts(); - const float* normals = mesh.getNormals(); - const int* tris = mesh.getTris(); - tmin = 1.0f; - bool hit = false; - - for (int i = 0; i < nt*3; i += 3) - { - const float* n = &normals[i]; - if (vdot(dir, n) > 0) - continue; - - float t = 1; - if (intersectSegmentTriangle(src, dst, - &verts[tris[i]*3], - &verts[tris[i+1]*3], - &verts[tris[i+2]*3], t)) - { - if (t < tmin) - tmin = t; - hit = true; - } - } - - return hit; -} - - struct SampleItem { Sample* (*create)(); @@ -272,13 +206,11 @@ int main(int argc, char *argv[]) FileList meshFiles; char meshName[128] = "Choose Mesh..."; - rcMeshLoaderObj* mesh = 0; - float meshBMin[3], meshBMax[3]; + InputGeom* geom = 0; float mpos[3]; bool mposSet = false; - Sample* sample = 0; rcLog log; @@ -331,11 +263,11 @@ int main(int argc, char *argv[]) else if (event.button.button == SDL_BUTTON_LEFT) { // Hit test mesh. - if (mesh && sample) + if (geom && sample) { // Hit test mesh. float t; - if (raycast(*mesh, rays, raye, t)) + if (geom->raycastMesh(rays, raye, t)) { if (SDL_GetModState() & KMOD_CTRL) { @@ -544,16 +476,18 @@ int main(int argc, char *argv[]) scanDirectory("Meshes", ".obj", meshFiles); } } - if (mesh) + if (geom) { char text[64]; - snprintf(text, 64, "Verts: %.1fk Tris: %.1fk", mesh->getVertCount()/1000.0f, mesh->getTriCount()/1000.0f); + snprintf(text, 64, "Verts: %.1fk Tris: %.1fk", + geom->getMesh()->getVertCount()/1000.0f, + geom->getMesh()->getTriCount()/1000.0f); imguiValue(text); } imguiSeparator(); } - if (mesh && sample) + if (geom && sample) { sample->handleSettings(); @@ -610,11 +544,9 @@ int main(int argc, char *argv[]) { delete sample; sample = newSample; - if (mesh && sample) + if (geom && sample) { - sample->handleMeshChanged(mesh->getVerts(), mesh->getVertCount(), - mesh->getTris(), mesh->getNormals(), mesh->getTriCount(), - meshBMin, meshBMax); + sample->handleMeshChanged(geom); } showSample = false; } @@ -642,42 +574,47 @@ int main(int argc, char *argv[]) meshName[sizeof(meshName)-1] = '\0'; showLevels = false; - delete mesh; - mesh = 0; + delete geom; + geom = 0; char path[256]; strcpy(path, "Meshes/"); strcat(path, meshName); - mesh = new rcMeshLoaderObj; - if (!mesh || !mesh->load(path)) + geom = new InputGeom; + if (!geom || !geom->loadMesh(path)) { - delete mesh; - mesh = 0; + delete geom; + geom = 0; + + showLog = true; + logScroll = 0; + printf("Build log %s:\n", meshName); + for (int i = 0; i < log.getMessageCount(); ++i) + printf("%s\n", log.getMessageText(i)); } - - if (mesh) - rcCalcBounds(mesh->getVerts(), mesh->getVertCount(), meshBMin, meshBMax); - - if (sample) + if (sample && geom) { - sample->handleMeshChanged(mesh->getVerts(), mesh->getVertCount(), - mesh->getTris(), mesh->getNormals(), mesh->getTriCount(), - meshBMin, meshBMax); + sample->handleMeshChanged(geom); + } + + if (geom) + { + const float* bmin = geom->getMeshBoundsMin(); + const float* bmax = geom->getMeshBoundsMax(); + // Reset camera and fog to match the mesh bounds. + camr = sqrtf(rcSqr(bmax[0]-bmin[0]) + + rcSqr(bmax[1]-bmin[1]) + + rcSqr(bmax[2]-bmin[2])) / 2; + camx = (bmax[0] + bmin[0]) / 2 + camr; + camy = (bmax[1] + bmin[1]) / 2 + camr; + camz = (bmax[2] + bmin[2]) / 2 + camr; + camr *= 3; + rx = 45; + ry = -45; + glFogf(GL_FOG_START, camr*0.2f); + glFogf(GL_FOG_END, camr*1.25f); } - - // Reset camera and fog to match the mesh bounds. - camr = sqrtf(rcSqr(meshBMax[0]-meshBMin[0]) + - rcSqr(meshBMax[1]-meshBMin[1]) + - rcSqr(meshBMax[2]-meshBMin[2])) / 2; - camx = (meshBMax[0] + meshBMin[0]) / 2 + camr; - camy = (meshBMax[1] + meshBMin[1]) / 2 + camr; - camz = (meshBMax[2] + meshBMin[2]) / 2 + camr; - camr *= 3; - rx = 45; - ry = -45; - glFogf(GL_FOG_START, camr*0.2f); - glFogf(GL_FOG_END, camr*1.25f); } imguiEndScrollArea(); @@ -695,7 +632,7 @@ int main(int argc, char *argv[]) } // Tools - if (showTools && showMenu && mesh && sample) + if (showTools && showMenu && geom && sample) { if (imguiBeginScrollArea("Tools", 10, height - 10 - 250, 200, 250, &toolsScroll)) mouseOverMenu = true; @@ -737,7 +674,7 @@ int main(int argc, char *argv[]) SDL_Quit(); delete sample; - delete mesh; + delete geom; return 0; }