diff --git a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast index c75aaba..a984dc2 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 9e44822..8be842c 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser @@ -18,7 +18,8 @@ 6BBB4C4C115B7BAD00CF791D /* Sample_TileMesh.cpp:279 */, 6B42164711806B2F006C347B /* DetourDebugDraw.cpp:360 */, 6B10014C11AD1C1E0098A59A /* RecastMesh.cpp:1311 */, - 6BAF3EB31212906D008CFCDF /* CrowdTool.cpp:774 */, + 6BAF3EB31212906D008CFCDF /* CrowdTool.cpp:229 */, + 6B1C8DF2121EA9A90048697F /* CrowdTool.cpp:229 */, ); codeSenseManager = 6B8632AA0F78115100E2684A /* Code sense */; executables = ( @@ -164,6 +165,135 @@ 6B1C8DAD121E821F0048697F /* PBXTextBookmark */ = 6B1C8DAD121E821F0048697F /* PBXTextBookmark */; 6B1C8DAE121E821F0048697F /* PBXTextBookmark */ = 6B1C8DAE121E821F0048697F /* PBXTextBookmark */; 6B1C8DAF121E821F0048697F /* PBXTextBookmark */ = 6B1C8DAF121E821F0048697F /* PBXTextBookmark */; + 6B1C8DB3121E8D970048697F /* PBXTextBookmark */ = 6B1C8DB3121E8D970048697F /* PBXTextBookmark */; + 6B1C8DB4121E8D970048697F /* PBXTextBookmark */ = 6B1C8DB4121E8D970048697F /* PBXTextBookmark */; + 6B1C8DB5121E8D970048697F /* PBXTextBookmark */ = 6B1C8DB5121E8D970048697F /* PBXTextBookmark */; + 6B1C8DB6121E8D970048697F /* PBXTextBookmark */ = 6B1C8DB6121E8D970048697F /* PBXTextBookmark */; + 6B1C8DB7121E8D970048697F /* PBXTextBookmark */ = 6B1C8DB7121E8D970048697F /* PBXTextBookmark */; + 6B1C8DB8121E8D970048697F /* PBXTextBookmark */ = 6B1C8DB8121E8D970048697F /* PBXTextBookmark */; + 6B1C8DB9121E8D970048697F /* PBXTextBookmark */ = 6B1C8DB9121E8D970048697F /* PBXTextBookmark */; + 6B1C8DBB121E8E430048697F /* PBXTextBookmark */ = 6B1C8DBB121E8E430048697F /* PBXTextBookmark */; + 6B1C8DBE121E8E9F0048697F /* PBXTextBookmark */ = 6B1C8DBE121E8E9F0048697F /* PBXTextBookmark */; + 6B1C8DBF121E8F610048697F /* PBXTextBookmark */ = 6B1C8DBF121E8F610048697F /* PBXTextBookmark */; + 6B1C8DC0121E8F610048697F /* PBXTextBookmark */ = 6B1C8DC0121E8F610048697F /* PBXTextBookmark */; + 6B1C8DC1121E8F610048697F /* PBXTextBookmark */ = 6B1C8DC1121E8F610048697F /* PBXTextBookmark */; + 6B1C8DC2121E8F610048697F /* PBXTextBookmark */ = 6B1C8DC2121E8F610048697F /* PBXTextBookmark */; + 6B1C8DC3121E8F610048697F /* PBXTextBookmark */ = 6B1C8DC3121E8F610048697F /* PBXTextBookmark */; + 6B1C8DC5121E902F0048697F /* PBXTextBookmark */ = 6B1C8DC5121E902F0048697F /* PBXTextBookmark */; + 6B1C8DC7121E902F0048697F /* PBXTextBookmark */ = 6B1C8DC7121E902F0048697F /* PBXTextBookmark */; + 6B1C8DC8121E902F0048697F /* PBXTextBookmark */ = 6B1C8DC8121E902F0048697F /* PBXTextBookmark */; + 6B1C8DCA121E902F0048697F /* PBXTextBookmark */ = 6B1C8DCA121E902F0048697F /* PBXTextBookmark */; + 6B1C8DCC121E91550048697F /* PBXTextBookmark */ = 6B1C8DCC121E91550048697F /* PBXTextBookmark */; + 6B1C8DCF121E91EA0048697F /* PBXTextBookmark */ = 6B1C8DCF121E91EA0048697F /* PBXTextBookmark */; + 6B1C8DD1121E929F0048697F /* PBXTextBookmark */ = 6B1C8DD1121E929F0048697F /* PBXTextBookmark */; + 6B1C8DD4121E96CE0048697F /* PBXTextBookmark */ = 6B1C8DD4121E96CE0048697F /* PBXTextBookmark */; + 6B1C8DD6121E97B70048697F /* PBXTextBookmark */ = 6B1C8DD6121E97B70048697F /* PBXTextBookmark */; + 6B1C8DD8121EA3470048697F /* PBXTextBookmark */ = 6B1C8DD8121EA3470048697F /* PBXTextBookmark */; + 6B1C8DD9121EA3470048697F /* PBXTextBookmark */ = 6B1C8DD9121EA3470048697F /* PBXTextBookmark */; + 6B1C8DDA121EA3470048697F /* PBXTextBookmark */ = 6B1C8DDA121EA3470048697F /* PBXTextBookmark */; + 6B1C8DDB121EA3470048697F /* PBXTextBookmark */ = 6B1C8DDB121EA3470048697F /* PBXTextBookmark */; + 6B1C8DDC121EA3470048697F /* PBXTextBookmark */ = 6B1C8DDC121EA3470048697F /* PBXTextBookmark */; + 6B1C8DDD121EA3470048697F /* PBXTextBookmark */ = 6B1C8DDD121EA3470048697F /* PBXTextBookmark */; + 6B1C8DDE121EA3470048697F /* PBXTextBookmark */ = 6B1C8DDE121EA3470048697F /* PBXTextBookmark */; + 6B1C8DDF121EA3470048697F /* PBXTextBookmark */ = 6B1C8DDF121EA3470048697F /* PBXTextBookmark */; + 6B1C8DE0121EA3470048697F /* PBXTextBookmark */ = 6B1C8DE0121EA3470048697F /* PBXTextBookmark */; + 6B1C8DE1121EA3470048697F /* PBXTextBookmark */ = 6B1C8DE1121EA3470048697F /* PBXTextBookmark */; + 6B1C8DE2121EA3470048697F /* PBXTextBookmark */ = 6B1C8DE2121EA3470048697F /* PBXTextBookmark */; + 6B1C8DE3121EA3470048697F /* PBXTextBookmark */ = 6B1C8DE3121EA3470048697F /* PBXTextBookmark */; + 6B1C8DE4121EA3470048697F /* PBXTextBookmark */ = 6B1C8DE4121EA3470048697F /* PBXTextBookmark */; + 6B1C8DE5121EA3470048697F /* PBXTextBookmark */ = 6B1C8DE5121EA3470048697F /* PBXTextBookmark */; + 6B1C8DE6121EA3470048697F /* PBXTextBookmark */ = 6B1C8DE6121EA3470048697F /* PBXTextBookmark */; + 6B1C8DE7121EA3470048697F /* PBXTextBookmark */ = 6B1C8DE7121EA3470048697F /* PBXTextBookmark */; + 6B1C8DE8121EA3470048697F /* PBXTextBookmark */ = 6B1C8DE8121EA3470048697F /* PBXTextBookmark */; + 6B1C8DE9121EA3470048697F /* PBXTextBookmark */ = 6B1C8DE9121EA3470048697F /* PBXTextBookmark */; + 6B1C8DEA121EA3470048697F /* PBXTextBookmark */ = 6B1C8DEA121EA3470048697F /* PBXTextBookmark */; + 6B1C8DEB121EA3470048697F /* PBXTextBookmark */ = 6B1C8DEB121EA3470048697F /* PBXTextBookmark */; + 6B1C8DEF121EA9570048697F /* PBXTextBookmark */ = 6B1C8DEF121EA9570048697F /* PBXTextBookmark */; + 6B1C8DF0121EA9570048697F /* PBXTextBookmark */ = 6B1C8DF0121EA9570048697F /* PBXTextBookmark */; + 6B1C8DF4121EA9B00048697F /* PBXTextBookmark */ = 6B1C8DF4121EA9B00048697F /* PBXTextBookmark */; + 6B1C8DF7121EAEAD0048697F /* PBXTextBookmark */ = 6B1C8DF7121EAEAD0048697F /* PBXTextBookmark */; + 6B1C8DFC121EB0D10048697F /* PBXTextBookmark */ = 6B1C8DFC121EB0D10048697F /* PBXTextBookmark */; + 6B1C8DFD121EB0D10048697F /* PBXTextBookmark */ = 6B1C8DFD121EB0D10048697F /* PBXTextBookmark */; + 6B1C8DFE121EB0D10048697F /* PBXTextBookmark */ = 6B1C8DFE121EB0D10048697F /* PBXTextBookmark */; + 6B1C8DFF121EB0D10048697F /* PBXTextBookmark */ = 6B1C8DFF121EB0D10048697F /* PBXTextBookmark */; + 6B1C8E00121EB0D10048697F /* PBXTextBookmark */ = 6B1C8E00121EB0D10048697F /* PBXTextBookmark */; + 6B1C8E01121EB0D10048697F /* PBXTextBookmark */ = 6B1C8E01121EB0D10048697F /* PBXTextBookmark */; + 6B1C8E02121EB0D10048697F /* PBXTextBookmark */ = 6B1C8E02121EB0D10048697F /* PBXTextBookmark */; + 6B1C8E03121EB1390048697F /* PBXTextBookmark */ = 6B1C8E03121EB1390048697F /* PBXTextBookmark */; + 6B1C8E04121EB1430048697F /* PBXTextBookmark */ = 6B1C8E04121EB1430048697F /* PBXTextBookmark */; + 6B1C8E05121EB1A30048697F /* PBXTextBookmark */ = 6B1C8E05121EB1A30048697F /* PBXTextBookmark */; + 6B1C8E06121EB1A30048697F /* PBXTextBookmark */ = 6B1C8E06121EB1A30048697F /* PBXTextBookmark */; + 6B1C8E07121EB1A30048697F /* PBXTextBookmark */ = 6B1C8E07121EB1A30048697F /* PBXTextBookmark */; + 6B1C8E08121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E08121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E09121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E09121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E0A121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E0A121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E0B121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E0B121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E0C121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E0C121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E0D121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E0D121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E0E121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E0E121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E0F121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E0F121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E10121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E10121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E11121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E11121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E12121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E12121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E13121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E13121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E14121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E14121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E15121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E15121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E16121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E16121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E17121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E17121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E18121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E18121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E19121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E19121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E1A121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E1A121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E1B121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E1B121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E1C121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E1C121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E1D121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E1D121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E1E121EB4FF0048697F /* PBXTextBookmark */ = 6B1C8E1E121EB4FF0048697F /* PBXTextBookmark */; + 6B1C8E24121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E24121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E25121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E25121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E26121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E26121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E27121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E27121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E28121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E28121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E29121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E29121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E2A121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E2A121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E2B121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E2B121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E2C121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E2C121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E2D121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E2D121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E2E121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E2E121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E2F121EB6D30048697F /* PBXTextBookmark */ = 6B1C8E2F121EB6D30048697F /* PBXTextBookmark */; + 6B1C8E30121EB9310048697F /* PBXTextBookmark */ = 6B1C8E30121EB9310048697F /* PBXTextBookmark */; + 6B1C8E31121EB9310048697F /* PBXTextBookmark */ = 6B1C8E31121EB9310048697F /* PBXTextBookmark */; + 6B1C8E32121EB9310048697F /* PBXTextBookmark */ = 6B1C8E32121EB9310048697F /* PBXTextBookmark */; + 6B1C8E33121EB9310048697F /* PBXTextBookmark */ = 6B1C8E33121EB9310048697F /* PBXTextBookmark */; + 6B1C8E37121EBA8A0048697F /* PBXTextBookmark */ = 6B1C8E37121EBA8A0048697F /* PBXTextBookmark */; + 6B1C8E38121EBA9F0048697F /* PBXTextBookmark */ = 6B1C8E38121EBA9F0048697F /* PBXTextBookmark */; + 6B1C8E3B121EBB450048697F /* PBXTextBookmark */ = 6B1C8E3B121EBB450048697F /* PBXTextBookmark */; + 6B1C8E3E121EBB710048697F /* PBXTextBookmark */ = 6B1C8E3E121EBB710048697F /* PBXTextBookmark */; + 6B1C8E40121EBB900048697F /* PBXTextBookmark */ = 6B1C8E40121EBB900048697F /* PBXTextBookmark */; + 6B1C8E43121EBC510048697F /* PBXTextBookmark */ = 6B1C8E43121EBC510048697F /* PBXTextBookmark */; + 6B1C8E45121EBC990048697F /* PBXTextBookmark */ = 6B1C8E45121EBC990048697F /* PBXTextBookmark */; + 6B1C8E47121EBC9E0048697F /* PBXTextBookmark */ = 6B1C8E47121EBC9E0048697F /* PBXTextBookmark */; + 6B1C8E4A121EBCD10048697F /* PBXTextBookmark */ = 6B1C8E4A121EBCD10048697F /* PBXTextBookmark */; + 6B1C8E4C121EBD8A0048697F /* PBXTextBookmark */ = 6B1C8E4C121EBD8A0048697F /* PBXTextBookmark */; + 6B1C8E4E121EBD9E0048697F /* PBXTextBookmark */ = 6B1C8E4E121EBD9E0048697F /* PBXTextBookmark */; + 6B1C8E56121EBEBF0048697F /* PBXTextBookmark */ = 6B1C8E56121EBEBF0048697F /* PBXTextBookmark */; + 6B1C8E57121EBEBF0048697F /* PBXTextBookmark */ = 6B1C8E57121EBEBF0048697F /* PBXTextBookmark */; + 6B1C8E58121EBEBF0048697F /* PBXTextBookmark */ = 6B1C8E58121EBEBF0048697F /* PBXTextBookmark */; + 6B1C8E59121EBEBF0048697F /* PBXTextBookmark */ = 6B1C8E59121EBEBF0048697F /* PBXTextBookmark */; + 6B1C8E5A121EBEBF0048697F /* PBXTextBookmark */ = 6B1C8E5A121EBEBF0048697F /* PBXTextBookmark */; + 6B1C8E5C121EBF320048697F /* PBXTextBookmark */ = 6B1C8E5C121EBF320048697F /* PBXTextBookmark */; + 6B1C8E5F121EBF540048697F /* PBXTextBookmark */ = 6B1C8E5F121EBF540048697F /* PBXTextBookmark */; + 6B1C8E61121FD20C0048697F /* PBXTextBookmark */ = 6B1C8E61121FD20C0048697F /* PBXTextBookmark */; + 6B1C8E62121FD20C0048697F /* PBXTextBookmark */ = 6B1C8E62121FD20C0048697F /* PBXTextBookmark */; + 6B1C8E641221BC080048697F /* PBXTextBookmark */ = 6B1C8E641221BC080048697F /* PBXTextBookmark */; + 6B1C8E651221BC080048697F /* PBXTextBookmark */ = 6B1C8E651221BC080048697F /* PBXTextBookmark */; + 6B1C8E661221BC080048697F /* PBXTextBookmark */ = 6B1C8E661221BC080048697F /* PBXTextBookmark */; + 6B1C8E671221BC080048697F /* PBXTextBookmark */ = 6B1C8E671221BC080048697F /* PBXTextBookmark */; + 6B1C8E691221BC910048697F /* PBXTextBookmark */ = 6B1C8E691221BC910048697F /* PBXTextBookmark */; + 6B1C8E6A1221BC910048697F /* PBXTextBookmark */ = 6B1C8E6A1221BC910048697F /* PBXTextBookmark */; + 6B1C8E6B1221BC910048697F /* PBXTextBookmark */ = 6B1C8E6B1221BC910048697F /* PBXTextBookmark */; + 6B1C8E6C1221BC910048697F /* PBXTextBookmark */ = 6B1C8E6C1221BC910048697F /* PBXTextBookmark */; + 6B1C8E6D1221BC910048697F /* PBXTextBookmark */ = 6B1C8E6D1221BC910048697F /* PBXTextBookmark */; + 6B1C8E6E1221BC910048697F /* PBXTextBookmark */ = 6B1C8E6E1221BC910048697F /* PBXTextBookmark */; + 6B1C8E6F1221BC910048697F /* PBXTextBookmark */ = 6B1C8E6F1221BC910048697F /* PBXTextBookmark */; 6B4214D911803923006C347B = 6B4214D911803923006C347B /* PBXTextBookmark */; 6B98462E11E6141900FA177B = 6B98462E11E6141900FA177B /* PBXTextBookmark */; 6B98465411E6F9B400FA177B = 6B98465411E6F9B400FA177B /* PBXTextBookmark */; @@ -440,9 +570,9 @@ }; 6B1185FC10068B040018F96F /* DetourCommon.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 3456}}"; - sepNavSelRange = "{6467, 0}"; - sepNavVisRange = "{5483, 1299}"; + sepNavIntBoundsRect = "{{0, 0}, {933, 3632}}"; + sepNavSelRange = "{4927, 0}"; + sepNavVisRange = "{4387, 1096}"; }; }; 6B1185FD10068B150018F96F /* DetourCommon.cpp */ = { @@ -475,9 +605,9 @@ }; 6B137C7A0F7FCBE400459200 /* imgui.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1408}}"; - sepNavSelRange = "{1860, 10}"; - sepNavVisRange = "{1123, 1128}"; + sepNavIntBoundsRect = "{{0, 0}, {933, 1552}}"; + sepNavSelRange = "{2114, 0}"; + sepNavVisRange = "{1371, 906}"; }; }; 6B137C7B0F7FCBE400459200 /* MeshLoaderObj.h */ = { @@ -935,6 +1065,1320 @@ vrLen = 1482; vrLoc = 1466; }; + 6B1C8DB3121E8D970048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 51"; + rLen = 0; + rLoc = 2391; + rType = 0; + vrLen = 1382; + vrLoc = 1716; + }; + 6B1C8DB4121E8D970048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B1185FC10068B040018F96F /* DetourCommon.h */; + name = "DetourCommon.h: 239"; + rLen = 0; + rLoc = 6554; + rType = 0; + vrLen = 1370; + vrLoc = 5412; + }; + 6B1C8DB5121E8D970048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 620"; + rLen = 0; + rLoc = 16501; + rType = 0; + vrLen = 1070; + vrLoc = 15603; + }; + 6B1C8DB6121E8D970048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 49"; + rLen = 13; + rLoc = 2325; + rType = 0; + vrLen = 1473; + vrLoc = 1716; + }; + 6B1C8DB7121E8D970048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */; + name = "DetourNavMeshQuery.h: 51"; + rLen = 0; + rLoc = 2391; + rType = 0; + vrLen = 1382; + vrLoc = 1716; + }; + 6B1C8DB8121E8D970048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B1185FC10068B040018F96F /* DetourCommon.h */; + name = "DetourCommon.h: 239"; + rLen = 0; + rLoc = 6554; + rType = 0; + vrLen = 1370; + vrLoc = 5412; + }; + 6B1C8DB9121E8D970048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 611"; + rLen = 0; + rLoc = 16371; + rType = 0; + vrLen = 1117; + vrLoc = 15797; + }; + 6B1C8DBB121E8E430048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 620"; + rLen = 0; + rLoc = 16501; + rType = 0; + vrLen = 1130; + vrLoc = 15797; + }; + 6B1C8DBE121E8E9F0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 622"; + rLen = 0; + rLoc = 16501; + rType = 0; + vrLen = 1128; + vrLoc = 15797; + }; + 6B1C8DBF121E8F610048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B1185FC10068B040018F96F /* DetourCommon.h */; + name = "DetourCommon.h: 196"; + rLen = 0; + rLoc = 4927; + rType = 0; + vrLen = 1096; + vrLoc = 4387; + }; + 6B1C8DC0121E8F610048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B624169103434880002E346 /* RecastMeshDetail.cpp */; + name = "RecastMeshDetail.cpp: 66"; + rLen = 0; + rLoc = 1924; + rType = 0; + vrLen = 794; + vrLoc = 1310; + }; + 6B1C8DC1121E8F610048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 520"; + rLen = 0; + rLoc = 13662; + rType = 0; + vrLen = 832; + vrLoc = 13363; + }; + 6B1C8DC2121E8F610048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B624169103434880002E346 /* RecastMeshDetail.cpp */; + name = "RecastMeshDetail.cpp: 66"; + rLen = 0; + rLoc = 1924; + rType = 0; + vrLen = 794; + vrLoc = 1310; + }; + 6B1C8DC3121E8F610048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 519"; + rLen = 0; + rLoc = 13662; + rType = 0; + vrLen = 822; + vrLoc = 13363; + }; + 6B1C8DC5121E902F0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B1C8DC6121E902F0048697F /* mathutil.cpp */; + name = "mathutil.cpp: 257"; + rLen = 0; + rLoc = 6225; + rType = 0; + vrLen = 767; + vrLoc = 5605; + }; + 6B1C8DC6121E902F0048697F /* mathutil.cpp */ = { + isa = PBXFileReference; + name = mathutil.cpp; + path = /Users/memon/Code/polymovetest2/mathutil.cpp; + sourceTree = ""; + }; + 6B1C8DC7121E902F0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 519"; + rLen = 0; + rLoc = 13662; + rType = 0; + vrLen = 822; + vrLoc = 13363; + }; + 6B1C8DC8121E902F0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B1C8DC9121E902F0048697F /* mathutil.cpp */; + name = "mathutil.cpp: 257"; + rLen = 0; + rLoc = 6225; + rType = 0; + vrLen = 767; + vrLoc = 5605; + }; + 6B1C8DC9121E902F0048697F /* mathutil.cpp */ = { + isa = PBXFileReference; + name = mathutil.cpp; + path = /Users/memon/Code/polymovetest2/mathutil.cpp; + sourceTree = ""; + }; + 6B1C8DCA121E902F0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 639"; + rLen = 0; + rLoc = 16501; + rType = 0; + vrLen = 1101; + vrLoc = 16314; + }; + 6B1C8DCC121E91550048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 637"; + rLen = 0; + rLoc = 16501; + rType = 0; + vrLen = 1065; + vrLoc = 16314; + }; + 6B1C8DCF121E91EA0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 638"; + rLen = 0; + rLoc = 16501; + rType = 0; + vrLen = 1104; + vrLoc = 16314; + }; + 6B1C8DD1121E929F0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 638"; + rLen = 0; + rLoc = 16501; + rType = 0; + vrLen = 1068; + vrLoc = 16314; + }; + 6B1C8DD4121E96CE0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 529"; + rLen = 0; + rLoc = 13662; + rType = 0; + vrLen = 763; + vrLoc = 13659; + }; + 6B1C8DD6121E97B70048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 634"; + rLen = 0; + rLoc = 16501; + rType = 0; + vrLen = 1094; + vrLoc = 16569; + }; + 6B1C8DD8121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 520"; + rLen = 0; + rLoc = 13873; + rType = 0; + vrLen = 860; + vrLoc = 13152; + }; + 6B1C8DD9121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 41"; + rLen = 5; + rLoc = 1370; + rType = 0; + vrLen = 833; + vrLoc = 1013; + }; + 6B1C8DDA121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 372"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 730; + vrLoc = 8366; + }; + 6B1C8DDB121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */; + name = "DetourNavMeshQuery.cpp: 520"; + rLen = 0; + rLoc = 13873; + rType = 0; + vrLen = 860; + vrLoc = 13152; + }; + 6B1C8DDC121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 34"; + rLen = 0; + rLoc = 1097; + rType = 0; + vrLen = 828; + vrLoc = 1075; + }; + 6B1C8DDD121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 210"; + rLen = 0; + rLoc = 5364; + rType = 0; + vrLen = 950; + vrLoc = 4878; + }; + 6B1C8DDE121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 49"; + rLen = 0; + rLoc = 1584; + rType = 0; + vrLen = 820; + vrLoc = 1075; + }; + 6B1C8DDF121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 342"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 780; + vrLoc = 8039; + }; + 6B1C8DE0121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 53"; + rLen = 0; + rLoc = 1739; + rType = 0; + vrLen = 755; + vrLoc = 1039; + }; + 6B1C8DE1121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 390"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 886; + vrLoc = 9108; + }; + 6B1C8DE2121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 40"; + rLen = 0; + rLoc = 1376; + rType = 0; + vrLen = 767; + vrLoc = 1039; + }; + 6B1C8DE3121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 390"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 849; + vrLoc = 9108; + }; + 6B1C8DE4121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 40"; + rLen = 0; + rLoc = 1299; + rType = 0; + vrLen = 824; + vrLoc = 1013; + }; + 6B1C8DE5121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 407"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 863; + vrLoc = 9418; + }; + 6B1C8DE6121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 40"; + rLen = 0; + rLoc = 1315; + rType = 0; + vrLen = 823; + vrLoc = 1013; + }; + 6B1C8DE7121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 435"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 1119; + vrLoc = 10101; + }; + 6B1C8DE8121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 42"; + rLen = 0; + rLoc = 1377; + rType = 0; + vrLen = 833; + vrLoc = 1013; + }; + 6B1C8DE9121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 372"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 730; + vrLoc = 8366; + }; + 6B1C8DEA121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 41"; + rLen = 5; + rLoc = 1370; + rType = 0; + vrLen = 833; + vrLoc = 1013; + }; + 6B1C8DEB121EA3470048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 451"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 867; + vrLoc = 10390; + }; + 6B1C8DEF121EA9570048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "warning: unused variable 't'"; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + rLen = 0; + rLoc = 228; + rType = 1; + }; + 6B1C8DF0121EA9570048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 454"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 697; + vrLoc = 10549; + }; + 6B1C8DF2121EA9A90048697F /* CrowdTool.cpp:229 */ = { + isa = PBXFileBreakpoint; + actions = ( + ); + breakpointStyle = 0; + continueAfterActions = 0; + countType = 0; + delayBeforeContinue = 0; + fileReference = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + functionName = "processSamples(ObstacleBody* agent, const float vmax, const ObstacleBody* obs, const int nobs, RVODebugData* rvo, const float* spos, const float cs, const int nspos, float* res)"; + hitCount = 0; + ignoreCount = 0; + lineNumber = 229; + modificationTime = 303999401.506006; + state = 1; + }; + 6B1C8DF4121EA9B00048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 455"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 889; + vrLoc = 10649; + }; + 6B1C8DF7121EAEAD0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 460"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 799; + vrLoc = 10724; + }; + 6B1C8DFC121EB0D10048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 161"; + rLen = 8; + rLoc = 4741; + rType = 0; + vrLen = 612; + vrLoc = 3272; + }; + 6B1C8DFD121EB0D10048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1021"; + rLen = 0; + rLoc = 23415; + rType = 0; + vrLen = 961; + vrLoc = 24090; + }; + 6B1C8DFE121EB0D10048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1016"; + rLen = 0; + rLoc = 23451; + rType = 0; + vrLen = 968; + vrLoc = 23962; + }; + 6B1C8DFF121EB0D10048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 95"; + rLen = 25; + rLoc = 2407; + rType = 0; + vrLen = 584; + vrLoc = 2003; + }; + 6B1C8E00121EB0D10048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1021"; + rLen = 0; + rLoc = 23415; + rType = 0; + vrLen = 961; + vrLoc = 24090; + }; + 6B1C8E01121EB0D10048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 161"; + rLen = 8; + rLoc = 4741; + rType = 0; + vrLen = 612; + vrLoc = 3272; + }; + 6B1C8E02121EB0D10048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1333"; + rLen = 0; + rLoc = 30937; + rType = 0; + vrLen = 1072; + vrLoc = 31197; + }; + 6B1C8E03121EB1390048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1012"; + rLen = 0; + rLoc = 23191; + rType = 0; + vrLen = 1067; + vrLoc = 23963; + }; + 6B1C8E04121EB1430048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1012"; + rLen = 0; + rLoc = 23191; + rType = 0; + vrLen = 1067; + vrLoc = 23963; + }; + 6B1C8E05121EB1A30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1011"; + rLen = 0; + rLoc = 23112; + rType = 0; + vrLen = 921; + vrLoc = 23098; + }; + 6B1C8E06121EB1A30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1011"; + rLen = 0; + rLoc = 23112; + rType = 0; + vrLen = 921; + vrLoc = 23098; + }; + 6B1C8E07121EB1A30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 160"; + rLen = 0; + rLoc = 4734; + rType = 0; + vrLen = 612; + vrLoc = 3272; + }; + 6B1C8E08121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 92"; + rLen = 0; + rLoc = 2493; + rType = 0; + vrLen = 900; + vrLoc = 1998; + }; + 6B1C8E09121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 657"; + rLen = 7; + rLoc = 17858; + rType = 0; + vrLen = 941; + vrLoc = 17624; + }; + 6B1C8E0A121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463111E6144400FA177B /* Sample_SoloMeshTiled.h */; + name = "Sample_SoloMeshTiled.h: 72"; + rLen = 25; + rLoc = 2060; + rType = 0; + vrLen = 796; + vrLoc = 1753; + }; + 6B1C8E0B121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 634"; + rLen = 0; + rLoc = 18293; + rType = 0; + vrLen = 1042; + vrLoc = 18068; + }; + 6B1C8E0C121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF4441121C3D26008CFCDF /* SampleInterfaces.cpp */; + name = "SampleInterfaces.cpp: 217"; + rLen = 0; + rLoc = 3896; + rType = 0; + vrLen = 646; + vrLoc = 3602; + }; + 6B1C8E0D121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */; + name = "SampleInterfaces.h: 65"; + rLen = 0; + rLoc = 2391; + rType = 0; + vrLen = 1271; + vrLoc = 1685; + }; + 6B1C8E0E121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 26"; + rLen = 0; + rLoc = 1039; + rType = 0; + vrLen = 1258; + vrLoc = 0; + }; + 6B1C8E0F121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 652"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 768; + vrLoc = 14830; + }; + 6B1C8E10121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 26"; + rLen = 0; + rLoc = 1039; + rType = 0; + vrLen = 957; + vrLoc = 521; + }; + 6B1C8E11121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; + name = "Sample_TileMesh.h: 92"; + rLen = 0; + rLoc = 2493; + rType = 0; + vrLen = 900; + vrLoc = 1998; + }; + 6B1C8E12121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 657"; + rLen = 7; + rLoc = 17858; + rType = 0; + vrLen = 941; + vrLoc = 17624; + }; + 6B1C8E13121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463111E6144400FA177B /* Sample_SoloMeshTiled.h */; + name = "Sample_SoloMeshTiled.h: 72"; + rLen = 25; + rLoc = 2060; + rType = 0; + vrLen = 796; + vrLoc = 1753; + }; + 6B1C8E14121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 634"; + rLen = 0; + rLoc = 18293; + rType = 0; + vrLen = 1042; + vrLoc = 18068; + }; + 6B1C8E15121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 226"; + rLen = 0; + rLoc = 4893; + rType = 0; + vrLen = 511; + vrLoc = 4299; + }; + 6B1C8E16121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1011"; + rLen = 0; + rLoc = 23112; + rType = 0; + vrLen = 921; + vrLoc = 23098; + }; + 6B1C8E17121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 189"; + rLen = 26; + rLoc = 3930; + rType = 0; + vrLen = 781; + vrLoc = 3726; + }; + 6B1C8E18121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 652"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 768; + vrLoc = 14830; + }; + 6B1C8E19121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 202"; + rLen = 0; + rLoc = 4349; + rType = 0; + vrLen = 804; + vrLoc = 3823; + }; + 6B1C8E1A121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */; + name = "SampleInterfaces.h: 68"; + rLen = 0; + rLoc = 2608; + rType = 0; + vrLen = 1178; + vrLoc = 1984; + }; + 6B1C8E1B121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF4441121C3D26008CFCDF /* SampleInterfaces.cpp */; + name = "SampleInterfaces.cpp: 217"; + rLen = 0; + rLoc = 3896; + rType = 0; + vrLen = 646; + vrLoc = 3602; + }; + 6B1C8E1C121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */; + name = "SampleInterfaces.h: 65"; + rLen = 0; + rLoc = 2391; + rType = 0; + vrLen = 1271; + vrLoc = 1685; + }; + 6B1C8E1D121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 26"; + rLen = 0; + rLoc = 1039; + rType = 0; + vrLen = 1258; + vrLoc = 0; + }; + 6B1C8E1E121EB4FF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1040"; + rLen = 0; + rLoc = 23849; + rType = 0; + vrLen = 871; + vrLoc = 24375; + }; + 6B1C8E24121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7A0F7FCBE400459200 /* imgui.h */; + name = "imgui.h: 60"; + rLen = 0; + rLoc = 2114; + rType = 0; + vrLen = 906; + vrLoc = 1371; + }; + 6B1C8E25121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */; + name = "SampleInterfaces.h: 101"; + rLen = 0; + rLoc = 3380; + rType = 0; + vrLen = 775; + vrLoc = 2585; + }; + 6B1C8E26121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 123"; + rLen = 11; + rLoc = 2834; + rType = 0; + vrLen = 458; + vrLoc = 2585; + }; + 6B1C8E27121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BCF32351104CD05009445BF /* OffMeshConnectionTool.cpp */; + name = "OffMeshConnectionTool.cpp: 71"; + rLen = 57; + rLoc = 1851; + rType = 0; + vrLen = 528; + vrLoc = 1576; + }; + 6B1C8E28121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 615"; + rLen = 0; + rLoc = 17944; + rType = 0; + vrLen = 579; + vrLoc = 17618; + }; + 6B1C8E29121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: invalid conversion from 'const SampleGraph*' to 'SampleGraph*'"; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + rLen = 1; + rLoc = 1407; + rType = 1; + }; + 6B1C8E2A121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */; + name = "SampleInterfaces.h: 101"; + rLen = 0; + rLoc = 3380; + rType = 0; + vrLen = 775; + vrLoc = 2585; + }; + 6B1C8E2B121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 123"; + rLen = 11; + rLoc = 2834; + rType = 0; + vrLen = 458; + vrLoc = 2585; + }; + 6B1C8E2C121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1387"; + rLen = 0; + rLoc = 33620; + rType = 0; + vrLen = 1012; + vrLoc = 33172; + }; + 6B1C8E2D121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BCF32351104CD05009445BF /* OffMeshConnectionTool.cpp */; + name = "OffMeshConnectionTool.cpp: 71"; + rLen = 57; + rLoc = 1851; + rType = 0; + vrLen = 528; + vrLoc = 1576; + }; + 6B1C8E2E121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 615"; + rLen = 0; + rLoc = 17944; + rType = 0; + vrLen = 579; + vrLoc = 17618; + }; + 6B1C8E2F121EB6D30048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1382"; + rLen = 0; + rLoc = 33268; + rType = 0; + vrLen = 782; + vrLoc = 33573; + }; + 6B1C8E30121EB9310048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 637"; + rLen = 171; + rLoc = 18328; + rType = 0; + vrLen = 734; + vrLoc = 17946; + }; + 6B1C8E31121EB9310048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1394"; + rLen = 0; + rLoc = 33620; + rType = 0; + vrLen = 789; + vrLoc = 33496; + }; + 6B1C8E32121EB9310048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 637"; + rLen = 171; + rLoc = 18328; + rType = 0; + vrLen = 734; + vrLoc = 17946; + }; + 6B1C8E33121EB9310048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1400"; + rLen = 0; + rLoc = 33945; + rType = 0; + vrLen = 675; + vrLoc = 33614; + }; + 6B1C8E37121EBA8A0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1411"; + rLen = 0; + rLoc = 33620; + rType = 0; + vrLen = 995; + vrLoc = 34273; + }; + 6B1C8E38121EBA9F0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1411"; + rLen = 0; + rLoc = 33620; + rType = 0; + vrLen = 1010; + vrLoc = 34255; + }; + 6B1C8E3B121EBB450048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1411"; + rLen = 0; + rLoc = 33620; + rType = 0; + vrLen = 856; + vrLoc = 34255; + }; + 6B1C8E3E121EBB710048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1411"; + rLen = 0; + rLoc = 33620; + rType = 0; + vrLen = 728; + vrLoc = 33961; + }; + 6B1C8E40121EBB900048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1414"; + rLen = 0; + rLoc = 33620; + rType = 0; + vrLen = 728; + vrLoc = 33961; + }; + 6B1C8E43121EBC510048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1418"; + rLen = 0; + rLoc = 33632; + rType = 0; + vrLen = 843; + vrLoc = 34180; + }; + 6B1C8E45121EBC990048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1419"; + rLen = 0; + rLoc = 33633; + rType = 0; + vrLen = 817; + vrLoc = 34238; + }; + 6B1C8E47121EBC9E0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1419"; + rLen = 0; + rLoc = 33633; + rType = 0; + vrLen = 817; + vrLoc = 34238; + }; + 6B1C8E4A121EBCD10048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1389"; + rLen = 0; + rLoc = 33620; + rType = 0; + vrLen = 781; + vrLoc = 33614; + }; + 6B1C8E4C121EBD8A0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1419"; + rLen = 0; + rLoc = 33633; + rType = 0; + vrLen = 891; + vrLoc = 34262; + }; + 6B1C8E4E121EBD9E0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1424"; + rLen = 0; + rLoc = 33800; + rType = 0; + vrLen = 873; + vrLoc = 34280; + }; + 6B1C8E56121EBEBF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 188"; + rLen = 11; + rLoc = 3943; + rType = 0; + vrLen = 573; + vrLoc = 3703; + }; + 6B1C8E57121EBEBF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1476"; + rLen = 17; + rLoc = 35046; + rType = 0; + vrLen = 989; + vrLoc = 35409; + }; + 6B1C8E58121EBEBF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1476"; + rLen = 17; + rLoc = 35046; + rType = 0; + vrLen = 989; + vrLoc = 35409; + }; + 6B1C8E59121EBEBF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 188"; + rLen = 11; + rLoc = 3943; + rType = 0; + vrLen = 573; + vrLoc = 3703; + }; + 6B1C8E5A121EBEBF0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1473"; + rLen = 0; + rLoc = 34787; + rType = 0; + vrLen = 987; + vrLoc = 35570; + }; + 6B1C8E5C121EBF320048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1477"; + rLen = 0; + rLoc = 34846; + rType = 0; + vrLen = 838; + vrLoc = 35758; + }; + 6B1C8E5F121EBF540048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1479"; + rLen = 0; + rLoc = 34887; + rType = 0; + vrLen = 870; + vrLoc = 35758; + }; + 6B1C8E61121FD20C0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1466"; + rLen = 0; + rLoc = 34517; + rType = 0; + vrLen = 911; + vrLoc = 35718; + }; + 6B1C8E62121FD20C0048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1466"; + rLen = 0; + rLoc = 34516; + rType = 0; + vrLen = 910; + vrLoc = 35718; + }; + 6B1C8E641221BC080048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1466"; + rLen = 0; + rLoc = 34516; + rType = 0; + vrLen = 910; + vrLoc = 35718; + }; + 6B1C8E651221BC080048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */; + name = "SampleInterfaces.h: 101"; + rLen = 0; + rLoc = 3380; + rType = 0; + vrLen = 774; + vrLoc = 2585; + }; + 6B1C8E661221BC080048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 1466"; + rLen = 0; + rLoc = 34516; + rType = 0; + vrLen = 910; + vrLoc = 35718; + }; + 6B1C8E671221BC080048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */; + name = "SampleInterfaces.h: 69"; + rLen = 0; + rLoc = 2422; + rType = 0; + vrLen = 931; + vrLoc = 2244; + }; + 6B1C8E691221BC910048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */; + name = "SampleInterfaces.h: 69"; + rLen = 0; + rLoc = 2422; + rType = 0; + vrLen = 931; + vrLoc = 2244; + }; + 6B1C8E6A1221BC910048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 30"; + rLen = 0; + rLoc = 1087; + rType = 0; + vrLen = 688; + vrLoc = 789; + }; + 6B1C8E6B1221BC910048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 295"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 648; + vrLoc = 7032; + }; + 6B1C8E6C1221BC910048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */; + name = "SampleInterfaces.h: 69"; + rLen = 0; + rLoc = 2422; + rType = 0; + vrLen = 931; + vrLoc = 2244; + }; + 6B1C8E6D1221BC910048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 295"; + rLen = 0; + rLoc = 5789; + rType = 0; + vrLen = 648; + vrLoc = 7032; + }; + 6B1C8E6E1221BC910048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 30"; + rLen = 0; + rLoc = 1087; + rType = 0; + vrLen = 688; + vrLoc = 789; + }; + 6B1C8E6F1221BC910048697F /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 395"; + rLen = 0; + rLoc = 9725; + rType = 0; + vrLen = 778; + vrLoc = 9256; + }; 6B25B6100FFA62AD004F1BC4 /* Sample.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {933, 2128}}"; @@ -959,17 +2403,17 @@ }; 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1696}}"; - sepNavSelRange = "{1468, 23}"; - sepNavVisRange = "{1177, 732}"; + sepNavIntBoundsRect = "{{0, 0}, {933, 1728}}"; + sepNavSelRange = "{2493, 0}"; + sepNavVisRange = "{1998, 900}"; sepNavWindowFrame = "{{15, 78}, {1011, 695}}"; }; }; 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 18272}}"; - sepNavSelRange = "{16062, 0}"; - sepNavVisRange = "{14968, 1243}"; + sepNavIntBoundsRect = "{{0, 0}, {1223, 18768}}"; + sepNavSelRange = "{17858, 7}"; + sepNavVisRange = "{17624, 941}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; @@ -1037,9 +2481,9 @@ }; 6B624169103434880002E346 /* RecastMeshDetail.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 18672}}"; - sepNavSelRange = "{1091, 26}"; - sepNavVisRange = "{133, 1134}"; + sepNavIntBoundsRect = "{{0, 0}, {985, 19472}}"; + sepNavSelRange = "{1924, 0}"; + sepNavVisRange = "{1310, 794}"; sepNavWindowFrame = "{{61, 36}, {1011, 695}}"; }; }; @@ -1158,15 +2602,15 @@ 6B98463111E6144400FA177B /* Sample_SoloMeshTiled.h */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {933, 2048}}"; - sepNavSelRange = "{2324, 0}"; - sepNavVisRange = "{1879, 787}"; + sepNavSelRange = "{2060, 25}"; + sepNavVisRange = "{1753, 796}"; }; }; 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 17488}}"; - sepNavSelRange = "{11313, 0}"; - sepNavVisRange = "{10838, 1325}"; + sepNavIntBoundsRect = "{{0, 0}, {950, 18288}}"; + sepNavSelRange = "{18328, 171}"; + sepNavVisRange = "{17946, 734}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; @@ -1374,16 +2818,16 @@ }; 6BAF3C571211663A008CFCDF /* CrowdTool.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 3040}}"; - sepNavSelRange = "{1371, 14}"; - sepNavVisRange = "{964, 705}"; + sepNavIntBoundsRect = "{{0, 0}, {933, 3904}}"; + sepNavSelRange = "{1087, 0}"; + sepNavVisRange = "{789, 688}"; }; }; 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 21304}}"; - sepNavSelRange = "{25230, 51}"; - sepNavVisRange = "{24965, 706}"; + sepNavIntBoundsRect = "{{0, 0}, {933, 22544}}"; + sepNavSelRange = "{9725, 0}"; + sepNavVisRange = "{9256, 778}"; }; }; 6BAF3CB012116AD9008CFCDF /* PBXTextBookmark */ = { @@ -1456,7 +2900,7 @@ vrLen = 860; vrLoc = 3128; }; - 6BAF3EB31212906D008CFCDF /* CrowdTool.cpp:774 */ = { + 6BAF3EB31212906D008CFCDF /* CrowdTool.cpp:229 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -1468,7 +2912,7 @@ functionName = "CrowdManager::update(const float dt, dtNavMesh* nmesh)"; hitCount = 0; ignoreCount = 0; - lineNumber = 774; + lineNumber = 229; location = Recast; modificationTime = 303925757.09387; state = 1; @@ -1508,7 +2952,7 @@ fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; name = "CrowdTool.h: 150"; rLen = 0; - rLoc = 3523; + rLoc = 4750; rType = 0; vrLen = 595; vrLoc = 2855; @@ -1518,23 +2962,23 @@ fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; name = "CrowdTool.cpp: 1049"; rLen = 0; - rLoc = 25740; + rLoc = 25353; rType = 0; vrLen = 905; vrLoc = 25143; }; 6BAF40D912196A25008CFCDF /* DetourNavMeshQuery.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 6544}}"; - sepNavSelRange = "{7712, 0}"; - sepNavVisRange = "{7298, 1629}"; + sepNavIntBoundsRect = "{{0, 0}, {933, 6624}}"; + sepNavSelRange = "{2391, 0}"; + sepNavVisRange = "{1716, 1382}"; }; }; 6BAF40DA12196A3D008CFCDF /* DetourNavMeshQuery.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 37968}}"; - sepNavSelRange = "{2618, 0}"; - sepNavVisRange = "{1466, 1482}"; + sepNavIntBoundsRect = "{{0, 0}, {933, 38640}}"; + sepNavSelRange = "{13873, 0}"; + sepNavVisRange = "{13152, 860}"; }; }; 6BAF40F412197F3D008CFCDF /* PBXTextBookmark */ = { @@ -1766,16 +3210,16 @@ }; 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1424}}"; - sepNavSelRange = "{1220, 0}"; - sepNavVisRange = "{923, 987}"; + sepNavIntBoundsRect = "{{0, 0}, {933, 1648}}"; + sepNavSelRange = "{2422, 0}"; + sepNavVisRange = "{2244, 931}"; }; }; 6BAF4441121C3D26008CFCDF /* SampleInterfaces.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 4320}}"; - sepNavSelRange = "{1238, 0}"; - sepNavVisRange = "{809, 645}"; + sepNavIntBoundsRect = "{{0, 0}, {933, 4976}}"; + sepNavSelRange = "{3896, 0}"; + sepNavVisRange = "{3602, 646}"; }; }; 6BAF4446121C40AC008CFCDF /* PBXTextBookmark */ = { @@ -1803,7 +3247,7 @@ fRef = 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */; name = "SampleInterfaces.h: 30"; rLen = 14; - rLoc = 1265; + rLoc = 1320; rType = 0; vrLen = 811; vrLoc = 842; @@ -1990,7 +3434,7 @@ fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; name = "CrowdTool.h: 44"; rLen = 14; - rLoc = 1371; + rLoc = 1456; rType = 0; vrLen = 705; vrLoc = 964; @@ -2270,7 +3714,7 @@ fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; name = "CrowdTool.cpp: 1049"; rLen = 51; - rLoc = 25230; + rLoc = 24843; rType = 0; vrLen = 657; vrLoc = 24965; @@ -2300,7 +3744,7 @@ fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; name = "CrowdTool.cpp: 1064"; rLen = 0; - rLoc = 25657; + rLoc = 25270; rType = 0; vrLen = 949; vrLoc = 25230; @@ -2320,7 +3764,7 @@ fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; name = "CrowdTool.cpp: 1049"; rLen = 51; - rLoc = 25230; + rLoc = 24843; rType = 0; vrLen = 657; vrLoc = 24965; @@ -2550,7 +3994,7 @@ fRef = 6BAF4440121C3D0A008CFCDF /* SampleInterfaces.h */; name = "SampleInterfaces.h: 30"; rLen = 0; - rLoc = 1220; + rLoc = 1275; rType = 0; vrLen = 987; vrLoc = 923; @@ -3543,9 +4987,9 @@ }; 6BCF32351104CD05009445BF /* OffMeshConnectionTool.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {826, 2640}}"; + sepNavIntBoundsRect = "{{0, 0}, {933, 2640}}"; sepNavSelRange = "{1851, 57}"; - sepNavVisRange = "{1578, 612}"; + sepNavVisRange = "{1576, 528}"; }; }; 6BF5F23911747606000502A6 /* Filelist.cpp */ = { diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 index 38f40e1..701c2c3 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 @@ -283,14 +283,13 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 17 - 11 + 59 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {264, 660}} + {{0, 646}, {264, 660}} PBXTopSmartGroupGIDs @@ -325,7 +324,7 @@ PBXProjectModuleGUID 6B8632A30F78115100E2684A PBXProjectModuleLabel - DetourNavMeshQuery.cpp + CrowdTool.cpp PBXSplitModuleInNavigatorKey Split0 @@ -333,11 +332,11 @@ PBXProjectModuleGUID 6B8632A40F78115100E2684A PBXProjectModuleLabel - DetourNavMeshQuery.cpp + CrowdTool.cpp _historyCapacity 0 bookmark - 6B1C8DAF121E821F0048697F + 6B1C8E6F1221BC910048697F history 6BBB4AA5115B4F3400CF791D @@ -356,7 +355,6 @@ 6BAF3CB012116AD9008CFCDF 6BAF3CB112116AD9008CFCDF 6BAF3CB412116AD9008CFCDF - 6BAF3DFC1211AEB2008CFCDF 6BAF3E781212869F008CFCDF 6BAF404F12140B4E008CFCDF 6BAF405112140B4E008CFCDF @@ -376,7 +374,6 @@ 6BAF4524121D1723008CFCDF 6BAF4525121D1723008CFCDF 6BAF4562121D1849008CFCDF - 6BAF457C121D19CB008CFCDF 6BAF457D121D19CB008CFCDF 6BAF457E121D19CB008CFCDF 6BAF457F121D19CB008CFCDF @@ -384,18 +381,13 @@ 6BAF4581121D19CB008CFCDF 6BAF4582121D19CB008CFCDF 6BAF4593121D1B18008CFCDF - 6BAF45AC121D2C03008CFCDF 6BAF45B8121D2F37008CFCDF 6BAF45E4121D7277008CFCDF 6BAF4604121D7388008CFCDF 6BAF4605121D7388008CFCDF - 6BAF4607121D7388008CFCDF - 6BAF461E121D746C008CFCDF 6BAF4637121D74D3008CFCDF - 6BAF46A0121D8B41008CFCDF 6BAF46A1121D8B41008CFCDF 6BAF46A2121D8B41008CFCDF - 6BAF46A3121D8B41008CFCDF 6BAF46D3121D8FF1008CFCDF 6BAF4739121D9FBE008CFCDF 6BAF473A121D9FBE008CFCDF @@ -403,17 +395,25 @@ 6BAF475A121DA31D008CFCDF 6BAF475B121DA31D008CFCDF 6BAF475C121DA31D008CFCDF - 6BAF475D121DA31D008CFCDF - 6BAF475E121DA31D008CFCDF - 6BAF475F121DA31D008CFCDF - 6BAF4760121DA31D008CFCDF 6BAF4778121DCAF9008CFCDF - 6BAF478E121DD150008CFCDF 6B1C8D82121E80950048697F 6B1C8DA2121E813D0048697F 6B1C8DA3121E813D0048697F - 6B1C8DAD121E821F0048697F - 6B1C8DA8121E81C40048697F + 6B1C8DB3121E8D970048697F + 6B1C8DBF121E8F610048697F + 6B1C8DC0121E8F610048697F + 6B1C8DC5121E902F0048697F + 6B1C8DD8121EA3470048697F + 6B1C8E08121EB4FF0048697F + 6B1C8E09121EB4FF0048697F + 6B1C8E0A121EB4FF0048697F + 6B1C8E0C121EB4FF0048697F + 6B1C8E24121EB6D30048697F + 6B1C8E27121EB6D30048697F + 6B1C8E30121EB9310048697F + 6B1C8E691221BC910048697F + 6B1C8E6A1221BC910048697F + 6B1C8E6B1221BC910048697F prevStack @@ -458,11 +458,7 @@ 6BAF3B1512112F65008CFCDF 6BAF3DAA1211882E008CFCDF 6BAF3E631211B713008CFCDF - 6BAF3F5F1213E45B008CFCDF 6BBB4AE2115B4F3400CF791D - 6BBB4AF7115B4F3400CF791D - 6BAF405912140B4E008CFCDF - 6BAF40A612142254008CFCDF 6BAF411712197F3D008CFCDF 6BAF41801219811E008CFCDF 6BAF41DA121A5D13008CFCDF @@ -481,37 +477,43 @@ 6BAF410212197F3D008CFCDF 6BAF44FA121C5713008CFCDF 6BAF45E9121D7277008CFCDF - 6BAF4455121C40AC008CFCDF 6BAF447E121C4895008CFCDF 6BAF473D121D9FBE008CFCDF 6BAF4749121D9FED008CFCDF 6BAF4762121DA31D008CFCDF 6BAF4767121DA31D008CFCDF 6BAF4768121DA31D008CFCDF - 6BAF4797121DD34D008CFCDF - 6B1C8D84121E80950048697F 6B1C8D85121E80950048697F - 6B1C8D86121E80950048697F 6B1C8D87121E80950048697F - 6B1C8D88121E80950048697F 6B1C8D89121E80950048697F - 6B1C8D8A121E80950048697F 6B1C8D8B121E80950048697F - 6B1C8D8C121E80950048697F 6B1C8D8D121E80950048697F - 6B1C8D8E121E80950048697F 6B1C8D8F121E80950048697F - 6B1C8D90121E80950048697F 6B1C8D91121E80950048697F - 6B1C8D92121E80950048697F 6B1C8D93121E80950048697F - 6B1C8D94121E80950048697F 6B1C8D95121E80950048697F 6B1C8D96121E80950048697F 6B1C8DA5121E813D0048697F 6B1C8DA6121E813D0048697F - 6B1C8DAA121E81C40048697F 6B1C8DAE121E821F0048697F + 6B1C8DB6121E8D970048697F + 6B1C8DB7121E8D970048697F + 6B1C8DDB121EA3470048697F + 6B1C8E11121EB4FF0048697F + 6B1C8E12121EB4FF0048697F + 6B1C8E13121EB4FF0048697F + 6B1C8E14121EB4FF0048697F + 6B1C8E1B121EB4FF0048697F + 6B1C8E2A121EB6D30048697F + 6B1C8E2B121EB6D30048697F + 6B1C8E2D121EB6D30048697F + 6B1C8E2E121EB6D30048697F + 6B1C8E58121EBEBF0048697F + 6B1C8E59121EBEBF0048697F + 6B1C8E661221BC080048697F + 6B1C8E6C1221BC910048697F + 6B1C8E6D1221BC910048697F + 6B1C8E6E1221BC910048697F SplitCount @@ -525,18 +527,18 @@ GeometryConfiguration Frame - {{0, 0}, {994, 606}} + {{0, 0}, {994, 505}} RubberWindowFrame 0 59 1280 719 0 0 1280 778 Module PBXNavigatorGroup Proportion - 606pt + 505pt Proportion - 67pt + 168pt Tabs @@ -604,7 +606,7 @@ GeometryConfiguration Frame - {{10, 27}, {994, 40}} + {{10, 27}, {994, 141}} RubberWindowFrame 0 59 1280 719 0 0 1280 778 diff --git a/RecastDemo/Include/CrowdTool.h b/RecastDemo/Include/CrowdTool.h index cb58154..41ae2aa 100644 --- a/RecastDemo/Include/CrowdTool.h +++ b/RecastDemo/Include/CrowdTool.h @@ -24,19 +24,20 @@ // Tool to create crowds. - enum BodyType { BODY_CIRCLE = 0, - BODY_CAPSULE = 1, + BODY_SEGMENT = 1, }; -struct Body +struct ObstacleBody { float p[3], q[3]; // Position of the obstacle float vel[3]; // Velocity of the obstacle float dvel[3]; // Velocity of the obstacle float rad; // Radius of the obstacle + float dp[3], np[3]; // Use for side selection during sampling. + bool touch; int type; // Type of the obstacle (see ObstacleType) }; @@ -44,9 +45,9 @@ struct Body static const int RVO_SAMPLE_RAD = 15; static const int MAX_RVO_SAMPLES = (RVO_SAMPLE_RAD*2+1)*(RVO_SAMPLE_RAD*2+1) + 100; -struct RVO +struct RVODebugData { - inline RVO() : ns(0) {} + inline RVODebugData() : ns(0) {} float spos[MAX_RVO_SAMPLES*3]; float scs[MAX_RVO_SAMPLES]; float spen[MAX_RVO_SAMPLES]; @@ -90,11 +91,13 @@ struct Agent float npos[3]; float disp[3]; + float opts[3], opte[3]; + float maxspeed; float t; float var; - RVO rvo; + RVODebugData rvo; float colradius; float colcenter[3]; @@ -116,6 +119,59 @@ struct Agent unsigned char active; }; + +class SampleGraph +{ + static const int MAX_SAMPLES = 512; + float m_samples[MAX_SAMPLES]; + int m_hsamples; +public: + SampleGraph() : + m_hsamples(0) + { + for (int i = 0; i < MAX_SAMPLES; ++i) + m_samples[i] = 0; + } + + ~SampleGraph() + { + } + + inline void addSample(const float val) + { + m_hsamples = (m_hsamples+MAX_SAMPLES-1) % MAX_SAMPLES; + m_samples[m_hsamples] = val; + } + + inline int getSampleCount() const + { + return MAX_SAMPLES; + } + + inline float getSample(const int i) const + { + return m_samples[(m_hsamples+i) % MAX_SAMPLES]; + } + + inline float getSampleMin() const + { + float val = m_samples[0]; + for (int i = 1; i < MAX_SAMPLES; ++i) + if (m_samples[i] < val) + val = m_samples[i]; + return val; + } + + inline float getSampleMax() const + { + float val = m_samples[0]; + for (int i = 1; i < MAX_SAMPLES; ++i) + if (m_samples[i] > val) + val = m_samples[i]; + return val; + } +}; + enum UpdateFlags { CROWDMAN_ANTICIPATE_TURNS = 1, @@ -128,6 +184,10 @@ class CrowdManager static const int MAX_AGENTS = 32; Agent m_agents[MAX_AGENTS]; int m_shortcutIter; + + SampleGraph m_totalTime; + SampleGraph m_rvoTime; + public: CrowdManager(); ~CrowdManager(); @@ -140,6 +200,9 @@ public: void setMoveTarget(const int idx, const float* pos); void update(const float dt, unsigned int flags, dtNavMeshQuery* navquery); + + const SampleGraph* getTotalTimeGraph() const { return &m_totalTime; } + const SampleGraph* getRVOTimeGraph() const { return &m_rvoTime; } }; class CrowdTool : public SampleTool @@ -155,6 +218,7 @@ class CrowdTool : public SampleTool bool m_showCollisionSegments; bool m_showPath; bool m_showVO; + bool m_showOpt; bool m_expandOptions; bool m_anticipateTurns; @@ -164,7 +228,7 @@ class CrowdTool : public SampleTool bool m_run; CrowdManager m_crowd; - + enum ToolMode { TOOLMODE_CREATE, diff --git a/RecastDemo/Include/SampleInterfaces.h b/RecastDemo/Include/SampleInterfaces.h index c31a6fa..dac9df9 100644 --- a/RecastDemo/Include/SampleInterfaces.h +++ b/RecastDemo/Include/SampleInterfaces.h @@ -16,6 +16,9 @@ // 3. This notice may not be removed or altered from any source distribution. // +#ifndef SAMPLEINTERFACES_H +#define SAMPLEINTERFACES_H + #include "DebugDraw.h" #include "Recast.h" #include "RecastDump.h" @@ -62,6 +65,12 @@ public: virtual int getBuildTime(const rcBuilTimeLabel label); }; + +// TODO: Find better solution. This is useful for timing in some cases when the full build interface would be overkill. +rcTimeVal getPerfTime(); +int getPerfDeltaTimeUsec(const rcTimeVal start, const rcTimeVal end); + + // OpenGL debug draw implementation. class DebugDrawGL : public duDebugDraw { @@ -88,3 +97,6 @@ public: virtual bool write(const void* ptr, const size_t size); virtual bool read(void* ptr, const size_t size); }; + +#endif // SAMPLEINTERFACES_H + diff --git a/RecastDemo/Source/CrowdTool.cpp b/RecastDemo/Source/CrowdTool.cpp index b9650a0..eae9f40 100644 --- a/RecastDemo/Source/CrowdTool.cpp +++ b/RecastDemo/Source/CrowdTool.cpp @@ -29,6 +29,7 @@ #include "Sample.h" #include "DetourDebugDraw.h" #include "DetourCommon.h" +#include "SampleInterfaces.h" #ifdef WIN32 # define snprintf _snprintf @@ -197,7 +198,7 @@ static void normalizeArray(float* arr, const int n) arr[i] = dtClamp((arr[i]-minPen)*s, 0.0f, 1.0f); } -void normalizeSamples(RVO* rvo) +void normalizeSamples(RVODebugData* rvo) { normalizeArray(rvo->spen, rvo->ns); normalizeArray(rvo->svpen, rvo->ns); @@ -207,7 +208,7 @@ void normalizeSamples(RVO* rvo) } -void setDynCircleBody(Body* b, const float* pos, const float rad, const float* vel, const float* dvel) +void setDynCircleBody(ObstacleBody* b, const float* pos, const float rad, const float* vel, const float* dvel) { b->type = BODY_CIRCLE; dtVcopy(b->p, pos); @@ -216,7 +217,7 @@ void setDynCircleBody(Body* b, const float* pos, const float rad, const float* v b->rad = rad; } -void setStatCircleBody(Body* b, const float* pos, const float rad) +void setStatCircleBody(ObstacleBody* b, const float* pos, const float rad) { b->type = BODY_CIRCLE; dtVcopy(b->p, pos); @@ -225,14 +226,14 @@ void setStatCircleBody(Body* b, const float* pos, const float rad) b->rad = rad; } -void setStatCapsuleBody(Body* b, const float* p, const float* q, const float rad) +void setStatSegmentBody(ObstacleBody* b, const float* p, const float* q) { - b->type = BODY_CAPSULE; + b->type = BODY_SEGMENT; dtVcopy(b->p, p); dtVcopy(b->q, q); dtVset(b->vel, 0,0,0); dtVset(b->dvel, 0,0,0); - b->rad = rad; + b->rad = 0; } static const float VEL_WEIGHT = 2.0f; @@ -261,84 +262,66 @@ static int sweepCircleCircle(const float* c0, const float r0, const float* v, return 1; } -static int sweepCircleSegment(const float* c0, const float r0, const float* v, - const float* sa, const float* sb, const float sr, - float& tmin, float &tmax) +static void prepareBodies(const ObstacleBody* agent, ObstacleBody* obs, const int nobs) { - // equation parameters - float L[3], H[3]; - dtVsub(L, sb, sa); - dtVsub(H, c0, sa); - const float radius = r0+sr; - const float l2 = dtVdot2D(L, L); - const float r2 = radius * radius; - const float dl = dtVperp2D(v, L); - const float hl = dtVperp2D(H, L); - const float a = dl * dl; - const float b = 2.0f * hl * dl; - const float c = hl * hl - (r2 * l2); - float d = (b*b) - (4.0f * a * c); - - // infinite line missed by infinite ray. - if (d < 0.0f) - return 0; - - const float i2a = 1.0f/(2*a); - d = dtSqrt(d); - tmin = (-b - d) * i2a; - tmax = (-b + d) * i2a; - - // line missed by ray range. - /* if (tmax < 0.0f || tmin > 1.0f) - return 0;*/ - - // find what part of the ray was collided. - const float il2 = 1.0f / l2; - float Pedge[3]; - dtVmad(Pedge, c0, v, tmin); - dtVsub(H, Pedge, sa); - const float e0 = dtVdot2D(H, L) * il2; - dtVmad(Pedge, c0, v, tmax); - dtVsub(H, Pedge, sa); - const float e1 = dtVdot2D(H, L) * il2; - - if (e0 < 0.0f || e1 < 0.0f) + for (int i = 0; i < nobs; ++i) { - float ctmin, ctmax; - if (sweepCircleCircle(c0, r0, v, sa, sr, ctmin, ctmax)) + ObstacleBody* ob = &obs[i]; + + if (ob->type == BODY_CIRCLE) { - if (e0 < 0.0f && ctmin > tmin) - tmin = ctmin; - if (e1 < 0.0f && ctmax < tmax) - tmax = ctmax; + // Side + const float* pa = agent->p; + const float* pb = ob->p; + + const float orig[3] = {0,0}; + float dv[3]; + dtVsub(ob->dp,pb,pa); + dtVnormalize(ob->dp); + dtVsub(dv, ob->dvel, agent->dvel); + + const float a = dtTriArea2D(orig, ob->dp,dv); + if (a < 0.01f) + { + ob->np[0] = -ob->dp[2]; + ob->np[2] = ob->dp[0]; + } + else + { + ob->np[0] = ob->dp[2]; + ob->np[2] = -ob->dp[0]; + } } - else + else if (ob->type == BODY_SEGMENT) { - return 0; + // Precalc if the agent is really close to the segment. + const float r = 0.01f; + float t; + ob->touch = dtDistancePtSegSqr2D(agent->p, ob->p, ob->q, t) < dtSqr(r); } - } - - if (e0 > 1.0f || e1 > 1.0f) - { - float ctmin, ctmax; - if (sweepCircleCircle(c0, r0, v, sb, sr, ctmin, ctmax)) - { - if (e0 > 1.0f && ctmin > tmin) - tmin = ctmin; - if (e1 > 1.0f && ctmax < tmax) - tmax = ctmax; - } - else - { - return 0; - } - } - + } +} + +static int isectRaySeg(const float* ap, const float* u, + const float* bp, const float* bq, + float& t) +{ + float /*u[3]*/ v[3], w[3]; +// dtVsub(u,aq,ap); + dtVsub(v,bq,bp); + dtVsub(w,ap,bp); + float d = dtVperp2D(u,v); + if (fabsf(d) < 1e-6f) return 0; + d = 1.0f/d; + t = dtVperp2D(v,w) * d; + if (t < 0 || t > 1) return 0; + float s = dtVperp2D(u,w) * d; + if (s < 0 || s > 1) return 0; return 1; } -static void processSamples(Body* agent, const float vmax, - const Body* obs, const int nobs, RVO* rvo, +static void processSamples(ObstacleBody* agent, const float vmax, + const ObstacleBody* obs, const int nobs, RVODebugData* rvo, const float* spos, const float cs, const int nspos, float* res) { @@ -365,7 +348,7 @@ static void processSamples(Body* agent, const float vmax, for (int i = 0; i < nobs; ++i) { - const Body* ob = &obs[i]; + const ObstacleBody* ob = &obs[i]; float htmin = 0, htmax = 0; if (ob->type == BODY_CIRCLE) @@ -378,30 +361,7 @@ static void processSamples(Body* agent, const float vmax, dtVsub(vab, vab, ob->vel); // Side - // NOTE: dp, and dv are constant over the whole calculation, - // they can be precomputed per object. - const float* pa = agent->p; - const float* pb = ob->p; - - const float orig[3] = {0,0}; - float dp[3],dv[3],np[3]; - dtVsub(dp,pb,pa); - dtVnormalize(dp); - dtVsub(dv, ob->dvel, agent->dvel); - - const float a = dtTriArea2D(orig, dp,dv); - if (a < 0.01f) - { - np[0] = -dp[2]; - np[2] = dp[0]; - } - else - { - np[0] = dp[2]; - np[2] = -dp[0]; - } - - side += dtClamp(dtMin(dtVdot2D(dp,vab)*2,dtVdot2D(np,vab)*2), 0.0f, 1.0f); + side += dtClamp(dtMin(dtVdot2D(ob->dp,vab)*2, dtVdot2D(ob->np,vab)*2), 0.0f, 1.0f); nside++; if (!sweepCircleCircle(agent->p,agent->rad, vab, ob->p,ob->rad, htmin, htmax)) @@ -414,17 +374,11 @@ static void processSamples(Body* agent, const float vmax, htmin = -htmin * 0.5f; } } - else if (ob->type == BODY_CAPSULE) + else if (ob->type == BODY_SEGMENT) { - // NOTE: the segments are assumed to come from a navmesh which is shrunken by - // the agent radius, hence the use of really small radius. - // This can be handle more efficiently by using seg-seg test instead. - // If the whole segment is to be treated as obstacle, use agent->rad instead of 0.01f! - const float r = 0.01f; // agent->rad - - float t; - if (dtDistancePtSegSqr2D(agent->p, ob->p, ob->q, t) < dtSqr(r+ob->rad)) + if (ob->touch) { + // Special case when the agent is very close to the segment. float sdir[3], snorm[3]; dtVsub(sdir, ob->q, ob->p); snorm[0] = -sdir[2]; @@ -438,8 +392,9 @@ static void processSamples(Body* agent, const float vmax, } else { - if (!sweepCircleSegment(agent->p, r, vcand, ob->p, ob->q, ob->rad, htmin, htmax)) + if (!isectRaySeg(agent->p, vcand, ob->p, ob->q, htmin)) continue; + htmax = maxToi; } // Avoid less when facing walls. @@ -483,7 +438,8 @@ static void processSamples(Body* agent, const float vmax, } -void sampleRVO(Body* agent, const float vmax, const Body* obs, const int nobs, RVO* rvo, const float bias, float* nvel) +void sampleRVO(ObstacleBody* agent, const float vmax, const ObstacleBody* obs, + const int nobs, RVODebugData* rvo, const float bias, float* nvel) { dtVset(nvel, 0,0,0); @@ -620,6 +576,8 @@ void CrowdManager::update(const float dt, unsigned int flags, dtNavMeshQuery* na if (!navquery) return; + rcTimeVal startTime = getPerfTime(); + const float ext[3] = {2,4,2}; dtQueryFilter filter; @@ -802,8 +760,9 @@ void CrowdManager::update(const float dt, unsigned int flags, dtNavMeshQuery* na } // Velocity planning. + rcTimeVal rvoStartTime = getPerfTime(); static const int MAX_BODIES = 32; - Body bodies[MAX_BODIES]; + ObstacleBody bodies[MAX_BODIES]; for (int i = 0; i < MAX_AGENTS; ++i) { if (!m_agents[i].active) continue; @@ -847,14 +806,14 @@ void CrowdManager::update(const float dt, unsigned int flags, dtNavMeshQuery* na if (nbodies < MAX_BODIES) { - setStatCapsuleBody(&bodies[nbodies], s,s+3,0); + setStatSegmentBody(&bodies[nbodies], s,s+3); nbodies++; } } - Body agent; + ObstacleBody agent; setDynCircleBody(&agent, ag->pos, ag->radius, ag->vel, ag->dvel); - + prepareBodies(&agent, bodies, nbodies); sampleRVO(&agent, ag->maxspeed, bodies, nbodies, &ag->rvo, 0.4f, ag->nvel); // Normalize samples for debug draw @@ -865,7 +824,9 @@ void CrowdManager::update(const float dt, unsigned int flags, dtNavMeshQuery* na dtVcopy(ag->nvel, ag->dvel); } } - + rcTimeVal rvoEndTime = getPerfTime(); + m_rvoTime.addSample(getPerfDeltaTimeUsec(rvoStartTime, rvoEndTime) / 1000.0f); + // Integrate and update perceived velocity. for (int i = 0; i < MAX_AGENTS; ++i) { @@ -967,13 +928,30 @@ void CrowdManager::update(const float dt, unsigned int flags, dtNavMeshQuery* na { if (!m_agents[i].active) continue; Agent* ag = &m_agents[i]; + + dtVset(ag->opts, 0,0,0); + dtVset(ag->opte, 0,0,0); + if (ag->npath && ag->ncorners > 1) { // The target is the corner after the next corner to steer to. - const float* tgt = &ag->corners[3]; + float tgt[3]; + dtVcopy(tgt, &ag->corners[3]); const float distSqr = dtVdist2DSqr(ag->pos, tgt); - if (distSqr > dtSqr(0.01f)) // && distSqr < dtSqr(20.0f)) + if (distSqr > dtSqr(0.01f)) { + // Clamp teh ray to max distance. + const float maxDist = ag->colradius*3; + if (distSqr > dtSqr(maxDist)) + { + float delta[3]; + dtVsub(delta, tgt, ag->pos); + dtVmad(tgt, ag->pos, delta, dtSqr(maxDist)/distSqr); + } + + dtVcopy(ag->opts, ag->pos); + dtVcopy(ag->opte, tgt); + static const int MAX_RES = 32; dtPolyRef res[MAX_RES]; float t, norm[3]; @@ -986,6 +964,9 @@ void CrowdManager::update(const float dt, unsigned int flags, dtNavMeshQuery* na } } + rcTimeVal endTime = getPerfTime(); + + m_totalTime.addSample(getPerfDeltaTimeUsec(startTime, endTime) / 1000.0f); } @@ -1000,6 +981,7 @@ CrowdTool::CrowdTool() : m_showCollisionSegments(false), m_showPath(false), m_showVO(false), + m_showOpt(false), m_expandOptions(true), m_anticipateTurns(true), m_useVO(true), @@ -1079,6 +1061,8 @@ void CrowdTool::handleMenu() m_showPath = !m_showPath; if (imguiCheck("Show VO", m_showVO)) m_showVO = !m_showVO; + if (imguiCheck("Show Opt", m_showOpt)) + m_showOpt = !m_showOpt; imguiUnindent(); } } @@ -1276,10 +1260,18 @@ void CrowdTool::handleRender() dd.end(); } + if (m_showOpt) + { + dd.begin(DU_DRAW_LINES, 2.0f); + dd.vertex(ag->opts[0],ag->opts[1]+0.3f,ag->opts[2], duRGBA(0,128,0,192)); + dd.vertex(ag->opte[0],ag->opte[1]+0.3f,ag->opte[2], duRGBA(0,128,0,192)); + dd.end(); + } + if (m_showVO) { // Draw detail about agent sela - const RVO* rvo = &ag->rvo; + const RVODebugData* rvo = &ag->rvo; const float dx = ag->pos[0]; const float dy = ag->pos[1]+ag->height; @@ -1316,6 +1308,69 @@ void CrowdTool::handleRender() } } + +static void drawGraphBackground(const int x, const int y, const int w, const int h, + const float vmin, const float vmax, const int ndiv, + const char* units) +{ + // BG + DebugDrawGL dd; + dd.begin(DU_DRAW_QUADS); + dd.vertex(x,y,0, duRGBA(0,0,0,64)); + dd.vertex(x+w,y,0, duRGBA(0,0,0,96)); + dd.vertex(x+w,y+h,0, duRGBA(128,128,128,64)); + dd.vertex(x,y+h,0, duRGBA(128,128,128,64)); + dd.end(); + + const int pad = 10; + + const float sy = (h-pad*2) / (vmax-vmin); + const float oy = y+pad-vmin*sy; + + char text[64]; + + // Divider Lines + for (int i = 0; i < ndiv; ++i) + { + const float u = (float)i/(float)ndiv; + const float v = vmin + (vmax-vmin)*u; + snprintf(text, 64, "%.2f %s", v, units); + const float fy = oy + v*sy; + imguiDrawText(x+w-pad, (int)fy-4, IMGUI_ALIGN_RIGHT, text, imguiRGBA(0,0,0,255)); + dd.begin(DU_DRAW_LINES, 1.0f); + dd.vertex(x,fy,0,duRGBA(0,0,0,64)); + dd.vertex(x+w-pad-60,fy,0,duRGBA(0,0,0,64)); + dd.end(); + } +} + +static void drawGraph(const SampleGraph* graph, + const int x, const int y, const int w, const int h, + const float vmin, const float vmax, const unsigned int col) +{ + DebugDrawGL dd; + + const int pad = 10; + + const float sx = (w-pad*2) / (float)graph->getSampleCount(); + const float sy = (h-pad*2) / (vmax-vmin); + const float ox = x+pad; + const float oy = y+pad-vmin*sy; + + // Values + dd.begin(DU_DRAW_LINES, 2.0f); + for (int i = 0; i < graph->getSampleCount()-1; ++i) + { + const float fx0 = ox + i*sx; + const float fy0 = oy + graph->getSample(i)*sy; + const float fx1 = ox + (i+1)*sx; + const float fy1 = oy + graph->getSample(i+1)*sy; + dd.vertex(fx0,fy0,0,col); + dd.vertex(fx1,fy1,0,col); + } + dd.end(); +} + void CrowdTool::handleRenderOverlay(double* proj, double* model, int* view) { GLdouble x, y, z; @@ -1344,4 +1399,11 @@ void CrowdTool::handleRenderOverlay(double* proj, double* model, int* view) } } + + const int gx = 300, gy = 10, gw = 500, gh = 200; + const float vmin = 0.0f, vmax = 10.0f; + + drawGraphBackground(gx,gy,gw,gh, vmin,vmax, 4, "ms"); + drawGraph(m_crowd.getRVOTimeGraph(), gx,gy,gw,gh, vmin,vmax, duRGBA(255,0,0,128)); + drawGraph(m_crowd.getTotalTimeGraph(), gx,gy,gw,gh, vmin,vmax, duRGBA(192,255,0,192)); } diff --git a/RecastDemo/Source/SampleInterfaces.cpp b/RecastDemo/Source/SampleInterfaces.cpp index bb7b67d..7d1c691 100644 --- a/RecastDemo/Source/SampleInterfaces.cpp +++ b/RecastDemo/Source/SampleInterfaces.cpp @@ -174,6 +174,49 @@ int BuildContext::getBuildTime(const rcBuilTimeLabel label) //////////////////////////////////////////////////////////////////////////////////////////////////// +#if defined(WIN32) + +// Win32 +#include + +rcTimeVal getPerfTime() +{ + __int64 count; + QueryPerformanceCounter((LARGE_INTEGER*)&count); + return count; +} + +int getPerfDeltaTimeUsec(const rcTimeVal start, const rcTimeVal end) +{ + static __int64 freq = 0; + if (freq == 0) + QueryPerformanceFrequency((LARGE_INTEGER*)&freq); + __int64 elapsed = end - start; + return (int)(elapsed*1000000 / freq); +} + +#else + +// Linux, BSD, OSX + +#include + +rcTimeVal getPerfTime() +{ + timeval now; + gettimeofday(&now, 0); + return (rcTimeVal)now.tv_sec*1000000L + (rcTimeVal)now.tv_usec; +} + +int getPerfDeltaTimeUsec(const rcTimeVal start, const rcTimeVal end) +{ + return (int)(end - start); +} + +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////// + void DebugDrawGL::depthMask(bool state) { glDepthMask(state ? GL_TRUE : GL_FALSE);