本文整理汇总了C++中TileVector::worldVector方法的典型用法代码示例。如果您正苦于以下问题:C++ TileVector::worldVector方法的具体用法?C++ TileVector::worldVector怎么用?C++ TileVector::worldVector使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TileVector
的用法示例。
在下文中一共展示了TileVector::worldVector方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: applyAvoidance
inline
void SchoolFish::applyAvoidance(Vector &accumulator)
{
// only avoid the player if not in the background
if (this->layer < LR_ELEMENTS10)
{
if ((dsq->game->avatar->position - this->position).isLength2DIn(128))
{
avoid(accumulator, dsq->game->avatar->position);
}
}
//return;
if (avoidTime>0) return;
VectorSet closestObs;
VectorSet obsPos;
//Vector closestObs;
int range = 10;
int radius = range*TILE_SIZE;
Vector p;
TileVector t0(position);
TileVector t;
for (int x = -range; x <= range; x++)
{
for (int y = -range; y <= range; y++)
{
TileVector t = t0;
t.x+=x;
t.y+=y;
if (dsq->game->isObstructed(t))
{
p = t.worldVector();
closestObs.push_back(this->position - p);
obsPos.push_back(p);
/*
std::ostringstream os;
os << "tile(" << t.x << ", " << t.y << ") p(" << p.x << ", " << p.y << ")";
debugLog(os.str());
*/
/*
int len = (p - this->position).getSquaredLength2D();
if (len < sqr(radius))
{
closestObs.push_back(this->position - p);
obsPos.push_back(p);
}
*/
}
}
}
if (!closestObs.empty())
{
//avoid (accumulator, this->averageVectors(closestObs));
//accumulator = Vector(0,0,0);
Vector change;
change = averageVectors(closestObs);
//change |= 200;
float dist = (this->position - averageVectors(obsPos)).getLength2D();
float ratio = dist / radius;
if (ratio < minUrgency) ratio = minUrgency;
else if (ratio > maxUrgency) ratio = maxUrgency;
change.setLength2D(ratio + lastVel.getLength2D()/10);
accumulator += change;
}
if (this->range!=0)
{
if (!((position - startPos).isLength2DIn(this->range)))
{
Vector diff = startPos - position;
diff.setLength2D(lastVel.getLength2D());
accumulator += diff;
}
}
}