本文整理汇总了C++中MoverPtr::distanceFrom方法的典型用法代码示例。如果您正苦于以下问题:C++ MoverPtr::distanceFrom方法的具体用法?C++ MoverPtr::distanceFrom怎么用?C++ MoverPtr::distanceFrom使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MoverPtr
的用法示例。
在下文中一共展示了MoverPtr::distanceFrom方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
Stuff::Vector3D Team::calcEscapeVector(MoverPtr mover, float threatRange)
{
static float distance[100];
static Stuff::Vector3D delta[100];
Stuff::Vector3D escapeVector;
escapeVector.Zero();
//------------------------------
// Get the initial delta info...
int32_t shortest = 0;
int32_t longest = 0;
for(size_t i = 0; i < rosterSize; i++)
{
GameObjectPtr obj = ObjectManager->getByWatchID(roster[i]);
if(obj)
{
float distanceToObj = mover->distanceFrom(obj->getPosition());
if(distanceToObj <= threatRange)
{
delta[i].Subtract(mover->getPosition(), obj->getPosition());
distance[i] = distanceToObj;
if(distance[i] > longest)
longest = i;
if(distance[i] < shortest)
shortest = i;
}
else
distance[i] = -999.0;
}
else
distance[i] = -999.0;
}
//-----------------------------------------------------------------
// Now, find the furthest enemy and scale the deltas accordingly...
for(i = 0; i < rosterSize; i++)
if(distance[i] >= 0.0)
{
float scale = distance[longest] / distance[i];
delta[i] *= scale;
escapeVector += delta[i];
}
//--------------------------------------------------------------------------------
// We don't care about the length, just the direction (we assume you want to go as
// FAR as necessary)...
escapeVector.Normalize(escapeVector);
return(escapeVector);
}
示例2: handleTacticalOrder
long MoverGroup::handleTacticalOrder (TacticalOrder tacOrder, long priority, Stuff::Vector3D* jumpGoalList, bool queueGroupOrder) {
if (numMovers == 0)
return(NO_ERR);
if (queueGroupOrder)
tacOrder.pack(NULL, NULL);
//bool processOrder = true;
bool isJump = false;
bool isMove = false;
Stuff::Vector3D goalList[MAX_MOVERGROUP_COUNT];
Stuff::Vector3D location = tacOrder.getWayPoint(0);
//MoverPtr pointVehicle = getPoint();
if (tacOrder.code == TACTICAL_ORDER_ATTACK_OBJECT)
if (tacOrder.attackParams.method == ATTACKMETHOD_DFA) {
//-------------------------------------------------
// Let's just make it a move/jump order, for now...
tacOrder.code = TACTICAL_ORDER_JUMPTO_OBJECT;
tacOrder.moveParams.wait = false;
tacOrder.moveParams.wayPath.mode[0] = TRAVEL_MODE_SLOW;
GameObjectPtr target = ObjectManager->getByWatchID(tacOrder.targetWID);
Assert(tacOrder.targetWID != 0, 0, " DFA AttackObject WID is 0 ");
if (!target)
return(NO_ERR);
tacOrder.setWayPoint(0, target->getPosition());
}
if (tacOrder.code == TACTICAL_ORDER_JUMPTO_OBJECT) {
tacOrder.code = TACTICAL_ORDER_JUMPTO_POINT;
GameObjectPtr target = ObjectManager->get(tacOrder.targetWID);
Assert(tacOrder.targetWID != 0, 0, " DFA AttackObject WID is 0 ");
if (!target)
return(NO_ERR);
tacOrder.setWayPoint(0, target->getPosition());
}
//vector_3d offsetTable[MAX_GROUPMOVE_OFFSETS];
//long numOffsets = 0;
switch (tacOrder.code) {
case TACTICAL_ORDER_WAIT:
break;
case TACTICAL_ORDER_MOVETO_POINT:
case TACTICAL_ORDER_MOVETO_OBJECT: {
Fatal(0, "Need to support jumpGoalList (and goalList) for MOVETO as well in mc2 ");
isMove = true;
//-----------------------------------------------------------
// Sort by distance to destination. Their selectionIndex will
// be set to modify this goal...
SortListPtr list = Mover::sortList;
if (list) {
list->clear(false);
long moverCount = 0;
for (long i = 0; i < numMovers; i++) {
MoverPtr mover = getMover(i);
Assert(mover != NULL, moverWIDs[i], " MoverGroup.handleTacticalOrder: NULL mover ");
if (!mover->isDisabled()) {
list->setId(moverCount, i);
list->setValue(moverCount, mover->distanceFrom(location));
moverCount++;
}
}
list->sort(false);
//--------------------------------
// Let's build the offset table...
/*
numOffsets = moverCount - 1;
if (numOffsets > MAX_GROUPMOVE_OFFSETS)
numOffsets = MAX_GROUPMOVE_OFFSETS;
long offsetsStart = GroupMoveOffsetsIndex[numOffsets - 1];
for (i = 0; i < numOffsets; i++)
offsetTable[i] = relativePositionToPoint(location, GroupMoveOffsets[offsetsStart + i][0], GroupMoveOffsets[offsetsStart + i][1], RELPOS_FLAG_PASSABLE_START);
*/
//-----------------------------------
// Now, calc the order of movement...
long curIndex = 1;
for (i = 0; i < moverCount; i++) {
MoverPtr mover = getMover(list->getId(i));
if (mover->getWatchID() == pointWID)
mover->selectionIndex = 0;
else
mover->selectionIndex = curIndex++;
}
}
}
break;
case TACTICAL_ORDER_JUMPTO_POINT:
case TACTICAL_ORDER_JUMPTO_OBJECT: {
//-----------------------------------------------------------
// Sort by distance to destination. Their selectionIndex will
// be set to modify this goal...
isJump = true;
//-------------------------------------------------------------------------
// We can assume that all movers in this group are jump-capable. Otherwise,
// the group wouldn't be allowed to jump by the interface. In addition,
// we KNOW that all movers in this group can jump to the selected
// goal (of course, they won't due to terrain and crowding)...
//.........这里部分代码省略.........