本文整理汇总了C++中Coord::distance方法的典型用法代码示例。如果您正苦于以下问题:C++ Coord::distance方法的具体用法?C++ Coord::distance怎么用?C++ Coord::distance使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Coord
的用法示例。
在下文中一共展示了Coord::distance方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: handleItems
/*!
Sends items which came in range and handles collisions with teleporters
or damaging items.
*/
void handleItems( P_CHAR pChar, const Coord& oldpos )
{
P_PLAYER player = dynamic_cast<P_PLAYER>( pChar );
MapItemsIterator iter = MapObjects::instance()->listItemsInCircle( pChar->pos(), VISRANGE );
for ( P_ITEM pItem = iter.first(); pItem; pItem = iter.next() )
{
// Check for item collisions here.
if ( pChar->pos().x == pItem->pos().x && pChar->pos().y == pItem->pos().y )
{
if ( pItem->pos().z >= pChar->pos().z - 15 && pItem->pos().z <= pChar->pos().z + 15 )
{
if ( handleItemCollision( pChar, pItem ) )
{
break;
}
}
}
// If we are a connected player then send new items
if ( player && player->socket() )
{
UI32 oldDist = oldpos.distance( pItem->pos() );
if ( oldDist >= player->visualRange() )
{
// was out of range before and now is in range
pItem->update( player->socket() );
}
}
}
}
示例2: handleMultis
/*!
Sends multis which came in range and handles collisions with them.
*/
void handleMultis( P_CHAR pChar, const Coord& oldpos )
{
P_PLAYER player = dynamic_cast<P_PLAYER>( pChar );
MapMultisIterator multis = MapObjects::instance()->listMultisInCircle( pChar->pos(), BUILDRANGE );
for ( P_MULTI multi = multis.first(); multi; multi = multis.next() )
{
// TODO: handle multi collisions here.
// If we are a connected player then send new multis
if ( player && player->socket() )
{
UI32 oldDist = oldpos.distance( multi->pos() );
if ( oldDist >= BUILDRANGE )
{
// was out of range before and now is in range
multi->update( player->socket() );
}
}
}
}
示例3: sizeof
QList<unsigned char> cPathfinding::find(P_CHAR pChar, const Coord &from, const Coord &to)
{
QList<unsigned char> result;
int i;
// We can only calculate a path on the normal maps and if the destination is not out of range
if (from.isInternalMap() || from.distance(to) > (unsigned int)areaSize) {
return result;
}
memset(touched, 0, sizeof(bool) * nodeCount); // Clear the touched nodes
this->goal = to; // Save the goal
// Actually th�s should be the x/y offset of our area
xoffset = (from.x + to.x - areaSize) / 2;
yoffset = (from.y + to.y - areaSize) / 2;
int fromNode = getNodeIndex(from.x, from.y, from.z);
int toNode = getNodeIndex(to.x, to.y, to.z);
openlist = fromNode; // Where are we
// Initialize the node
nodes[fromNode].cost = 0;
nodes[fromNode].total = heuristic(from.x - xoffset, from.y - yoffset, from.z);
nodes[fromNode].parent = -1;
nodes[fromNode].next = -1;
nodes[fromNode].prev = -1;
nodes[fromNode].z = from.z;
// We touched this node
onopen[fromNode] = true;
touched[fromNode] = true;
int depth = 0;
int newTotal, newCost;
// This is controlled by the npc moving. Some npcs can fly (move over impassables)
// others can open doors
ignoreDoors = false;
ignoreMovableImpassables = false;
int successors[8]; // List of successor nodes used in subsequent iterations. Never more than 8
int successorCount; // Number of successors found
while (openlist != -1) {
if (++depth > maxDepth)
break; // Break if we would exceed the maximum iteration count
int bestnode = findBest(openlist);
// Get adjacent nodes that we can walk to
successorCount = getSuccessors(bestnode, pChar, successors);
if (successorCount == 0) {
break; // We've run into a situation where we'll never find a suitable successor
}
// Follow every possible successor
for (i = 0; i < successorCount; ++i) {
int successor = successors[i];
if (touched[successor]) {
continue; // If we worked on the node already, skip this part
}
// calculate the cost of the successor based on the currents node cost
newCost = nodes[bestnode].cost + 1;
newTotal = newCost + heuristic(successor % areaSize, (successor / areaSize) % areaSize, nodes[successor].z);
// Always execute, !wasTouched was always true here
// if ( !wasTouched || m_Nodes[newNode].total > newTotal )
nodes[successor].parent = bestnode;
nodes[successor].cost = newCost;
nodes[successor].total = newTotal;
addToChain(successor);
// We found our target
if (successor == toNode) {
int pathCount = 0; // Stack allocation speed isn't a concern here anymore
int parent = nodes[successor].parent;
// Record the path in reverse order
while (parent != -1) {
path[pathCount++] = getDirection(parent % areaSize, (parent / areaSize) % areaSize, successor % areaSize, (successor / areaSize) % areaSize);
successor = parent; // Track back
parent = nodes[successor].parent;
if (successor == fromNode) {
break;
}
}
int backtrack = 0;
while (pathCount != 0) {
result.append( path[--pathCount] );
}
return result; // Immediately return
}
}
}
//.........这里部分代码省略.........
示例4: distance
UI32 Coord::distance( const Coord& a, const Coord& b )
{
return a.distance( b );
}
示例5: distance
float distance(Node<Coord> other) { return coordinate.distance(&other.coordinate); }