diff --git a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast index 8a74e85..176761e 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 a579f59..8487f13 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser @@ -212,6 +212,17 @@ 6B8D55E1127AAD060077C699 /* PBXTextBookmark */ = 6B8D55E1127AAD060077C699 /* PBXTextBookmark */; 6B8D55E3127AAE590077C699 /* PBXTextBookmark */ = 6B8D55E3127AAE590077C699 /* PBXTextBookmark */; 6B8D55EA127AAE680077C699 /* PBXTextBookmark */ = 6B8D55EA127AAE680077C699 /* PBXTextBookmark */; + 6B8D55F2127ABAD40077C699 /* PBXTextBookmark */ = 6B8D55F2127ABAD40077C699 /* PBXTextBookmark */; + 6B8D55F3127ABAD40077C699 /* PBXTextBookmark */ = 6B8D55F3127ABAD40077C699 /* PBXTextBookmark */; + 6B8D55F4127ABAD40077C699 /* PBXTextBookmark */ = 6B8D55F4127ABAD40077C699 /* PBXTextBookmark */; + 6B8D55F5127ABAD40077C699 /* PBXTextBookmark */ = 6B8D55F5127ABAD40077C699 /* PBXTextBookmark */; + 6B8D55F6127ABAD40077C699 /* PBXTextBookmark */ = 6B8D55F6127ABAD40077C699 /* PBXTextBookmark */; + 6B8D55F9127ABB6B0077C699 /* PBXTextBookmark */ = 6B8D55F9127ABB6B0077C699 /* PBXTextBookmark */; + 6B8D55FD127ABBCB0077C699 /* PBXTextBookmark */ = 6B8D55FD127ABBCB0077C699 /* PBXTextBookmark */; + 6B8D55FE127ABBCB0077C699 /* PBXTextBookmark */ = 6B8D55FE127ABBCB0077C699 /* PBXTextBookmark */; + 6B8D5603127ABBD80077C699 /* PBXTextBookmark */ = 6B8D5603127ABBD80077C699 /* PBXTextBookmark */; + 6B8D5604127ABBD80077C699 /* XCBuildMessageTextBookmark */ = 6B8D5604127ABBD80077C699 /* XCBuildMessageTextBookmark */; + 6B8D5605127ABBD80077C699 /* PBXTextBookmark */ = 6B8D5605127ABBD80077C699 /* PBXTextBookmark */; 6B920A521225C0AC00D5B5AD = 6B920A521225C0AC00D5B5AD /* PBXTextBookmark */; 6B920A6D1225C5DD00D5B5AD = 6B920A6D1225C5DD00D5B5AD /* PBXTextBookmark */; 6B98462E11E6141900FA177B = 6B98462E11E6141900FA177B /* PBXTextBookmark */; @@ -992,8 +1003,8 @@ isa = PBXTextBookmark; fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; name = "CrowdTool.h: 65"; - rLen = 20; - rLoc = 1732; + rLen = 0; + rLoc = 1737; rType = 0; vrLen = 819; vrLoc = 1128; @@ -1003,7 +1014,7 @@ fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; name = "CrowdTool.cpp: 145"; rLen = 0; - rLoc = 3716; + rLoc = 3702; rType = 0; vrLen = 889; vrLoc = 3056; @@ -1013,7 +1024,7 @@ fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; name = "CrowdTool.cpp: 269"; rLen = 0; - rLoc = 7053; + rLoc = 7253; rType = 0; vrLen = 1289; vrLoc = 6303; @@ -1023,7 +1034,7 @@ fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; name = "CrowdTool.cpp: 269"; rLen = 0; - rLoc = 7053; + rLoc = 7253; rType = 0; vrLen = 1289; vrLoc = 6303; @@ -1433,6 +1444,115 @@ vrLen = 1151; vrLoc = 11524; }; + 6B8D55F2127ABAD40077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */; + name = "CrowdManager.cpp: 521"; + rLen = 0; + rLoc = 11932; + rType = 0; + vrLen = 1220; + vrLoc = 11524; + }; + 6B8D55F3127ABAD40077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BD667D8123D27EC0021A7A4 /* CrowdManager.h */; + name = "CrowdManager.h: 307"; + rLen = 0; + rLoc = 7186; + rType = 0; + vrLen = 1731; + vrLoc = 6316; + }; + 6B8D55F4127ABAD40077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 64"; + rLen = 20; + rLoc = 1715; + rType = 0; + vrLen = 968; + vrLoc = 1262; + }; + 6B8D55F5127ABAD40077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 265"; + rLen = 0; + rLoc = 7253; + rType = 0; + vrLen = 1392; + vrLoc = 6205; + }; + 6B8D55F6127ABAD40077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 163"; + rLen = 0; + rLoc = 4127; + rType = 0; + vrLen = 1133; + vrLoc = 3309; + }; + 6B8D55F9127ABB6B0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 160"; + rLen = 0; + rLoc = 4071; + rType = 0; + vrLen = 1174; + vrLoc = 3436; + }; + 6B8D55FD127ABBCB0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 262"; + rLen = 0; + rLoc = 6757; + rType = 0; + vrLen = 1078; + vrLoc = 6483; + }; + 6B8D55FE127ABBCB0077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1476; + vrLoc = 0; + }; + 6B8D5603127ABBD80077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; + name = "CrowdTool.h: 23"; + rLen = 0; + rLoc = 1011; + rType = 0; + vrLen = 1186; + vrLoc = 0; + }; + 6B8D5604127ABBD80077C699 /* XCBuildMessageTextBookmark */ = { + isa = PBXTextBookmark; + comments = "'TOOLMODE_ADJUST_TARGET' was not declared in this scope"; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + fallbackIsa = XCBuildMessageTextBookmark; + rLen = 1; + rLoc = 144; + rType = 1; + }; + 6B8D5605127ABBD80077C699 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; + name = "CrowdTool.cpp: 145"; + rLen = 0; + rLoc = 3702; + rType = 0; + vrLen = 721; + vrLoc = 3306; + }; 6B8DE6F010A88F0500DF20FB /* PBXBookmarkGroup */ = { isa = PBXBookmarkGroup; children = ( @@ -1806,16 +1926,16 @@ }; 6BAF3C571211663A008CFCDF /* CrowdTool.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 1105}}"; - sepNavSelRange = "{1732, 20}"; - sepNavVisRange = "{1128, 819}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1014}}"; + sepNavSelRange = "{1011, 0}"; + sepNavVisRange = "{0, 1186}"; }; }; 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 8437}}"; - sepNavSelRange = "{7053, 0}"; - sepNavVisRange = "{6303, 1289}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 8567}}"; + sepNavSelRange = "{3702, 0}"; + sepNavVisRange = "{3306, 721}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; @@ -2141,7 +2261,7 @@ fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; name = "CrowdTool.cpp: 338"; rLen = 0; - rLoc = 9362; + rLoc = 9201; rType = 0; vrLen = 1412; vrLoc = 8537; @@ -2445,16 +2565,16 @@ }; 6BD667D8123D27EC0021A7A4 /* CrowdManager.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 4407}}"; - sepNavSelRange = "{6314, 0}"; - sepNavVisRange = "{6095, 1472}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 4225}}"; + sepNavSelRange = "{7186, 0}"; + sepNavVisRange = "{6316, 1731}"; }; }; 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 19123}}"; - sepNavSelRange = "{11810, 0}"; - sepNavVisRange = "{11524, 1151}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 19084}}"; + sepNavSelRange = "{11932, 0}"; + sepNavVisRange = "{11524, 1220}"; sepNavWindowFrame = "{{15, 134}, {1120, 639}}"; }; }; diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 index c3021a0..314d417 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 @@ -284,7 +284,8 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 62 + 52 + 51 1 0 @@ -325,7 +326,7 @@ PBXProjectModuleGUID 6B8632A30F78115100E2684A PBXProjectModuleLabel - CrowdManager.cpp + CrowdTool.cpp PBXSplitModuleInNavigatorKey Split0 @@ -333,11 +334,11 @@ PBXProjectModuleGUID 6B8632A40F78115100E2684A PBXProjectModuleLabel - CrowdManager.cpp + CrowdTool.cpp _historyCapacity 0 bookmark - 6B8D55EA127AAE680077C699 + 6B8D5605127ABBD80077C699 history 6BBB4C34115B7A3D00CF791D @@ -425,13 +426,13 @@ 6BB9C2BD127449CE00B97C1C 6BB9C372127A0E5600B97C1C 6B8D5565127A98FB0077C699 - 6B8D5582127AA2270077C699 - 6B8D559E127AA3E70077C699 6B8D559F127AA3E70077C699 6B8D55A0127AA3E70077C699 6B8D55B5127AA5E60077C699 - 6B8D55D9127AABD80077C699 - 6B8D55DA127AABD80077C699 + 6B8D55F2127ABAD40077C699 + 6B8D55F3127ABAD40077C699 + 6B8D5603127ABBD80077C699 + 6B8D5604127ABBD80077C699 SplitCount @@ -445,18 +446,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 @@ -471,8 +472,6 @@ Frame {{10, 27}, {992, -27}} - RubberWindowFrame - 0 59 1278 719 0 0 1280 778 Module XCDetailModule @@ -526,7 +525,9 @@ GeometryConfiguration Frame - {{0, 0}, {568, 405}} + {{10, 27}, {992, 175}} + RubberWindowFrame + 0 59 1278 719 0 0 1280 778 Module PBXBuildResultsModule @@ -745,7 +746,7 @@ 5 WindowOrderList - 6B8D55EB127AAE680077C699 + 6B8D5606127ABBD80077C699 6B8D558C127AA2270077C699 6B8D558D127AA2270077C699 /Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj diff --git a/RecastDemo/Include/CrowdTool.h b/RecastDemo/Include/CrowdTool.h index ddc83d2..1f92f3a 100644 --- a/RecastDemo/Include/CrowdTool.h +++ b/RecastDemo/Include/CrowdTool.h @@ -61,7 +61,6 @@ class CrowdTool : public SampleTool enum ToolMode { TOOLMODE_CREATE, - TOOLMODE_MOVE, TOOLMODE_MOVE_TARGET, }; ToolMode m_mode; diff --git a/RecastDemo/Source/CrowdTool.cpp b/RecastDemo/Source/CrowdTool.cpp index d85fccc..28eeccf 100644 --- a/RecastDemo/Source/CrowdTool.cpp +++ b/RecastDemo/Source/CrowdTool.cpp @@ -140,8 +140,6 @@ void CrowdTool::handleMenu() if (imguiCheck("Create Agents", m_mode == TOOLMODE_CREATE)) m_mode = TOOLMODE_CREATE; - if (imguiCheck("Move Agents", m_mode == TOOLMODE_MOVE)) - m_mode = TOOLMODE_MOVE; if (imguiCheck("Move Target", m_mode == TOOLMODE_MOVE_TARGET)) m_mode = TOOLMODE_MOVE_TARGET; @@ -152,9 +150,13 @@ void CrowdTool::handleMenu() imguiValue("Click to add agents."); imguiValue("Shift+Click to remove."); } - else if (m_mode == TOOLMODE_MOVE) + else if (m_mode == TOOLMODE_MOVE_TARGET) { imguiValue("Click to set move target."); + imguiValue("Shift+Click to adjust target."); + imguiValue("Adjusting uses special pathfinder"); + imguiValue("which is really fast to change the"); + imguiValue("target in small increments."); } imguiSeparator(); @@ -245,23 +247,6 @@ void CrowdTool::handleClick(const float* s, const float* p, bool shift) m_crowd.requestMoveTarget(idx, m_targetRef, m_targetPos); } } - else if (m_mode == TOOLMODE_MOVE) - { - // Find nearest point on navmesh and set move request to that location. - dtNavMeshQuery* navquery = m_sample->getNavMeshQuery(); - const dtQueryFilter* filter = m_crowd.getFilter(); - const float* ext = m_crowd.getQueryExtents(); - m_targetRef = navquery->findNearestPoly(p, ext, filter, m_targetPos); - if (m_targetRef) - { - for (int i = 0; i < m_crowd.getAgentCount(); ++i) - { - const Agent* ag = m_crowd.getAgent(i); - if (!ag->active) continue; - m_crowd.requestMoveTarget(i, m_targetRef, m_targetPos); - } - } - } else if (m_mode == TOOLMODE_MOVE_TARGET) { // Find nearest point on navmesh and set move request to that location. @@ -269,8 +254,10 @@ void CrowdTool::handleClick(const float* s, const float* p, bool shift) const dtQueryFilter* filter = m_crowd.getFilter(); const float* ext = m_crowd.getQueryExtents(); m_targetRef = navquery->findNearestPoly(p, ext, filter, m_targetPos); - if (m_targetRef) + + if (shift) { + // Adjust target using tiny local search. for (int i = 0; i < m_crowd.getAgentCount(); ++i) { const Agent* ag = m_crowd.getAgent(i); @@ -278,6 +265,16 @@ void CrowdTool::handleClick(const float* s, const float* p, bool shift) m_crowd.adjustMoveTarget(i, m_targetRef, m_targetPos); } } + else + { + // Move target using paht finder + for (int i = 0; i < m_crowd.getAgentCount(); ++i) + { + const Agent* ag = m_crowd.getAgent(i); + if (!ag->active) continue; + m_crowd.requestMoveTarget(i, m_targetRef, m_targetPos); + } + } } }