diff --git a/Recast/Include/Recast.h b/Recast/Include/Recast.h index 1fd5dc2..fd75ffa 100644 --- a/Recast/Include/Recast.h +++ b/Recast/Include/Recast.h @@ -115,8 +115,8 @@ struct rcConfig int walkableRadius; // Radius of the agent in cells (vx) int maxEdgeLen; // Maximum contour edge length (vx) float maxSimplificationError; // Maximum distance error from contour to cells (vx) - int minRegionSize; // Minimum regions size. Smaller regions will be deleted (vx) - int mergeRegionSize; // Minimum regions size. Smaller regions will be merged (vx) + int minRegionArea; // Regions whose area is smaller than this threshold will be removed. (vx) + int mergeRegionArea; // Regions whose area is smaller than this threshold will be merged (vx) int maxVertsPerPoly; // Max number of vertices per polygon float detailSampleDist; // Detail mesh sample spacing. float detailSampleMaxError; // Detail mesh simplification max sample error. @@ -619,32 +619,34 @@ bool rcBuildDistanceField(rcContext* ctx, rcCompactHeightfield& chf); // Divides the walkable heighfied into simple regions using watershed partitioning. // Each region has only one contour and no overlaps. // The regions are stored in the compact heightfield 'reg' field. -// The process sometimes creates small regions. The parameter -// 'minRegionSize' specifies the smallest allowed regions size. -// If the area of a regions is smaller than allowed, the regions is -// removed or merged to neighbour region. +// The process sometimes creates small regions. If the area of a regions is +// smaller than 'mergeRegionArea' then the region will be merged with a neighbour +// region if possible. If multiple regions form an area which is smaller than +// 'minRegionArea' all the regions belonging to that area will be removed. +// Here area means the count of spans in an area. // Params: // chf - (in/out) compact heightfield representing the open space. -// minRegionSize - (in) the smallest allowed regions size. -// maxMergeRegionSize - (in) the largest allowed regions size which can be merged. +// minRegionArea - (in) the smallest allowed region area. +// maxMergeRegionArea - (in) the largest allowed region area which can be merged. // Returns false if operation ran out of memory. bool rcBuildRegions(rcContext* ctx, rcCompactHeightfield& chf, - const int borderSize, const int minRegionSize, const int mergeRegionSize); + const int borderSize, const int minRegionArea, const int mergeRegionArea); // Divides the walkable heighfied into simple regions using simple monotone partitioning. // Each region has only one contour and no overlaps. // The regions are stored in the compact heightfield 'reg' field. -// The process sometimes creates small regions. The parameter -// 'minRegionSize' specifies the smallest allowed regions size. -// If the area of a regions is smaller than allowed, the regions is -// removed or merged to neighbour region. +// The process sometimes creates small regions. If the area of a regions is +// smaller than 'mergeRegionArea' then the region will be merged with a neighbour +// region if possible. If multiple regions form an area which is smaller than +// 'minRegionArea' all the regions belonging to that area will be removed. +// Here area means the count of spans in an area. // Params: // chf - (in/out) compact heightfield representing the open space. -// minRegionSize - (in) the smallest allowed regions size. -// maxMergeRegionSize - (in) the largest allowed regions size which can be merged. +// minRegionArea - (in) the smallest allowed regions size. +// maxMergeRegionArea - (in) the largest allowed regions size which can be merged. // Returns false if operation ran out of memory. bool rcBuildRegionsMonotone(rcContext* ctx, rcCompactHeightfield& chf, - const int borderSize, const int minRegionSize, const int mergeRegionSize); + const int borderSize, const int minRegionArea, const int mergeRegionArea); // Builds simplified contours from the regions outlines. // Params: diff --git a/Recast/Source/RecastRegion.cpp b/Recast/Source/RecastRegion.cpp index dbcec6a..5f19c76 100644 --- a/Recast/Source/RecastRegion.cpp +++ b/Recast/Source/RecastRegion.cpp @@ -438,16 +438,16 @@ static unsigned short* expandRegions(int maxIter, unsigned short level, struct rcRegion { inline rcRegion(unsigned short i) : - count(0), + spanCount(0), id(i), - area(0), + areaType(0), remap(false), visited(false) {} - int count; - unsigned short id; - unsigned char area; + int spanCount; // Number of spans belonging to this region + unsigned short id; // ID of the region + unsigned char areaType; // Are type. bool remap; bool visited; rcIntArray connections; @@ -494,7 +494,7 @@ static void replaceNeighbour(rcRegion& reg, unsigned short oldId, unsigned short static bool canMergeWithRegion(const rcRegion& rega, const rcRegion& regb) { - if (rega.area != regb.area) + if (rega.areaType != regb.areaType) return false; int n = 0; for (int i = 0; i < rega.connections.size(); ++i) @@ -570,8 +570,8 @@ static bool mergeRegions(rcRegion& rega, rcRegion& regb) for (int j = 0; j < regb.floors.size(); ++j) addUniqueFloorRegion(rega, regb.floors[j]); - rega.count += regb.count; - regb.count = 0; + rega.spanCount += regb.spanCount; + regb.spanCount = 0; regb.connections.resize(0); return true; @@ -694,7 +694,7 @@ static void walkContour(int x, int y, int i, int dir, } } -static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegionSize, +static bool filterSmallRegions(rcContext* ctx, int minRegionArea, int mergeRegionSize, unsigned short& maxRegionId, rcCompactHeightfield& chf, unsigned short* srcReg) @@ -727,7 +727,7 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio continue; rcRegion& reg = regions[r]; - reg.count++; + reg.spanCount++; // Update floors. @@ -744,7 +744,7 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio if (reg.connections.size() > 0) continue; - reg.area = chf.areas[i]; + reg.areaType = chf.areas[i]; // Check if this cell is next to a border. int ndir = -1; @@ -775,7 +775,7 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio rcRegion& reg = regions[i]; if (reg.id == 0 || (reg.id & RC_BORDER_REG)) continue; - if (reg.count == 0) + if (reg.spanCount == 0) continue; if (reg.visited) continue; @@ -783,7 +783,7 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio // Count the total size of all the connected regions. // Also keep track of the regions connects to a tile border. bool connectsToBorder = false; - int count = 0; + int spanCount = 0; stack.resize(0); trace.resize(0); @@ -797,7 +797,7 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio rcRegion& creg = regions[ri]; - count += creg.count; + spanCount += creg.spanCount; trace.push(ri); for (int j = 0; j < creg.connections.size(); ++j) @@ -822,12 +822,12 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio // Do not remove areas which connect to tile borders // as their size cannot be estimated correctly and removing them // can potentially remove necessary areas. - if (count < minRegionSize && !connectsToBorder) + if (spanCount < minRegionArea && !connectsToBorder) { // Kill all visited regions. for (int j = 0; j < trace.size(); ++j) { - regions[trace[j]].count = 0; + regions[trace[j]].spanCount = 0; regions[trace[j]].id = 0; } } @@ -843,11 +843,11 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio rcRegion& reg = regions[i]; if (reg.id == 0 || (reg.id & RC_BORDER_REG)) continue; - if (reg.count == 0) + if (reg.spanCount == 0) continue; // Check to see if the region should be merged. - if (reg.count > mergeRegionSize && isRegionConnectedToBorder(reg)) + if (reg.spanCount > mergeRegionSize && isRegionConnectedToBorder(reg)) continue; // Small region with more than 1 connection. @@ -860,11 +860,11 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio if (reg.connections[j] & RC_BORDER_REG) continue; rcRegion& mreg = regions[reg.connections[j]]; if (mreg.id == 0 || (mreg.id & RC_BORDER_REG)) continue; - if (mreg.count < smallest && + if (mreg.spanCount < smallest && canMergeWithRegion(reg, mreg) && canMergeWithRegion(mreg, reg)) { - smallest = mreg.count; + smallest = mreg.spanCount; mergeId = mreg.id; } } @@ -1022,7 +1022,7 @@ struct rcSweepSpan }; bool rcBuildRegionsMonotone(rcContext* ctx, rcCompactHeightfield& chf, - const int borderSize, const int minRegionSize, const int mergeRegionSize) + const int borderSize, const int minRegionArea, const int mergeRegionArea) { rcAssert(ctx); @@ -1153,7 +1153,7 @@ bool rcBuildRegionsMonotone(rcContext* ctx, rcCompactHeightfield& chf, // Filter out small regions. chf.maxRegions = id; - if (!filterSmallRegions(ctx, minRegionSize, mergeRegionSize, chf.maxRegions, chf, srcReg)) + if (!filterSmallRegions(ctx, minRegionArea, mergeRegionArea, chf.maxRegions, chf, srcReg)) return false; ctx->stopTimer(RC_TIMER_BUILD_REGIONS_FILTER); @@ -1168,7 +1168,7 @@ bool rcBuildRegionsMonotone(rcContext* ctx, rcCompactHeightfield& chf, } bool rcBuildRegions(rcContext* ctx, rcCompactHeightfield& chf, - const int borderSize, const int minRegionSize, const int mergeRegionSize) + const int borderSize, const int minRegionArea, const int mergeRegionArea) { rcAssert(ctx); @@ -1263,7 +1263,7 @@ bool rcBuildRegions(rcContext* ctx, rcCompactHeightfield& chf, // Filter out small regions. chf.maxRegions = regionId; - if (!filterSmallRegions(ctx, minRegionSize, mergeRegionSize, chf.maxRegions, chf, srcReg)) + if (!filterSmallRegions(ctx, minRegionArea, mergeRegionArea, chf.maxRegions, chf, srcReg)) return false; ctx->stopTimer(RC_TIMER_BUILD_REGIONS_FILTER); diff --git a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast index 5d104d8..591dccc 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 7c95ba1..b448185 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser @@ -220,6 +220,15 @@ 6BB2EE3F1261D02000E350F8 /* PBXTextBookmark */ = 6BB2EE3F1261D02000E350F8 /* PBXTextBookmark */; 6BB2EE401261D02000E350F8 /* PBXTextBookmark */ = 6BB2EE401261D02000E350F8 /* PBXTextBookmark */; 6BB2EE411261D02000E350F8 /* PBXTextBookmark */ = 6BB2EE411261D02000E350F8 /* PBXTextBookmark */; + 6BB2EE641261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE641261D48100E350F8 /* PBXTextBookmark */; + 6BB2EE651261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE651261D48100E350F8 /* PBXTextBookmark */; + 6BB2EE661261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE661261D48100E350F8 /* PBXTextBookmark */; + 6BB2EE671261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE671261D48100E350F8 /* PBXTextBookmark */; + 6BB2EE681261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE681261D48100E350F8 /* PBXTextBookmark */; + 6BB2EE691261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE691261D48100E350F8 /* PBXTextBookmark */; + 6BB2EE6A1261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE6A1261D48100E350F8 /* PBXTextBookmark */; + 6BB2EE6B1261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE6B1261D48100E350F8 /* PBXTextBookmark */; + 6BB2EE6D1261D4A400E350F8 /* PBXTextBookmark */ = 6BB2EE6D1261D4A400E350F8 /* PBXTextBookmark */; 6BBB0361124E242E00533229 = 6BBB0361124E242E00533229 /* PBXTextBookmark */; 6BBB0363124E242E00533229 = 6BBB0363124E242E00533229 /* PBXTextBookmark */; 6BBB0365124E242E00533229 = 6BBB0365124E242E00533229 /* PBXTextBookmark */; @@ -360,9 +369,9 @@ }; 6B137C7E0F7FCBFE00459200 /* Recast.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 8944}}"; - sepNavSelRange = "{960, 84}"; - sepNavVisRange = "{521, 923}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 8606}}"; + sepNavSelRange = "{23762, 14}"; + sepNavVisRange = "{22925, 2730}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; @@ -406,9 +415,9 @@ }; 6B137C890F7FCC1100459200 /* RecastRegion.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 17082}}"; - sepNavSelRange = "{19532, 0}"; - sepNavVisRange = "{17831, 971}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 16926}}"; + sepNavSelRange = "{22090, 0}"; + sepNavVisRange = "{21330, 766}"; }; }; 6B1C8E08121EB4FF0048697F /* PBXTextBookmark */ = { @@ -423,23 +432,23 @@ }; 6B25B6100FFA62AD004F1BC4 /* Sample.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1677}}"; - sepNavSelRange = "{3880, 19}"; - sepNavVisRange = "{3295, 748}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1976}}"; + sepNavSelRange = "{2579, 0}"; + sepNavVisRange = "{2271, 551}"; }; }; 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 2769}}"; - sepNavSelRange = "{2884, 0}"; - sepNavVisRange = "{2623, 1223}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 2834}}"; + sepNavSelRange = "{2904, 0}"; + sepNavVisRange = "{2623, 730}"; }; }; 6B25B6180FFA62BE004F1BC4 /* main.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 12025}}"; - sepNavSelRange = "{20913, 0}"; - sepNavVisRange = "{20575, 601}"; + sepNavIntBoundsRect = "{{0, 0}, {1217, 12025}}"; + sepNavSelRange = "{1985, 0}"; + sepNavVisRange = "{1794, 437}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; @@ -453,9 +462,9 @@ }; 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {936, 18560}}"; - sepNavSelRange = "{25434, 0}"; - sepNavVisRange = "{25185, 649}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 15392}}"; + sepNavSelRange = "{24602, 0}"; + sepNavVisRange = "{23873, 1419}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; @@ -820,7 +829,7 @@ fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; name = "RecastRegion.cpp: 931"; rLen = 0; - rLoc = 23307; + rLoc = 23477; rType = 0; vrLen = 751; vrLoc = 21660; @@ -844,9 +853,9 @@ }; 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 14560}}"; - sepNavSelRange = "{11617, 0}"; - sepNavVisRange = "{11096, 1076}"; + sepNavIntBoundsRect = "{{0, 0}, {1013, 14274}}"; + sepNavSelRange = "{26519, 0}"; + sepNavVisRange = "{20368, 1429}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; @@ -904,9 +913,9 @@ }; 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 8307}}"; - sepNavSelRange = "{11545, 0}"; - sepNavVisRange = "{10675, 1806}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 8684}}"; + sepNavSelRange = "{11552, 0}"; + sepNavVisRange = "{10928, 1315}"; }; }; 6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */ = { @@ -986,7 +995,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 929"; rLen = 0; - rLoc = 25434; + rLoc = 25487; rType = 0; vrLen = 649; vrLoc = 25185; @@ -1691,7 +1700,7 @@ fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; name = "RecastRegion.cpp: 849"; rLen = 0; - rLoc = 19562; + rLoc = 19716; rType = 0; vrLen = 1078; vrLoc = 19104; @@ -1701,7 +1710,7 @@ fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; name = "Sample_SoloMeshSimple.cpp: 380"; rLen = 0; - rLoc = 11545; + rLoc = 11598; rType = 0; vrLen = 1806; vrLoc = 10675; @@ -1751,7 +1760,7 @@ fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; name = "RecastRegion.cpp: 849"; rLen = 0; - rLoc = 19562; + rLoc = 19716; rType = 0; vrLen = 1093; vrLoc = 19103; @@ -1761,11 +1770,101 @@ fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; name = "RecastRegion.cpp: 830"; rLen = 0; - rLoc = 19532; + rLoc = 19686; rType = 0; vrLen = 971; vrLoc = 17831; }; + 6BB2EE641261D48100E350F8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 632"; + rLen = 14; + rLoc = 23762; + rType = 0; + vrLen = 2730; + vrLoc = 22925; + }; + 6BB2EE651261D48100E350F8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; + name = "RecastRegion.cpp: 917"; + rLen = 0; + rLoc = 22090; + rType = 0; + vrLen = 766; + vrLoc = 21330; + }; + 6BB2EE661261D48100E350F8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 87"; + rLen = 0; + rLoc = 2579; + rType = 0; + vrLen = 551; + vrLoc = 2271; + }; + 6BB2EE671261D48100E350F8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 122"; + rLen = 0; + rLoc = 2904; + rType = 0; + vrLen = 730; + vrLoc = 2623; + }; + 6BB2EE681261D48100E350F8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 866"; + rLen = 0; + rLoc = 26519; + rType = 0; + vrLen = 1429; + vrLoc = 20368; + }; + 6BB2EE691261D48100E350F8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 379"; + rLen = 0; + rLoc = 11552; + rType = 0; + vrLen = 1315; + vrLoc = 10928; + }; + 6BB2EE6A1261D48100E350F8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 903"; + rLen = 0; + rLoc = 24421; + rType = 0; + vrLen = 1348; + vrLoc = 23835; + }; + 6BB2EE6B1261D48100E350F8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 903"; + rLen = 0; + rLoc = 24453; + rType = 0; + vrLen = 1363; + vrLoc = 23873; + }; + 6BB2EE6D1261D4A400E350F8 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 906"; + rLen = 0; + rLoc = 24602; + rType = 0; + vrLen = 1419; + vrLoc = 23873; + }; 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {933, 3712}}"; @@ -2237,7 +2336,7 @@ fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; name = "Recast.h: 256"; rLen = 0; - rLoc = 9742; + rLoc = 9767; rType = 0; vrLen = 1723; vrLoc = 8968; diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 index 603a898..6c79474 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 @@ -284,8 +284,8 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 34 - 27 + 48 + 40 1 0 @@ -326,7 +326,7 @@ PBXProjectModuleGUID 6B8632A30F78115100E2684A PBXProjectModuleLabel - RecastRegion.cpp + Sample_TileMesh.cpp PBXSplitModuleInNavigatorKey Split0 @@ -334,11 +334,11 @@ PBXProjectModuleGUID 6B8632A40F78115100E2684A PBXProjectModuleLabel - RecastRegion.cpp + Sample_TileMesh.cpp _historyCapacity 0 bookmark - 6BB2EE411261D02000E350F8 + 6BB2EE6D1261D4A400E350F8 history 6BBB4AA5115B4F3400CF791D @@ -369,7 +369,6 @@ 6BD402B4122441CB00995864 6B920A521225C0AC00D5B5AD 6B920A6D1225C5DD00D5B5AD - 6BA7F8AC1226EF0400C8C47A 6BA7F8EC1227002300C8C47A 6BA7F8ED1227002300C8C47A 6BA7F8EE1227002300C8C47A @@ -406,10 +405,8 @@ 6BA8CEEF1255C4B700272A3B 6BA8CF4A1255D44700272A3B 6BA8CF4D1255D44700272A3B - 6BA8CF501255D44700272A3B 6BA8CF511255D44700272A3B 6BA8CF5B1255D49B00272A3B - 6BA8CF7C1255D5FE00272A3B 6BA8CF941255D97400272A3B 6BA8CF951255D97400272A3B 6BA8CFA81255DC6500272A3B @@ -419,7 +416,6 @@ 6BA8D10D125B0E8E00272A3B 6BB2EDF61261C75400E350F8 6BB2EDF91261C75400E350F8 - 6BB2EE231261C92300E350F8 6BB2EE241261C92300E350F8 6BB2EE251261C92300E350F8 6BB2EE261261C92300E350F8 @@ -427,10 +423,14 @@ 6BB2EE281261C92300E350F8 6BB2EE351261CEB800E350F8 6BB2EE361261CEB800E350F8 - 6BB2EE381261CEB800E350F8 - 6BB2EE3E1261D02000E350F8 6BB2EE3F1261D02000E350F8 - 6BB2EE401261D02000E350F8 + 6BB2EE641261D48100E350F8 + 6BB2EE651261D48100E350F8 + 6BB2EE661261D48100E350F8 + 6BB2EE671261D48100E350F8 + 6BB2EE681261D48100E350F8 + 6BB2EE691261D48100E350F8 + 6BB2EE6A1261D48100E350F8 SplitCount @@ -444,18 +444,18 @@ GeometryConfiguration Frame - {{0, 0}, {992, 673}} + {{0, 0}, {992, 471}} RubberWindowFrame 0 59 1278 719 0 0 1280 778 Module PBXNavigatorGroup Proportion - 673pt + 471pt Proportion - 0pt + 202pt Tabs @@ -485,9 +485,7 @@ GeometryConfiguration Frame - {{10, 27}, {992, -27}} - RubberWindowFrame - 0 59 1278 719 0 0 1280 778 + {{10, 27}, {992, 175}} Module PBXProjectFindModule @@ -525,7 +523,9 @@ GeometryConfiguration Frame - {{10, 27}, {992, 99}} + {{10, 27}, {992, 175}} + RubberWindowFrame + 0 59 1278 719 0 0 1280 778 Module PBXBuildResultsModule diff --git a/RecastDemo/Source/Sample_SoloMeshSimple.cpp b/RecastDemo/Source/Sample_SoloMeshSimple.cpp index 940ecbd..cbc8624 100644 --- a/RecastDemo/Source/Sample_SoloMeshSimple.cpp +++ b/RecastDemo/Source/Sample_SoloMeshSimple.cpp @@ -375,8 +375,8 @@ bool Sample_SoloMeshSimple::handleBuild() m_cfg.walkableRadius = (int)ceilf(m_agentRadius / m_cfg.cs); m_cfg.maxEdgeLen = (int)(m_edgeMaxLen / m_cellSize); m_cfg.maxSimplificationError = m_edgeMaxError; - m_cfg.minRegionSize = (int)rcSqr(m_regionMinSize); - m_cfg.mergeRegionSize = (int)rcSqr(m_regionMergeSize); + m_cfg.minRegionArea = (int)rcSqr(m_regionMinSize); // Note: area = size*size + m_cfg.mergeRegionArea = (int)rcSqr(m_regionMergeSize); // Note: area = size*size m_cfg.maxVertsPerPoly = (int)m_vertsPerPoly; m_cfg.detailSampleDist = m_detailSampleDist < 0.9f ? 0 : m_cellSize * m_detailSampleDist; m_cfg.detailSampleMaxError = m_cellHeight * m_detailSampleMaxError; @@ -495,7 +495,7 @@ bool Sample_SoloMeshSimple::handleBuild() } // Partition the walkable surface into simple regions without holes. - if (!rcBuildRegions(m_ctx, *m_chf, m_cfg.borderSize, m_cfg.minRegionSize, m_cfg.mergeRegionSize)) + if (!rcBuildRegions(m_ctx, *m_chf, m_cfg.borderSize, m_cfg.minRegionArea, m_cfg.mergeRegionArea)) { m_ctx->log(RC_LOG_ERROR, "buildNavigation: Could not build regions."); return false; diff --git a/RecastDemo/Source/Sample_SoloMeshTiled.cpp b/RecastDemo/Source/Sample_SoloMeshTiled.cpp index cb7afea..9e30c2d 100644 --- a/RecastDemo/Source/Sample_SoloMeshTiled.cpp +++ b/RecastDemo/Source/Sample_SoloMeshTiled.cpp @@ -720,8 +720,8 @@ bool Sample_SoloMeshTiled::handleBuild() m_cfg.walkableRadius = (int)ceilf(m_agentRadius / m_cfg.cs); m_cfg.maxEdgeLen = (int)(m_edgeMaxLen / m_cellSize); m_cfg.maxSimplificationError = m_edgeMaxError; - m_cfg.minRegionSize = (int)rcSqr(m_regionMinSize); - m_cfg.mergeRegionSize = (int)rcSqr(m_regionMergeSize); + m_cfg.minRegionArea = (int)rcSqr(m_regionMinSize); // Note: area = size*size + m_cfg.mergeRegionArea = (int)rcSqr(m_regionMergeSize); // Note: area = size*size m_cfg.maxVertsPerPoly = (int)m_vertsPerPoly; m_cfg.tileSize = (int)m_tileSize; m_cfg.borderSize = m_cfg.walkableRadius + 3; // Reserve enough padding. @@ -867,7 +867,7 @@ bool Sample_SoloMeshTiled::handleBuild() continue; } - if (!rcBuildRegions(m_ctx, *tile.chf, tileCfg.borderSize, tileCfg.minRegionSize, tileCfg.mergeRegionSize)) + if (!rcBuildRegions(m_ctx, *tile.chf, tileCfg.borderSize, tileCfg.minRegionArea, tileCfg.mergeRegionArea)) { m_ctx->log(RC_LOG_ERROR, "buildTiledNavigation: [%d,%d] Could not build regions.", x, y); continue; diff --git a/RecastDemo/Source/Sample_TileMesh.cpp b/RecastDemo/Source/Sample_TileMesh.cpp index 2b6a22e..d3d6167 100644 --- a/RecastDemo/Source/Sample_TileMesh.cpp +++ b/RecastDemo/Source/Sample_TileMesh.cpp @@ -899,8 +899,8 @@ unsigned char* Sample_TileMesh::buildTileMesh(const int tx, const int ty, const m_cfg.walkableRadius = (int)ceilf(m_agentRadius / m_cfg.cs); m_cfg.maxEdgeLen = (int)(m_edgeMaxLen / m_cellSize); m_cfg.maxSimplificationError = m_edgeMaxError; - m_cfg.minRegionSize = (int)rcSqr(m_regionMinSize); - m_cfg.mergeRegionSize = (int)rcSqr(m_regionMergeSize); + m_cfg.minRegionArea = (int)rcSqr(m_regionMinSize); // Note: area = size*size + m_cfg.mergeRegionArea = (int)rcSqr(m_regionMergeSize); // Note: area = size*size m_cfg.maxVertsPerPoly = (int)m_vertsPerPoly; m_cfg.tileSize = (int)m_tileSize; m_cfg.borderSize = m_cfg.walkableRadius + 3; // Reserve enough padding. @@ -1030,7 +1030,7 @@ unsigned char* Sample_TileMesh::buildTileMesh(const int tx, const int ty, const } // Partition the walkable surface into simple regions without holes. - if (!rcBuildRegions(m_ctx, *m_chf, m_cfg.borderSize, m_cfg.minRegionSize, m_cfg.mergeRegionSize)) + if (!rcBuildRegions(m_ctx, *m_chf, m_cfg.borderSize, m_cfg.minRegionArea, m_cfg.mergeRegionArea)) { m_ctx->log(RC_LOG_ERROR, "buildNavigation: Could not build regions."); return 0;