当前位置: 首页>>代码示例>>C++>>正文


C++ WaypointList::end方法代码示例

本文整理汇总了C++中WaypointList::end方法的典型用法代码示例。如果您正苦于以下问题:C++ WaypointList::end方法的具体用法?C++ WaypointList::end怎么用?C++ WaypointList::end使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在WaypointList的用法示例。


在下文中一共展示了WaypointList::end方法的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;
}
开发者ID:kabinud,项目名称:HappyGame,代码行数:43,代码来源:PathFind.cpp

示例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));
}
开发者ID:,项目名称:,代码行数:20,代码来源:

示例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;
}
开发者ID:kabinud,项目名称:HappyGame,代码行数:90,代码来源:PathFind.cpp


注:本文中的WaypointList::end方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。