From eb6b215d231ff213bf5fe613063c8395c5de117f Mon Sep 17 00:00:00 2001 From: Mikko Mononen Date: Tue, 5 Jan 2010 14:26:40 +0000 Subject: [PATCH] Changed the sample stuff to support extra link tool. Added simple tool to create eextra links (no detour support yet). --- .../Bin/Recast.app/Contents/MacOS/Recast | Bin 532520 -> 547464 bytes .../Xcode/Recast.xcodeproj/memon.pbxuser | 2808 ++++++++++++++++- .../Recast.xcodeproj/memon.perspectivev3 | 339 +- .../Xcode/Recast.xcodeproj/project.pbxproj | 12 + RecastDemo/Include/ExtraLinkTool.h | 45 + RecastDemo/Include/InputGeom.h | 62 + RecastDemo/Include/NavMeshTesterTool.h | 18 + RecastDemo/Include/Sample.h | 35 +- RecastDemo/Include/Sample_SoloMeshSimple.h | 26 +- RecastDemo/Include/Sample_SoloMeshTiled.h | 27 +- RecastDemo/Include/Sample_TileMesh.h | 10 +- RecastDemo/Source/ExtraLinkTool.cpp | 176 ++ RecastDemo/Source/InputGeom.cpp | 173 + RecastDemo/Source/NavMeshTesterTool.cpp | 18 + RecastDemo/Source/Sample.cpp | 63 +- RecastDemo/Source/Sample_SoloMeshSimple.cpp | 80 +- RecastDemo/Source/Sample_SoloMeshTiled.cpp | 141 +- RecastDemo/Source/Sample_TileMesh.cpp | 210 +- RecastDemo/Source/main.cpp | 189 +- 19 files changed, 3692 insertions(+), 740 deletions(-) create mode 100644 RecastDemo/Include/ExtraLinkTool.h create mode 100644 RecastDemo/Include/InputGeom.h create mode 100644 RecastDemo/Source/ExtraLinkTool.cpp create mode 100644 RecastDemo/Source/InputGeom.cpp diff --git a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast index bffdd5cf2ac9b12b2d589446a078be5b64a3bcfa..c56720e543824626a6ec17e355c4abb8d97c3c45 100755 GIT binary patch delta 159946 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 ^@({Wd{a9Gjyf4ufaP35_h*2DX!;$9!l8a5 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 delta 151143 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 JV)+~+0|2w&>plPg 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; }