本文整理汇总了C++中CCircuitAI::GetWaterCategory方法的典型用法代码示例。如果您正苦于以下问题:C++ CCircuitAI::GetWaterCategory方法的具体用法?C++ CCircuitAI::GetWaterCategory怎么用?C++ CCircuitAI::GetWaterCategory使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CCircuitAI
的用法示例。
在下文中一共展示了CCircuitAI::GetWaterCategory方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: FindBestTarget
CEnemyUnit* CAttackTask::FindBestTarget(CCircuitUnit* unit, float& minSqDist)
{
CCircuitAI* circuit = manager->GetCircuit();
CTerrainManager* terrainManager = circuit->GetTerrainManager();
CThreatMap* threatMap = circuit->GetThreatMap();
const AIFloat3& pos = unit->GetUnit()->GetPos();
STerrainMapArea* area = unit->GetArea();
float power = threatMap->GetUnitThreat(unit);
int canTargetCat = unit->GetCircuitDef()->GetTargetCategory();
CEnemyUnit* bestTarget = nullptr;
minSqDist = std::numeric_limits<float>::max();
threatMap->SetThreatType(unit);
const CCircuitAI::EnemyUnits& enemies = circuit->GetEnemyUnits();
for (auto& kv : enemies) {
CEnemyUnit* enemy = kv.second;
if (enemy->IsHidden() || (threatMap->GetThreatAt(enemy->GetPos()) >= power) ||
!terrainManager->CanMoveToPos(area, enemy->GetPos()))
{
continue;
}
if (((canTargetCat & circuit->GetWaterCategory()) == 0) && (enemy->GetPos().y < -SQUARE_SIZE * 4)) {
continue;
}
CCircuitDef* edef = enemy->GetCircuitDef();
if ((edef != nullptr) && ((edef->GetCategory() & canTargetCat) == 0)) {
continue;
}
float sqDist = pos.SqDistance2D(enemy->GetPos());
if (sqDist < minSqDist) {
bestTarget = enemy;
minSqDist = sqDist;
}
}
return bestTarget;
}