Simplified crowd tool UI.

This commit is contained in:
Mikko Mononen 2010-10-29 08:24:09 +00:00
parent aa18cf4a8d
commit 30b581b67d
5 changed files with 172 additions and 55 deletions

View File

@ -212,6 +212,17 @@
6B8D55E1127AAD060077C699 /* PBXTextBookmark */ = 6B8D55E1127AAD060077C699 /* PBXTextBookmark */; 6B8D55E1127AAD060077C699 /* PBXTextBookmark */ = 6B8D55E1127AAD060077C699 /* PBXTextBookmark */;
6B8D55E3127AAE590077C699 /* PBXTextBookmark */ = 6B8D55E3127AAE590077C699 /* PBXTextBookmark */; 6B8D55E3127AAE590077C699 /* PBXTextBookmark */ = 6B8D55E3127AAE590077C699 /* PBXTextBookmark */;
6B8D55EA127AAE680077C699 /* PBXTextBookmark */ = 6B8D55EA127AAE680077C699 /* 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 */; 6B920A521225C0AC00D5B5AD = 6B920A521225C0AC00D5B5AD /* PBXTextBookmark */;
6B920A6D1225C5DD00D5B5AD = 6B920A6D1225C5DD00D5B5AD /* PBXTextBookmark */; 6B920A6D1225C5DD00D5B5AD = 6B920A6D1225C5DD00D5B5AD /* PBXTextBookmark */;
6B98462E11E6141900FA177B = 6B98462E11E6141900FA177B /* PBXTextBookmark */; 6B98462E11E6141900FA177B = 6B98462E11E6141900FA177B /* PBXTextBookmark */;
@ -992,8 +1003,8 @@
isa = PBXTextBookmark; isa = PBXTextBookmark;
fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */; fRef = 6BAF3C571211663A008CFCDF /* CrowdTool.h */;
name = "CrowdTool.h: 65"; name = "CrowdTool.h: 65";
rLen = 20; rLen = 0;
rLoc = 1732; rLoc = 1737;
rType = 0; rType = 0;
vrLen = 819; vrLen = 819;
vrLoc = 1128; vrLoc = 1128;
@ -1003,7 +1014,7 @@
fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */;
name = "CrowdTool.cpp: 145"; name = "CrowdTool.cpp: 145";
rLen = 0; rLen = 0;
rLoc = 3716; rLoc = 3702;
rType = 0; rType = 0;
vrLen = 889; vrLen = 889;
vrLoc = 3056; vrLoc = 3056;
@ -1013,7 +1024,7 @@
fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */;
name = "CrowdTool.cpp: 269"; name = "CrowdTool.cpp: 269";
rLen = 0; rLen = 0;
rLoc = 7053; rLoc = 7253;
rType = 0; rType = 0;
vrLen = 1289; vrLen = 1289;
vrLoc = 6303; vrLoc = 6303;
@ -1023,7 +1034,7 @@
fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */;
name = "CrowdTool.cpp: 269"; name = "CrowdTool.cpp: 269";
rLen = 0; rLen = 0;
rLoc = 7053; rLoc = 7253;
rType = 0; rType = 0;
vrLen = 1289; vrLen = 1289;
vrLoc = 6303; vrLoc = 6303;
@ -1433,6 +1444,115 @@
vrLen = 1151; vrLen = 1151;
vrLoc = 11524; 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 */ = { 6B8DE6F010A88F0500DF20FB /* PBXBookmarkGroup */ = {
isa = PBXBookmarkGroup; isa = PBXBookmarkGroup;
children = ( children = (
@ -1806,16 +1926,16 @@
}; };
6BAF3C571211663A008CFCDF /* CrowdTool.h */ = { 6BAF3C571211663A008CFCDF /* CrowdTool.h */ = {
uiCtxt = { uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {931, 1105}}"; sepNavIntBoundsRect = "{{0, 0}, {931, 1014}}";
sepNavSelRange = "{1732, 20}"; sepNavSelRange = "{1011, 0}";
sepNavVisRange = "{1128, 819}"; sepNavVisRange = "{0, 1186}";
}; };
}; };
6BAF3C581211663A008CFCDF /* CrowdTool.cpp */ = { 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */ = {
uiCtxt = { uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {931, 8437}}"; sepNavIntBoundsRect = "{{0, 0}, {931, 8567}}";
sepNavSelRange = "{7053, 0}"; sepNavSelRange = "{3702, 0}";
sepNavVisRange = "{6303, 1289}"; sepNavVisRange = "{3306, 721}";
sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}";
}; };
}; };
@ -2141,7 +2261,7 @@
fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */; fRef = 6BAF3C581211663A008CFCDF /* CrowdTool.cpp */;
name = "CrowdTool.cpp: 338"; name = "CrowdTool.cpp: 338";
rLen = 0; rLen = 0;
rLoc = 9362; rLoc = 9201;
rType = 0; rType = 0;
vrLen = 1412; vrLen = 1412;
vrLoc = 8537; vrLoc = 8537;
@ -2445,16 +2565,16 @@
}; };
6BD667D8123D27EC0021A7A4 /* CrowdManager.h */ = { 6BD667D8123D27EC0021A7A4 /* CrowdManager.h */ = {
uiCtxt = { uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {931, 4407}}"; sepNavIntBoundsRect = "{{0, 0}, {931, 4225}}";
sepNavSelRange = "{6314, 0}"; sepNavSelRange = "{7186, 0}";
sepNavVisRange = "{6095, 1472}"; sepNavVisRange = "{6316, 1731}";
}; };
}; };
6BD667D9123D28100021A7A4 /* CrowdManager.cpp */ = { 6BD667D9123D28100021A7A4 /* CrowdManager.cpp */ = {
uiCtxt = { uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {931, 19123}}"; sepNavIntBoundsRect = "{{0, 0}, {931, 19084}}";
sepNavSelRange = "{11810, 0}"; sepNavSelRange = "{11932, 0}";
sepNavVisRange = "{11524, 1151}"; sepNavVisRange = "{11524, 1220}";
sepNavWindowFrame = "{{15, 134}, {1120, 639}}"; sepNavWindowFrame = "{{15, 134}, {1120, 639}}";
}; };
}; };

View File

@ -284,7 +284,8 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array> <array>
<array> <array>
<integer>62</integer> <integer>52</integer>
<integer>51</integer>
<integer>1</integer> <integer>1</integer>
<integer>0</integer> <integer>0</integer>
</array> </array>
@ -325,7 +326,7 @@
<key>PBXProjectModuleGUID</key> <key>PBXProjectModuleGUID</key>
<string>6B8632A30F78115100E2684A</string> <string>6B8632A30F78115100E2684A</string>
<key>PBXProjectModuleLabel</key> <key>PBXProjectModuleLabel</key>
<string>CrowdManager.cpp</string> <string>CrowdTool.cpp</string>
<key>PBXSplitModuleInNavigatorKey</key> <key>PBXSplitModuleInNavigatorKey</key>
<dict> <dict>
<key>Split0</key> <key>Split0</key>
@ -333,11 +334,11 @@
<key>PBXProjectModuleGUID</key> <key>PBXProjectModuleGUID</key>
<string>6B8632A40F78115100E2684A</string> <string>6B8632A40F78115100E2684A</string>
<key>PBXProjectModuleLabel</key> <key>PBXProjectModuleLabel</key>
<string>CrowdManager.cpp</string> <string>CrowdTool.cpp</string>
<key>_historyCapacity</key> <key>_historyCapacity</key>
<integer>0</integer> <integer>0</integer>
<key>bookmark</key> <key>bookmark</key>
<string>6B8D55EA127AAE680077C699</string> <string>6B8D5605127ABBD80077C699</string>
<key>history</key> <key>history</key>
<array> <array>
<string>6BBB4C34115B7A3D00CF791D</string> <string>6BBB4C34115B7A3D00CF791D</string>
@ -425,13 +426,13 @@
<string>6BB9C2BD127449CE00B97C1C</string> <string>6BB9C2BD127449CE00B97C1C</string>
<string>6BB9C372127A0E5600B97C1C</string> <string>6BB9C372127A0E5600B97C1C</string>
<string>6B8D5565127A98FB0077C699</string> <string>6B8D5565127A98FB0077C699</string>
<string>6B8D5582127AA2270077C699</string>
<string>6B8D559E127AA3E70077C699</string>
<string>6B8D559F127AA3E70077C699</string> <string>6B8D559F127AA3E70077C699</string>
<string>6B8D55A0127AA3E70077C699</string> <string>6B8D55A0127AA3E70077C699</string>
<string>6B8D55B5127AA5E60077C699</string> <string>6B8D55B5127AA5E60077C699</string>
<string>6B8D55D9127AABD80077C699</string> <string>6B8D55F2127ABAD40077C699</string>
<string>6B8D55DA127AABD80077C699</string> <string>6B8D55F3127ABAD40077C699</string>
<string>6B8D5603127ABBD80077C699</string>
<string>6B8D5604127ABBD80077C699</string>
</array> </array>
</dict> </dict>
<key>SplitCount</key> <key>SplitCount</key>
@ -445,18 +446,18 @@
<key>GeometryConfiguration</key> <key>GeometryConfiguration</key>
<dict> <dict>
<key>Frame</key> <key>Frame</key>
<string>{{0, 0}, {992, 673}}</string> <string>{{0, 0}, {992, 471}}</string>
<key>RubberWindowFrame</key> <key>RubberWindowFrame</key>
<string>0 59 1278 719 0 0 1280 778 </string> <string>0 59 1278 719 0 0 1280 778 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>PBXNavigatorGroup</string> <string>PBXNavigatorGroup</string>
<key>Proportion</key> <key>Proportion</key>
<string>673pt</string> <string>471pt</string>
</dict> </dict>
<dict> <dict>
<key>Proportion</key> <key>Proportion</key>
<string>0pt</string> <string>202pt</string>
<key>Tabs</key> <key>Tabs</key>
<array> <array>
<dict> <dict>
@ -471,8 +472,6 @@
<dict> <dict>
<key>Frame</key> <key>Frame</key>
<string>{{10, 27}, {992, -27}}</string> <string>{{10, 27}, {992, -27}}</string>
<key>RubberWindowFrame</key>
<string>0 59 1278 719 0 0 1280 778 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>XCDetailModule</string> <string>XCDetailModule</string>
@ -526,7 +525,9 @@
<key>GeometryConfiguration</key> <key>GeometryConfiguration</key>
<dict> <dict>
<key>Frame</key> <key>Frame</key>
<string>{{0, 0}, {568, 405}}</string> <string>{{10, 27}, {992, 175}}</string>
<key>RubberWindowFrame</key>
<string>0 59 1278 719 0 0 1280 778 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>PBXBuildResultsModule</string> <string>PBXBuildResultsModule</string>
@ -745,7 +746,7 @@
<integer>5</integer> <integer>5</integer>
<key>WindowOrderList</key> <key>WindowOrderList</key>
<array> <array>
<string>6B8D55EB127AAE680077C699</string> <string>6B8D5606127ABBD80077C699</string>
<string>6B8D558C127AA2270077C699</string> <string>6B8D558C127AA2270077C699</string>
<string>6B8D558D127AA2270077C699</string> <string>6B8D558D127AA2270077C699</string>
<string>/Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj</string> <string>/Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj</string>

View File

@ -61,7 +61,6 @@ class CrowdTool : public SampleTool
enum ToolMode enum ToolMode
{ {
TOOLMODE_CREATE, TOOLMODE_CREATE,
TOOLMODE_MOVE,
TOOLMODE_MOVE_TARGET, TOOLMODE_MOVE_TARGET,
}; };
ToolMode m_mode; ToolMode m_mode;

View File

@ -140,8 +140,6 @@ void CrowdTool::handleMenu()
if (imguiCheck("Create Agents", m_mode == TOOLMODE_CREATE)) if (imguiCheck("Create Agents", m_mode == TOOLMODE_CREATE))
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)) if (imguiCheck("Move Target", m_mode == TOOLMODE_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("Click to add agents.");
imguiValue("Shift+Click to remove."); 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("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(); imguiSeparator();
@ -245,23 +247,6 @@ void CrowdTool::handleClick(const float* s, const float* p, bool shift)
m_crowd.requestMoveTarget(idx, m_targetRef, m_targetPos); 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) else if (m_mode == TOOLMODE_MOVE_TARGET)
{ {
// Find nearest point on navmesh and set move request to that location. // 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 dtQueryFilter* filter = m_crowd.getFilter();
const float* ext = m_crowd.getQueryExtents(); const float* ext = m_crowd.getQueryExtents();
m_targetRef = navquery->findNearestPoly(p, ext, filter, m_targetPos); 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) for (int i = 0; i < m_crowd.getAgentCount(); ++i)
{ {
const Agent* ag = m_crowd.getAgent(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); 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);
}
}
} }
} }