本文整理汇总了C++中BattleUnit::getMovementType方法的典型用法代码示例。如果您正苦于以下问题:C++ BattleUnit::getMovementType方法的具体用法?C++ BattleUnit::getMovementType怎么用?C++ BattleUnit::getMovementType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BattleUnit
的用法示例。
在下文中一共展示了BattleUnit::getMovementType方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: think
/**
* Runs state functionality every cycle.
* Progresses the fall, updates the battlescape, ...
*/
void UnitFallBState::think()
{
for (std::list<BattleUnit*>::iterator unit = _parent->getSave()->getFallingUnits()->begin(); unit != _parent->getSave()->getFallingUnits()->end();)
{
if ((*unit)->getStatus() == STATUS_TURNING)
{
(*unit)->abortTurn();
}
bool largeCheck = true;
bool falling = true;
int size = (*unit)->getArmor()->getSize() - 1;
if ((*unit)->getHealth() == 0 || (*unit)->getStunlevel() >= (*unit)->getHealth())
{
unit = _parent->getSave()->getFallingUnits()->erase(unit);
continue;
}
bool onScreen = ((*unit)->getVisible() && _parent->getMap()->getCamera()->isOnScreen((*unit)->getPosition(), true, size, false));
Tile *tileBelow = _parent->getSave()->getTile((*unit)->getPosition() + Position(0,0,-1));
for (int x = size; x >= 0; x--)
{
for (int y = size; y >= 0; y--)
{
Tile *otherTileBelow = _parent->getSave()->getTile((*unit)->getPosition() + Position(x,y,-1));
if (!_parent->getSave()->getTile((*unit)->getPosition() + Position(x,y,0))->hasNoFloor(otherTileBelow) || (*unit)->getMovementType() == MT_FLY)
{
largeCheck = false;
}
}
}
if ((*unit)->getStatus() == STATUS_WALKING || (*unit)->getStatus() == STATUS_FLYING)
{
(*unit)->keepWalking(tileBelow, true); // advances the phase
_parent->getMap()->cacheUnit(*unit); // make sure the unit sprites are up to date
if ((*unit)->getPosition() != (*unit)->getLastPosition())
{
// Reset tiles moved from.
for (int x = size; x >= 0; x--)
{
for (int y = size; y >= 0; y--)
{
// A falling unit might have already taken up this position so check that this unit is still here.
if (_parent->getSave()->getTile((*unit)->getLastPosition() + Position(x,y,0))->getUnit() == (*unit))
{
_parent->getSave()->getTile((*unit)->getLastPosition() + Position(x,y,0))->setUnit(0);
}
}
}
// Update tiles moved to.
for (int x = size; x >= 0; x--)
{
for (int y = size; y >= 0; y--)
{
_parent->getSave()->getTile((*unit)->getPosition() + Position(x,y,0))->setUnit((*unit), _parent->getSave()->getTile((*unit)->getPosition() + Position(x,y,-1)));
}
}
}
++unit;
continue;
}
falling = largeCheck
&& (*unit)->getPosition().z != 0
&& (*unit)->getTile()->hasNoFloor(tileBelow)
&& (*unit)->getMovementType() != MT_FLY
&& (*unit)->getWalkingPhase() == 0;
if (falling)
{
// Tile(s) unit is falling into.
for (int x = (*unit)->getArmor()->getSize() - 1; x >= 0; --x)
{
for (int y = (*unit)->getArmor()->getSize() - 1; y >= 0; --y)
{
Tile *tileTarget = _parent->getSave()->getTile((*unit)->getPosition() + Position(x,y,-1));
tilesToFallInto.push_back(tileTarget);
}
}
// Check each tile for units that need moving out of the way.
for (std::vector<Tile*>::iterator i = tilesToFallInto.begin(); i < tilesToFallInto.end(); ++i)
{
BattleUnit *unitBelow = (*i)->getUnit();
if (unitBelow
&& (*unit) != unitBelow // falling units do not fall on themselves
&& !(std::find(unitsToMove.begin(), unitsToMove.end(), unitBelow) != unitsToMove.end())) // already added
{
unitsToMove.push_back(unitBelow);
}
}
}
falling = largeCheck
&& (*unit)->getPosition().z != 0
//.........这里部分代码省略.........