本文整理汇总了C++中WaypointList::begin方法的典型用法代码示例。如果您正苦于以下问题:C++ WaypointList::begin方法的具体用法?C++ WaypointList::begin怎么用?C++ WaypointList::begin使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WaypointList
的用法示例。
在下文中一共展示了WaypointList::begin方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: RETAILMSG
WaypointList*
PathFinder::FindPath( WORLD_POSITION src, WORLD_POSITION goal, UINT32 maxCells )
{
if (!m_pPathGraph)
{
RETAILMSG(ZONE_ERROR, "ERROR: PathFinder::FindPath(): m_pPathGraph is NULL\n");
return NULL;
}
NodeID srcID = WorldPositionToNodeID( src );
NodeID goalID = WorldPositionToNodeID( goal );
// RETAILMSG(ZONE_PATHFINDER, ("FindPath: (%.2f, %.2f, %.2f) [%d] -> (%.2f, %.2f, %.2f) [%d]\n",
// src.x, src.y, src.z, srcID,
// goal.x, goal.y, goal.z, goalID );
// Find the list of connections from Cell A to Cell B
WaypointList *pWaypointList = FindPathAStar( srcID, goalID, maxCells );
if (m_bPathSmoothing)
pWaypointList = SmoothWaypointList( pWaypointList );
if (pWaypointList)
{
for( WaypointList::iterator pWaypoint = pWaypointList->begin(); pWaypoint != pWaypointList->end(); pWaypoint++ )
{
if (m_bShowPathFinding && m_pDisplayCallback)
{
WORLD_POSITION temp = *pWaypoint;
temp.x -= 0.5;
temp.z -= 0.5;
m_pDisplayCallback( temp, PATH_NODE_WAYPOINT );
}
}
}
else
{
if (m_bShowPathFinding && m_pClearCallback)
m_pClearCallback();
}
return pWaypointList;
}
示例2: visitor
static void
FillList(WaypointList &list, const Waypoints &src,
GeoPoint location, Angle heading, const WaypointFilterData &filter)
{
list.clear();
if (!filter.IsDefined() && src.size() >= 500)
return;
FilterWaypointVisitor visitor(filter, location, heading, list);
if (filter.distance_index > 0)
src.VisitWithinRange(location, Units::ToSysDistance(
distance_filter_items[filter.distance_index]), visitor);
else
src.VisitNamePrefix(filter.name, visitor);
if (filter.distance_index > 0 || filter.direction_index > 0)
std::sort(list.begin(), list.end(), WaypointDistanceCompare(location));
}
示例3: CatmullRom
WaypointList*
PathFinder::SmoothWaypointList( WaypointList* pWaypointList )
{
if (!pWaypointList)
return NULL;
if( pWaypointList->size() > 2 )
{
WORLD_POSITION newPoint0( 0.0f, 0.0f, 0.0f );
WORLD_POSITION newPoint1( 0.0f, 0.0f, 0.0f );
WaypointList oldList;
for( WaypointList::iterator i = pWaypointList->begin(); i != pWaypointList->end(); i++ )
{
oldList.push_back( *i );
}
pWaypointList->clear();
WORLD_POSITION p0, p1, p2, p3;
//First
WaypointList::iterator iter = oldList.begin();
p0 = p1 = p2 = *iter;
iter++;
p3 = *iter;
iter++;
const int divisions = 5;
while( iter != oldList.end() )
{
p0 = p1;
p1 = p2;
p2 = p3;
p3 = *iter;
for( int count=1; count<divisions+1; count++)
{
vec3 newPoint = CatmullRom( p0, p1, p2, p3, (float)count/(float)divisions );
if( pWaypointList->size() > 1 )
{
vec3 lastDir = newPoint1 - newPoint0;
vec3 curDir = newPoint - newPoint1;
lastDir.Normalize();
curDir.Normalize();
float dot = lastDir.Dot( curDir );
if( dot > 0.99f )
{
pWaypointList->pop_back();
}
}
newPoint0 = newPoint1;
newPoint1 = newPoint;
pWaypointList->push_back( newPoint );
}
iter++;
}
//Last
p0 = p1;
p1 = p2;
p2 = p3;
p3 = p3; //Redundant, but put here to make it clear what is intended
for( int count=1; count<divisions+1; count++)
{
WORLD_POSITION newPoint = CatmullRom( p0, p1, p2, p3, (float)count/(float)divisions );
if( pWaypointList->size() > 1 )
{
vec3 lastDir = newPoint1 - newPoint0;
vec3 curDir = newPoint - newPoint1;
lastDir.Normalize();
curDir.Normalize();
float dot = lastDir.Dot( curDir );
if( dot > 0.99f )
{
pWaypointList->pop_back();
}
}
newPoint0 = newPoint1;
newPoint1 = newPoint;
pWaypointList->push_back( newPoint );
}
}
return pWaypointList;
}