本文整理汇总了C++中BattleUnit::isAttacking方法的典型用法代码示例。如果您正苦于以下问题:C++ BattleUnit::isAttacking方法的具体用法?C++ BattleUnit::isAttacking怎么用?C++ BattleUnit::isAttacking使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BattleUnit
的用法示例。
在下文中一共展示了BattleUnit::isAttacking方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: think
AIDecision AIBlockUnit::think(GameState &state, BattleUnit &u, bool forceInterrupt)
{
auto curTicks = state.gameTime.getTicks();
if (ticksLastThink + ticksUntilReThink > curTicks)
{
if (u.visibleUnits.empty() || u.isMoving() || u.isAttacking() ||
u.psiStatus != PsiStatus::NotEngaged ||
ticksLastOutOfOrderThink + ticksUntilReThink > curTicks)
{
return {};
}
ticksLastOutOfOrderThink = curTicks;
}
bool interrupt = forceInterrupt;
if (!interrupt && state.current_battle->mode == Battle::Mode::TurnBased)
{
if (!state.current_battle->interruptQueue.empty())
{
return {};
}
if (u.owner != state.current_battle->currentActiveOrganisation ||
!state.current_battle->interruptUnits.empty())
{
auto it = state.current_battle->interruptUnits.find({&state, u.id});
interrupt = it != state.current_battle->interruptUnits.end() &&
u.agent->modified_stats.time_units > it->second;
if (!interrupt)
{
return {};
}
}
}
ticksLastThink = curTicks;
ticksUntilReThink = UNIT_AI_THINK_INTERVAL;
AIDecision decision = {};
for (auto &ai : aiList)
{
if (forceInterrupt)
{
ai->reset(state, u);
}
auto result = ai->think(state, u, interrupt);
auto newDecision = std::get<0>(result);
auto halt = std::get<1>(result);
if (!newDecision.isEmpty())
{
// We can keep last decision's movement if this one is action only,
// because that would mean this decision may be possible to be done on the move
// We cannot take last decision's action because it might override
// our move or maulfunction otherwise
if (!newDecision.movement && decision.movement)
{
newDecision.movement = decision.movement;
}
decision = newDecision;
decision.ai = ai->getName();
}
if (halt)
{
break;
}
}
return decision;
}