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 */;
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}}";
};
};

View File

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

View File

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

View File

@ -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);
}
}
}
}