diff --git a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast
index 46e3c14..e83768f 100755
Binary files a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast and b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast differ
diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser
index 8354ebb..4f9dd7f 100644
--- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser
+++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser
@@ -148,6 +148,41 @@
6B163317126832D20083FC15 /* PBXTextBookmark */ = 6B163317126832D20083FC15 /* PBXTextBookmark */;
6B163318126832D20083FC15 /* PBXTextBookmark */ = 6B163318126832D20083FC15 /* PBXTextBookmark */;
6B163319126832D20083FC15 /* PBXTextBookmark */ = 6B163319126832D20083FC15 /* PBXTextBookmark */;
+ 6B16331A126833820083FC15 /* PBXTextBookmark */ = 6B16331A126833820083FC15 /* PBXTextBookmark */;
+ 6B16331D126833AA0083FC15 /* PBXTextBookmark */ = 6B16331D126833AA0083FC15 /* PBXTextBookmark */;
+ 6B16338112684C6F0083FC15 /* PBXTextBookmark */ = 6B16338112684C6F0083FC15 /* PBXTextBookmark */;
+ 6B16338212684C6F0083FC15 /* PBXTextBookmark */ = 6B16338212684C6F0083FC15 /* PBXTextBookmark */;
+ 6B16338312684C6F0083FC15 /* PBXTextBookmark */ = 6B16338312684C6F0083FC15 /* PBXTextBookmark */;
+ 6B1633B6126850730083FC15 /* PBXTextBookmark */ = 6B1633B6126850730083FC15 /* PBXTextBookmark */;
+ 6B1633C1126850AB0083FC15 /* PBXTextBookmark */ = 6B1633C1126850AB0083FC15 /* PBXTextBookmark */;
+ 6B16357012687A5D0083FC15 /* PBXTextBookmark */ = 6B16357012687A5D0083FC15 /* PBXTextBookmark */;
+ 6B16357112687A5D0083FC15 /* PBXTextBookmark */ = 6B16357112687A5D0083FC15 /* PBXTextBookmark */;
+ 6B16357212687A5D0083FC15 /* PBXTextBookmark */ = 6B16357212687A5D0083FC15 /* PBXTextBookmark */;
+ 6B16357312687A5D0083FC15 /* PBXTextBookmark */ = 6B16357312687A5D0083FC15 /* PBXTextBookmark */;
+ 6B16357512687A700083FC15 /* PBXTextBookmark */ = 6B16357512687A700083FC15 /* PBXTextBookmark */;
+ 6B16357612687A750083FC15 /* PBXTextBookmark */ = 6B16357612687A750083FC15 /* PBXTextBookmark */;
+ 6B16357712687A7E0083FC15 /* PBXTextBookmark */ = 6B16357712687A7E0083FC15 /* PBXTextBookmark */;
+ 6B16358C12687D740083FC15 /* PBXTextBookmark */ = 6B16358C12687D740083FC15 /* PBXTextBookmark */;
+ 6B16358D12687D740083FC15 /* PBXTextBookmark */ = 6B16358D12687D740083FC15 /* PBXTextBookmark */;
+ 6B16358E12687D740083FC15 /* PBXTextBookmark */ = 6B16358E12687D740083FC15 /* PBXTextBookmark */;
+ 6B16358F12687D740083FC15 /* PBXTextBookmark */ = 6B16358F12687D740083FC15 /* PBXTextBookmark */;
+ 6B16359012687D740083FC15 /* PBXTextBookmark */ = 6B16359012687D740083FC15 /* PBXTextBookmark */;
+ 6B16359112687D740083FC15 /* PBXTextBookmark */ = 6B16359112687D740083FC15 /* PBXTextBookmark */;
+ 6B16359212687D740083FC15 /* PBXTextBookmark */ = 6B16359212687D740083FC15 /* PBXTextBookmark */;
+ 6B16359312687D740083FC15 /* PBXTextBookmark */ = 6B16359312687D740083FC15 /* PBXTextBookmark */;
+ 6B16359412687D740083FC15 /* PBXTextBookmark */ = 6B16359412687D740083FC15 /* PBXTextBookmark */;
+ 6B16359512687D840083FC15 /* PBXTextBookmark */ = 6B16359512687D840083FC15 /* PBXTextBookmark */;
+ 6B16359612687D840083FC15 /* PBXTextBookmark */ = 6B16359612687D840083FC15 /* PBXTextBookmark */;
+ 6B16359712687D840083FC15 /* PBXTextBookmark */ = 6B16359712687D840083FC15 /* PBXTextBookmark */;
+ 6B16359812687D840083FC15 /* PBXTextBookmark */ = 6B16359812687D840083FC15 /* PBXTextBookmark */;
+ 6B16359D12687D980083FC15 /* PBXTextBookmark */ = 6B16359D12687D980083FC15 /* PBXTextBookmark */;
+ 6B16359E12687D980083FC15 /* PBXTextBookmark */ = 6B16359E12687D980083FC15 /* PBXTextBookmark */;
+ 6B1635A212687DAD0083FC15 /* PBXTextBookmark */ = 6B1635A212687DAD0083FC15 /* PBXTextBookmark */;
+ 6B1635A412687DC70083FC15 /* PBXTextBookmark */ = 6B1635A412687DC70083FC15 /* PBXTextBookmark */;
+ 6B1635A512687DCA0083FC15 /* PBXTextBookmark */ = 6B1635A512687DCA0083FC15 /* PBXTextBookmark */;
+ 6B1635A612687DDA0083FC15 /* PBXTextBookmark */ = 6B1635A612687DDA0083FC15 /* PBXTextBookmark */;
+ 6B1635A712687DDB0083FC15 /* PBXTextBookmark */ = 6B1635A712687DDB0083FC15 /* PBXTextBookmark */;
+ 6B1635A812687E3E0083FC15 /* PBXTextBookmark */ = 6B1635A812687E3E0083FC15 /* PBXTextBookmark */;
6B1C8E08121EB4FF0048697F = 6B1C8E08121EB4FF0048697F /* PBXTextBookmark */;
6B4214D911803923006C347B = 6B4214D911803923006C347B /* PBXTextBookmark */;
6B847515122B9F4900ADF63D = 6B847515122B9F4900ADF63D /* PBXTextBookmark */;
@@ -266,10 +301,9 @@
hitCount = 0;
ignoreCount = 0;
lineNumber = 1324;
- location = Recast;
- modificationTime = 307623700.115019;
+ modificationTime = 308826279.221625;
originalNumberOfMultipleMatches = 1;
- state = 0;
+ state = 1;
};
6B1185F41006895B0018F96F /* DetourNode.cpp */ = {
uiCtxt = {
@@ -343,9 +377,9 @@
};
6B137C7E0F7FCBFE00459200 /* Recast.h */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {931, 8606}}";
- sepNavSelRange = "{23762, 14}";
- sepNavVisRange = "{22925, 2730}";
+ sepNavIntBoundsRect = "{{0, 0}, {931, 9087}}";
+ sepNavSelRange = "{12869, 0}";
+ sepNavVisRange = "{12510, 812}";
sepNavWindowFrame = "{{15, 51}, {1214, 722}}";
};
};
@@ -389,9 +423,9 @@
};
6B137C890F7FCC1100459200 /* RecastRegion.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {931, 16926}}";
- sepNavSelRange = "{22090, 0}";
- sepNavVisRange = "{21330, 766}";
+ sepNavIntBoundsRect = "{{0, 0}, {931, 16380}}";
+ sepNavSelRange = "{25263, 0}";
+ sepNavVisRange = "{24701, 1143}";
};
};
6B1632F2126830210083FC15 /* PBXTextBookmark */ = {
@@ -409,7 +443,7 @@
fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */;
name = "main.cpp: 897";
rLen = 0;
- rLoc = 20913;
+ rLoc = 21072;
rType = 0;
vrLen = 894;
vrLoc = 20326;
@@ -564,6 +598,350 @@
vrLen = 1217;
vrLoc = 672;
};
+ 6B16331A126833820083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */;
+ name = "DetourNavMesh.h: 37";
+ rLen = 0;
+ rLoc = 1521;
+ rType = 0;
+ vrLen = 1171;
+ vrLoc = 1163;
+ };
+ 6B16331D126833AA0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */;
+ name = "DetourNavMesh.h: 37";
+ rLen = 0;
+ rLoc = 1521;
+ rType = 0;
+ vrLen = 1171;
+ vrLoc = 1163;
+ };
+ 6B16338112684C6F0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */;
+ name = "DetourNavMesh.h: 39";
+ rLen = 0;
+ rLoc = 1578;
+ rType = 0;
+ vrLen = 1171;
+ vrLoc = 1163;
+ };
+ 6B16338212684C6F0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */;
+ name = "RecastRegion.cpp: 917";
+ rLen = 0;
+ rLoc = 22090;
+ rType = 0;
+ vrLen = 980;
+ vrLoc = 21178;
+ };
+ 6B16338312684C6F0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */;
+ name = "RecastRegion.cpp: 1054";
+ rLen = 0;
+ rLoc = 25263;
+ rType = 0;
+ vrLen = 1143;
+ vrLoc = 24701;
+ };
+ 6B1633B6126850730083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */;
+ name = "RecastRegion.cpp: 1054";
+ rLen = 0;
+ rLoc = 25263;
+ rType = 0;
+ vrLen = 1143;
+ vrLoc = 24701;
+ };
+ 6B1633C1126850AB0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */;
+ name = "RecastRegion.cpp: 1054";
+ rLen = 0;
+ rLoc = 25263;
+ rType = 0;
+ vrLen = 1143;
+ vrLoc = 24701;
+ };
+ 6B16357012687A5D0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */;
+ name = "RecastRegion.cpp: 1054";
+ rLen = 0;
+ rLoc = 25263;
+ rType = 0;
+ vrLen = 1143;
+ vrLoc = 24701;
+ };
+ 6B16357112687A5D0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B9EFF0812281C3E00535FF1 /* DetourObstacleAvoidance.cpp */;
+ name = "DetourObstacleAvoidance.cpp: 529";
+ rLen = 0;
+ rLoc = 12772;
+ rType = 0;
+ vrLen = 920;
+ vrLoc = 12687;
+ };
+ 6B16357212687A5D0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */;
+ name = "main.cpp: 65";
+ rLen = 0;
+ rLoc = 1985;
+ rType = 0;
+ vrLen = 1182;
+ vrLoc = 1406;
+ };
+ 6B16357312687A5D0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */;
+ name = "main.cpp: 372";
+ rLen = 0;
+ rLoc = 8781;
+ rType = 0;
+ vrLen = 1047;
+ vrLoc = 8332;
+ };
+ 6B16357512687A700083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */;
+ name = "main.cpp: 381";
+ rLen = 0;
+ rLoc = 8957;
+ rType = 0;
+ vrLen = 977;
+ vrLoc = 8445;
+ };
+ 6B16357612687A750083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */;
+ name = "main.cpp: 381";
+ rLen = 0;
+ rLoc = 8957;
+ rType = 0;
+ vrLen = 977;
+ vrLoc = 8445;
+ };
+ 6B16357712687A7E0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */;
+ name = "main.cpp: 381";
+ rLen = 0;
+ rLoc = 8957;
+ rType = 0;
+ vrLen = 358;
+ vrLoc = 8445;
+ };
+ 6B16358C12687D740083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */;
+ name = "main.cpp: 368";
+ rLen = 0;
+ rLoc = 8628;
+ rType = 0;
+ vrLen = 1109;
+ vrLoc = 8158;
+ };
+ 6B16358D12687D740083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */;
+ name = "InputGeom.h: 67";
+ rLen = 0;
+ rLoc = 2249;
+ rType = 0;
+ vrLen = 2148;
+ vrLoc = 1355;
+ };
+ 6B16358E12687D740083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB788180FC04753003C24DB /* ChunkyTriMesh.h */;
+ name = "ChunkyTriMesh.h: 46";
+ rLen = 26;
+ rLoc = 1575;
+ rType = 0;
+ vrLen = 1115;
+ vrLoc = 133;
+ };
+ 6B16358F12687D740083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */;
+ name = "ChunkyTriMesh.cpp: 213";
+ rLen = 26;
+ rLoc = 5408;
+ rType = 0;
+ vrLen = 832;
+ vrLoc = 4979;
+ };
+ 6B16359012687D740083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */;
+ name = "Sample_TileMesh.cpp: 958";
+ rLen = 0;
+ rLoc = 26529;
+ rType = 0;
+ vrLen = 958;
+ vrLoc = 26138;
+ };
+ 6B16359112687D740083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */;
+ name = "Sample_SoloMeshTiled.cpp: 800";
+ rLen = 959;
+ rLoc = 23991;
+ rType = 0;
+ vrLen = 1174;
+ vrLoc = 24082;
+ };
+ 6B16359212687D740083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */;
+ name = "InputGeom.cpp: 313";
+ rLen = 0;
+ rLoc = 7404;
+ rType = 0;
+ vrLen = 721;
+ vrLoc = 7309;
+ };
+ 6B16359312687D740083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */;
+ rLen = 0;
+ rLoc = 369;
+ rType = 1;
+ };
+ 6B16359412687D740083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */;
+ name = "Recast.h: 358";
+ rLen = 0;
+ rLoc = 12869;
+ rType = 0;
+ vrLen = 781;
+ vrLoc = 12510;
+ };
+ 6B16359512687D840083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */;
+ name = "main.cpp: 381";
+ rLen = 0;
+ rLoc = 8957;
+ rType = 0;
+ vrLen = 358;
+ vrLoc = 8445;
+ };
+ 6B16359612687D840083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */;
+ name = "Recast.h: 358";
+ rLen = 0;
+ rLoc = 12869;
+ rType = 0;
+ vrLen = 455;
+ vrLoc = 12510;
+ };
+ 6B16359712687D840083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */;
+ rLen = 0;
+ rLoc = 311;
+ rType = 1;
+ };
+ 6B16359812687D840083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */;
+ name = "InputGeom.cpp: 320";
+ rLen = 0;
+ rLoc = 7607;
+ rType = 0;
+ vrLen = 437;
+ vrLoc = 7651;
+ };
+ 6B16359D12687D980083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */;
+ name = "Recast.h: 358";
+ rLen = 0;
+ rLoc = 12869;
+ rType = 0;
+ vrLen = 812;
+ vrLoc = 12510;
+ };
+ 6B16359E12687D980083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */;
+ name = "InputGeom.cpp: 326";
+ rLen = 0;
+ rLoc = 7768;
+ rType = 0;
+ vrLen = 709;
+ vrLoc = 7494;
+ };
+ 6B1635A212687DAD0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */;
+ name = "InputGeom.cpp: 320";
+ rLen = 0;
+ rLoc = 7618;
+ rType = 0;
+ vrLen = 770;
+ vrLoc = 7508;
+ };
+ 6B1635A412687DC70083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */;
+ name = "InputGeom.cpp: 320";
+ rLen = 0;
+ rLoc = 7619;
+ rType = 0;
+ vrLen = 770;
+ vrLoc = 7508;
+ };
+ 6B1635A512687DCA0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */;
+ name = "InputGeom.cpp: 320";
+ rLen = 0;
+ rLoc = 7619;
+ rType = 0;
+ vrLen = 770;
+ vrLoc = 7508;
+ };
+ 6B1635A612687DDA0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */;
+ name = "InputGeom.cpp: 320";
+ rLen = 0;
+ rLoc = 7619;
+ rType = 0;
+ vrLen = 439;
+ vrLoc = 7651;
+ };
+ 6B1635A712687DDB0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */;
+ name = "InputGeom.cpp: 320";
+ rLen = 0;
+ rLoc = 7619;
+ rType = 0;
+ vrLen = 770;
+ vrLoc = 7508;
+ };
+ 6B1635A812687E3E0083FC15 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */;
+ name = "InputGeom.cpp: 304";
+ rLen = 0;
+ rLoc = 7438;
+ rType = 0;
+ vrLen = 766;
+ vrLoc = 7095;
+ };
6B1C8E08121EB4FF0048697F /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */;
@@ -590,9 +968,9 @@
};
6B25B6180FFA62BE004F1BC4 /* main.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1217, 11739}}";
- sepNavSelRange = "{1985, 0}";
- sepNavVisRange = "{1265, 437}";
+ sepNavIntBoundsRect = "{{0, 0}, {1217, 12025}}";
+ sepNavSelRange = "{8957, 0}";
+ sepNavVisRange = "{8445, 358}";
sepNavWindowFrame = "{{15, 51}, {1214, 722}}";
};
};
@@ -606,9 +984,9 @@
};
6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {931, 16068}}";
- sepNavSelRange = "{7100, 0}";
- sepNavVisRange = "{6402, 830}";
+ sepNavIntBoundsRect = "{{0, 0}, {931, 15340}}";
+ sepNavSelRange = "{26529, 0}";
+ sepNavVisRange = "{26138, 958}";
sepNavWindowFrame = "{{38, 30}, {1214, 722}}";
};
};
@@ -649,8 +1027,7 @@
hitCount = 0;
ignoreCount = 0;
lineNumber = 362;
- location = Recast;
- modificationTime = 307623703.350588;
+ modificationTime = 308826279.220464;
originalNumberOfMultipleMatches = 1;
state = 1;
};
@@ -881,9 +1258,9 @@
};
6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {931, 5135}}";
- sepNavSelRange = "{1161, 0}";
- sepNavVisRange = "{672, 1217}";
+ sepNavIntBoundsRect = "{{0, 0}, {931, 5200}}";
+ sepNavSelRange = "{1578, 0}";
+ sepNavVisRange = "{1163, 1171}";
};
};
6B8DE88C10B69E4C00DF20FB /* DetourNavMeshBuilder.h */ = {
@@ -917,7 +1294,7 @@
ignoreCount = 0;
lineNumber = 78;
location = Recast;
- modificationTime = 307623700.11648;
+ modificationTime = 308826245.414741;
originalNumberOfMultipleMatches = 0;
state = 2;
};
@@ -934,7 +1311,7 @@
hitCount = 0;
ignoreCount = 0;
lineNumber = 131;
- modificationTime = 307623700.116675;
+ modificationTime = 308826245.41512;
originalNumberOfMultipleMatches = 1;
state = 0;
};
@@ -977,9 +1354,9 @@
};
6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1013, 14274}}";
- sepNavSelRange = "{26519, 0}";
- sepNavVisRange = "{20368, 1429}";
+ sepNavIntBoundsRect = "{{0, 0}, {992, 14391}}";
+ sepNavSelRange = "{23991, 959}";
+ sepNavVisRange = "{24082, 1174}";
sepNavWindowFrame = "{{38, 30}, {1214, 722}}";
};
};
@@ -1030,9 +1407,9 @@
};
6B9EFF0812281C3E00535FF1 /* DetourObstacleAvoidance.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {931, 7319}}";
- sepNavSelRange = "{6519, 782}";
- sepNavVisRange = "{6947, 765}";
+ sepNavIntBoundsRect = "{{0, 0}, {931, 7397}}";
+ sepNavSelRange = "{12772, 0}";
+ sepNavVisRange = "{12687, 920}";
};
};
6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */ = {
@@ -1089,8 +1466,7 @@
hitCount = 0;
ignoreCount = 0;
lineNumber = 137;
- location = Recast;
- modificationTime = 307623703.369916;
+ modificationTime = 308826279.220855;
originalNumberOfMultipleMatches = 1;
state = 1;
};
@@ -1119,7 +1495,7 @@
fRef = 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */;
name = "ChunkyTriMesh.cpp: 59";
rLen = 0;
- rLoc = 1793;
+ rLoc = 1811;
rType = 0;
vrLen = 552;
vrLoc = 1454;
@@ -1129,7 +1505,7 @@
fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */;
name = "InputGeom.cpp: 395";
rLen = 0;
- rLoc = 10073;
+ rLoc = 10284;
rType = 0;
vrLen = 455;
vrLoc = 9715;
@@ -1241,8 +1617,7 @@
hitCount = 0;
ignoreCount = 0;
lineNumber = 45;
- location = Recast;
- modificationTime = 307623703.424199;
+ modificationTime = 308826279.219005;
originalNumberOfMultipleMatches = 1;
state = 1;
};
@@ -1472,7 +1847,7 @@
fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */;
name = "main.cpp: 897";
rLen = 0;
- rLoc = 20913;
+ rLoc = 21072;
rType = 0;
vrLen = 601;
vrLoc = 20575;
@@ -1552,7 +1927,7 @@
fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */;
name = "Sample_SoloMeshTiled.cpp: 866";
rLen = 0;
- rLoc = 26519;
+ rLoc = 26528;
rType = 0;
vrLen = 1429;
vrLoc = 20368;
@@ -1639,16 +2014,16 @@
};
6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {933, 3712}}";
- sepNavSelRange = "{1793, 0}";
- sepNavVisRange = "{1454, 552}";
+ sepNavIntBoundsRect = "{{0, 0}, {931, 4316}}";
+ sepNavSelRange = "{5408, 26}";
+ sepNavVisRange = "{4979, 832}";
};
};
6BB788180FC04753003C24DB /* ChunkyTriMesh.h */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {815, 800}}";
- sepNavSelRange = "{957, 0}";
- sepNavVisRange = "{396, 785}";
+ sepNavIntBoundsRect = "{{0, 0}, {931, 689}}";
+ sepNavSelRange = "{1575, 26}";
+ sepNavVisRange = "{133, 1115}";
};
};
6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */ = {
@@ -1668,16 +2043,16 @@
};
6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {933, 1584}}";
- sepNavSelRange = "{1880, 0}";
- sepNavVisRange = "{1682, 763}";
+ sepNavIntBoundsRect = "{{0, 0}, {931, 1196}}";
+ sepNavSelRange = "{2249, 0}";
+ sepNavVisRange = "{1355, 2148}";
};
};
6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {933, 7152}}";
- sepNavSelRange = "{10073, 0}";
- sepNavVisRange = "{9715, 455}";
+ sepNavIntBoundsRect = "{{0, 0}, {931, 6214}}";
+ sepNavSelRange = "{7438, 0}";
+ sepNavVisRange = "{7095, 766}";
};
};
6BB93C7710CFE1D500F74F2B /* DebugDraw.h */ = {
@@ -1822,8 +2197,7 @@
hitCount = 0;
ignoreCount = 0;
lineNumber = 279;
- location = Recast;
- modificationTime = 307623703.336449;
+ modificationTime = 308826279.219623;
originalNumberOfMultipleMatches = 1;
state = 1;
};
@@ -1948,8 +2322,7 @@
hitCount = 0;
ignoreCount = 0;
lineNumber = 541;
- location = Recast;
- modificationTime = 307623703.377993;
+ modificationTime = 308826279.220026;
originalNumberOfMultipleMatches = 1;
state = 1;
};
@@ -2008,8 +2381,7 @@
hitCount = 0;
ignoreCount = 0;
lineNumber = 480;
- location = Recast;
- modificationTime = 307623703.394133;
+ modificationTime = 308826279.221242;
originalNumberOfMultipleMatches = 1;
state = 1;
};
diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3
index d52d236..f1f2b04 100644
--- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3
+++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3
@@ -284,14 +284,13 @@
PBXSmartGroupTreeModuleOutlineStateSelectionKey
- 15
- 11
+ 82
1
0
PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
- {{0, 0}, {264, 660}}
+ {{0, 1242}, {264, 660}}
PBXTopSmartGroupGIDs
@@ -326,7 +325,7 @@
PBXProjectModuleGUID
6B8632A30F78115100E2684A
PBXProjectModuleLabel
- DetourNavMesh.h
+ InputGeom.cpp
PBXSplitModuleInNavigatorKey
Split0
@@ -334,14 +333,13 @@
PBXProjectModuleGUID
6B8632A40F78115100E2684A
PBXProjectModuleLabel
- DetourNavMesh.h
+ InputGeom.cpp
_historyCapacity
0
bookmark
- 6B163319126832D20083FC15
+ 6B1635A812687E3E0083FC15
history
- 6BBB4AA5115B4F3400CF791D
6BBB4C34115B7A3D00CF791D
6BF5F27311747CFA000502A6
6BF5F2E411748884000502A6
@@ -366,12 +364,9 @@
6BD402811224393000995864
6BD4028C1224399300995864
6BD4029B12243A8000995864
- 6BD402B4122441CB00995864
6B920A521225C0AC00D5B5AD
6B920A6D1225C5DD00D5B5AD
6BA7F8EC1227002300C8C47A
- 6BA7F8ED1227002300C8C47A
- 6BA7F8EE1227002300C8C47A
6B8476F9122D000800ADF63D
6B847779122D223D00ADF63D
6B84778B122D279700ADF63D
@@ -403,7 +398,6 @@
6BA8CF951255D97400272A3B
6BA8CFA81255DC6500272A3B
6BA8CFBE1255DE0500272A3B
- 6BA8D10B125B0E8E00272A3B
6BA8D10C125B0E8E00272A3B
6BA8D10D125B0E8E00272A3B
6BB2EDF91261C75400E350F8
@@ -414,23 +408,28 @@
6BB2EE351261CEB800E350F8
6BB2EE361261CEB800E350F8
6BB2EE3F1261D02000E350F8
- 6BB2EE641261D48100E350F8
- 6BB2EE651261D48100E350F8
6BB2EE661261D48100E350F8
6BB2EE671261D48100E350F8
- 6BB2EE681261D48100E350F8
6BB2EE691261D48100E350F8
6BB2EE731261DA0400E350F8
6BB2EE7A1264CD7900E350F8
6BB2EE7B1264CD7900E350F8
- 6B1632F2126830210083FC15
- 6B16330F1268326F0083FC15
6B1633101268326F0083FC15
6B1633111268326F0083FC15
6B1633121268326F0083FC15
6B1633141268326F0083FC15
6B163317126832D20083FC15
- 6B163318126832D20083FC15
+ 6B16338112684C6F0083FC15
+ 6B16357012687A5D0083FC15
+ 6B16357112687A5D0083FC15
+ 6B16358C12687D740083FC15
+ 6B16358D12687D740083FC15
+ 6B16358E12687D740083FC15
+ 6B16358F12687D740083FC15
+ 6B16359012687D740083FC15
+ 6B16359112687D740083FC15
+ 6B16359D12687D980083FC15
+ 6B1635A612687DDA0083FC15
SplitCount
@@ -444,18 +443,18 @@
GeometryConfiguration
Frame
- {{0, 0}, {992, 533}}
+ {{0, 0}, {992, 528}}
RubberWindowFrame
0 59 1278 719 0 0 1280 778
Module
PBXNavigatorGroup
Proportion
- 533pt
+ 528pt
Proportion
- 140pt
+ 145pt
Tabs
@@ -485,9 +484,7 @@
GeometryConfiguration
Frame
- {{10, 27}, {992, 113}}
- RubberWindowFrame
- 0 59 1278 719 0 0 1280 778
+ {{10, 27}, {992, -27}}
Module
PBXProjectFindModule
@@ -525,7 +522,9 @@
GeometryConfiguration
Frame
- {{10, 27}, {992, 88}}
+ {{10, 27}, {992, 118}}
+ RubberWindowFrame
+ 0 59 1278 719 0 0 1280 778
Module
PBXBuildResultsModule
diff --git a/RecastDemo/Include/ChunkyTriMesh.h b/RecastDemo/Include/ChunkyTriMesh.h
index c4d0fc8..9be7788 100644
--- a/RecastDemo/Include/ChunkyTriMesh.h
+++ b/RecastDemo/Include/ChunkyTriMesh.h
@@ -42,8 +42,11 @@ struct rcChunkyTriMesh
bool rcCreateChunkyTriMesh(const float* verts, const int* tris, int ntris,
int trisPerChunk, rcChunkyTriMesh* cm);
-// Returns the chunk indices which touch the input rectable.
-int rcGetChunksInRect(const rcChunkyTriMesh* cm, float bmin[2], float bmax[2], int* ids, const int maxIds);
+// Returns the chunk indices which overlap the input rectable.
+int rcGetChunksOverlappingRect(const rcChunkyTriMesh* cm, float bmin[2], float bmax[2], int* ids, const int maxIds);
+
+// Returns the chunk indices which overlap the input segment.
+int rcGetChunksOverlappingSegment(const rcChunkyTriMesh* cm, float p[2], float q[2], int* ids, const int maxIds);
#endif // CHUNKYTRIMESH_H
diff --git a/RecastDemo/Source/ChunkyTriMesh.cpp b/RecastDemo/Source/ChunkyTriMesh.cpp
index 86460ec..47e8778 100644
--- a/RecastDemo/Source/ChunkyTriMesh.cpp
+++ b/RecastDemo/Source/ChunkyTriMesh.cpp
@@ -19,6 +19,7 @@
#include "ChunkyTriMesh.h"
#include
#include
+#include
struct BoundsItem
{
@@ -209,9 +210,9 @@ inline bool checkOverlapRect(const float amin[2], const float amax[2],
return overlap;
}
-int rcGetChunksInRect(const rcChunkyTriMesh* cm,
- float bmin[2], float bmax[2],
- int* ids, const int maxIds)
+int rcGetChunksOverlappingRect(const rcChunkyTriMesh* cm,
+ float bmin[2], float bmax[2],
+ int* ids, const int maxIds)
{
// Traverse tree
int i = 0;
@@ -243,3 +244,72 @@ int rcGetChunksInRect(const rcChunkyTriMesh* cm,
return n;
}
+
+
+static bool checkOverlapSegment(const float p[2], const float q[2],
+ const float bmin[2], const float bmax[2])
+{
+ static const float EPSILON = 1e-6f;
+
+ float tmin = 0;
+ float tmax = 1;
+ float d[2];
+ d[0] = q[0] - p[0];
+ d[1] = q[1] - p[1];
+
+ for (int i = 0; i < 2; i++)
+ {
+ if (fabsf(d[i]) < EPSILON)
+ {
+ // Ray is parallel to slab. No hit if origin not within slab
+ if (p[i] < bmin[i] || p[i] > bmax[i])
+ return false;
+ }
+ else
+ {
+ // Compute intersection t value of ray with near and far plane of slab
+ float ood = 1.0f / d[i];
+ float t1 = (bmin[i] - p[i]) * ood;
+ float t2 = (bmax[i] - p[i]) * ood;
+ if (t1 > t2) { float tmp = t1; t1 = t2; t2 = tmp; }
+ if (t1 > tmin) tmin = t1;
+ if (t2 < tmax) tmax = t2;
+ if (tmin > tmax) return false;
+ }
+ }
+ return true;
+}
+
+int rcGetChunksOverlappingSegment(const rcChunkyTriMesh* cm,
+ float p[2], float q[2],
+ int* ids, const int maxIds)
+{
+ // Traverse tree
+ int i = 0;
+ int n = 0;
+ while (i < cm->nnodes)
+ {
+ const rcChunkyTriMeshNode* node = &cm->nodes[i];
+ const bool overlap = checkOverlapSegment(p, q, node->bmin, node->bmax);
+ const bool isLeafNode = node->i >= 0;
+
+ if (isLeafNode && overlap)
+ {
+ if (n < maxIds)
+ {
+ ids[n] = i;
+ n++;
+ }
+ }
+
+ if (overlap || isLeafNode)
+ i++;
+ else
+ {
+ const int escapeIndex = -node->i;
+ i += escapeIndex;
+ }
+ }
+
+ return n;
+}
diff --git a/RecastDemo/Source/InputGeom.cpp b/RecastDemo/Source/InputGeom.cpp
index 16dcca3..a2e96c0 100644
--- a/RecastDemo/Source/InputGeom.cpp
+++ b/RecastDemo/Source/InputGeom.cpp
@@ -285,29 +285,39 @@ bool InputGeom::raycastMesh(float* src, float* dst, float& tmin)
{
float dir[3];
rcVsub(dir, dst, src);
+
+ float p[2], q[2];
+ p[0] = src[0];
+ p[1] = src[2];
+ q[0] = dst[0];
+ q[1] = dst[2];
+ int cid[512];
+ const int ncid = rcGetChunksOverlappingSegment(m_chunkyMesh, p, q, cid, 512);
+ if (!ncid)
+ return false;
- 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;
+ const float* verts = m_mesh->getVerts();
- for (int i = 0; i < nt*3; i += 3)
+ for (int i = 0; i < ncid; ++i)
{
- const float* n = &normals[i];
- if (rcVdot(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))
+ const rcChunkyTriMeshNode& node = m_chunkyMesh->nodes[cid[i]];
+ const int* tris = &m_chunkyMesh->tris[node.i*3];
+ const int ntris = node.n;
+
+ for (int j = 0; j < ntris*3; ++j)
{
- if (t < tmin)
- tmin = t;
- hit = true;
+ float t = 1;
+ if (intersectSegmentTriangle(src, dst,
+ &verts[tris[j]*3],
+ &verts[tris[j+1]*3],
+ &verts[tris[j+2]*3], t))
+ {
+ if (t < tmin)
+ tmin = t;
+ hit = true;
+ }
}
}
diff --git a/RecastDemo/Source/Sample_SoloMeshTiled.cpp b/RecastDemo/Source/Sample_SoloMeshTiled.cpp
index 9e30c2d..0b992b6 100644
--- a/RecastDemo/Source/Sample_SoloMeshTiled.cpp
+++ b/RecastDemo/Source/Sample_SoloMeshTiled.cpp
@@ -803,7 +803,7 @@ bool Sample_SoloMeshTiled::handleBuild()
tbmax[0] = tileCfg.bmax[0];
tbmax[1] = tileCfg.bmax[2];
int cid[512];// TODO: Make grow when returning too many items.
- const int ncid = rcGetChunksInRect(chunkyMesh, tbmin, tbmax, cid, 512);
+ const int ncid = rcGetChunksOverlappingRect(chunkyMesh, tbmin, tbmax, cid, 512);
if (!ncid)
continue;
diff --git a/RecastDemo/Source/Sample_TileMesh.cpp b/RecastDemo/Source/Sample_TileMesh.cpp
index d3d6167..627786f 100644
--- a/RecastDemo/Source/Sample_TileMesh.cpp
+++ b/RecastDemo/Source/Sample_TileMesh.cpp
@@ -955,7 +955,7 @@ unsigned char* Sample_TileMesh::buildTileMesh(const int tx, const int ty, const
tbmax[0] = m_cfg.bmax[0];
tbmax[1] = m_cfg.bmax[2];
int cid[512];// TODO: Make grow when returning too many items.
- const int ncid = rcGetChunksInRect(chunkyMesh, tbmin, tbmax, cid, 512);
+ const int ncid = rcGetChunksOverlappingRect(chunkyMesh, tbmin, tbmax, cid, 512);
if (!ncid)
return 0;
diff --git a/RecastDemo/Source/main.cpp b/RecastDemo/Source/main.cpp
index 8d9c453..e529d43 100644
--- a/RecastDemo/Source/main.cpp
+++ b/RecastDemo/Source/main.cpp
@@ -365,7 +365,13 @@ int main(int /*argc*/, char** /*argv*/)
if (processHitTest && geom && sample)
{
float t;
- if (geom->raycastMesh(rays, raye, t))
+ TimeVal t0 = getPerfTime();
+ bool hit = geom->raycastMesh(rays, raye, t);
+ TimeVal t1 = getPerfTime();
+
+ printf("raycast() %.4fms\n", getPerfDeltaTimeUsec(t0,t1)/1000.0f);
+
+ if (hit)
{
if (SDL_GetModState() & KMOD_CTRL)
{