本文整理汇总了C++中bwapi::UnitType::airWeapon方法的典型用法代码示例。如果您正苦于以下问题:C++ UnitType::airWeapon方法的具体用法?C++ UnitType::airWeapon怎么用?C++ UnitType::airWeapon使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类bwapi::UnitType
的用法示例。
在下文中一共展示了UnitType::airWeapon方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getAttackPriority
// get the attack priority of a type in relation to a zergling
int RangedManager::getAttackPriority(BWAPI::UnitInterface* rangedUnit, BWAPI::UnitInterface* target)
{
BWAPI::UnitType rangedUnitType = rangedUnit->getType();
BWAPI::UnitType targetType = target->getType();
bool canAttackUs = rangedUnitType.isFlyer() ? targetType.airWeapon() != BWAPI::WeaponTypes::None : targetType.groundWeapon() != BWAPI::WeaponTypes::None;
// highest priority is something that can attack us or aid in combat
if (targetType == BWAPI::UnitTypes::Terran_Medic || canAttackUs ||
targetType == BWAPI::UnitTypes::Terran_Bunker)
{
return 3;
}
// next priority is worker
else if (targetType.isWorker())
{
return 2;
}
// then everything else
else
{
return 1;
}
}
示例2: getAttackPriority
// get the attack priority of a type in relation to a zergling
int LurkerManager::getAttackPriority(BWAPI::Unit LurkerUnit, BWAPI::Unit target)
{
BWAPI::UnitType LurkerType = LurkerUnit->getType();
BWAPI::UnitType targetType = target->getType();
bool isThreat = LurkerType.isFlyer() ? targetType.airWeapon() != BWAPI::WeaponTypes::None : targetType.groundWeapon() != BWAPI::WeaponTypes::None;
if (target->getType().isWorker())
{
isThreat = false;
}
if (target->getType() == BWAPI::UnitTypes::Zerg_Larva || target->getType() == BWAPI::UnitTypes::Zerg_Egg)
{
return 0;
}
// if the target is building something near our base something is fishy
BWAPI::Position ourBasePosition = BWAPI::Position(BWAPI::Broodwar->self()->getStartLocation());
if (target->getType().isWorker() && (target->isConstructing() || target->isRepairing()) && target->getDistance(ourBasePosition) < 1200)
{
return 100;
}
if (target->getType().isBuilding() && (target->isCompleted() || target->isBeingConstructed()) && target->getDistance(ourBasePosition) < 1200)
{
return 90;
}
// highest priority is something that can attack us or aid in combat
if (targetType == BWAPI::UnitTypes::Terran_Bunker || isThreat)
{
return 11;
}
// next priority is worker
else if (targetType.isWorker())
{
return 11;
}
// next is special buildings
else if (targetType == BWAPI::UnitTypes::Protoss_Pylon)
{
return 5;
}
// next is buildings that cost gas
else if (targetType.gasPrice() > 0)
{
return 4;
}
else if (targetType.mineralPrice() > 0)
{
return 3;
}
// then everything else
else
{
return 50;
}
}
示例3: getPriorityDefault
int RangedManager::getPriorityDefault(BWAPI::Unit rangedUnit, BWAPI::Unit target)
{
BWAPI::UnitType rangedType = rangedUnit->getType();
BWAPI::UnitType targetType = target->getType();
if (target->getType() == BWAPI::UnitTypes::Zerg_Overlord)
return 1;
if (target->getType() == BWAPI::UnitTypes::Protoss_Photon_Cannon
|| target->getType() == BWAPI::UnitTypes::Zerg_Sunken_Colony)
{
return 8;
}
if (rangedUnit->getType() == BWAPI::UnitTypes::Zerg_Scourge)
{
if (target->getType() == BWAPI::UnitTypes::Protoss_Carrier)
{
return 100;
}
if (target->getType() == BWAPI::UnitTypes::Protoss_Corsair)
{
return 90;
}
}
bool isThreat = rangedType.isFlyer() ? targetType.airWeapon() != BWAPI::WeaponTypes::None : targetType.groundWeapon() != BWAPI::WeaponTypes::None;
if (target->getType().isWorker())
{
isThreat = false;
}
if (target->getType() == BWAPI::UnitTypes::Zerg_Larva || target->getType() == BWAPI::UnitTypes::Zerg_Egg)
{
return 0;
}
if (rangedUnit->isFlying() && target->getType() == BWAPI::UnitTypes::Protoss_Carrier)
{
return 101;
} // if the target is building something near our base something is fishy
// highest priority is something that can attack us or aid in combat
if (targetType == BWAPI::UnitTypes::Terran_Bunker || isThreat)
{
return 11;
}
// next priority is worker
else if (targetType.isWorker())
{
if (order.getType() != SquadOrderTypes::Defend&&BWTA::getRegion(rangedUnit->getPosition()) != BWTA::getRegion(BWAPI::Broodwar->self()->getStartLocation()))
{
return 4;
}
else
return 1;
}
// next is special buildings
else if (targetType == BWAPI::UnitTypes::Zerg_Spawning_Pool)
{
return 5;
}
// next is special buildings
else if (targetType == BWAPI::UnitTypes::Protoss_Pylon)
{
return 5;
}
// next is buildings that cost gas
else if (targetType.gasPrice() > 0)
{
return 4;
}
else if (targetType.mineralPrice() > 0)
{
return 3;
}
// then everything else
else
{
return 1;
}
}
示例4: GetWeapon
BWAPI::WeaponType UnitUtil::GetWeapon(BWAPI::UnitType attacker, BWAPI::UnitType target)
{
return target.isFlyer() ? attacker.airWeapon() : attacker.groundWeapon();
}
示例5: getPriorityDefault
int InterceptorManager::getPriorityDefault(BWAPI::Unit rangedUnit, BWAPI::Unit target)
{
BWAPI::UnitType rangedType = rangedUnit->getType();
BWAPI::UnitType targetType = target->getType();
if (target->getType() == BWAPI::UnitTypes::Protoss_Photon_Cannon
|| target->getType() == BWAPI::UnitTypes::Zerg_Sunken_Colony)
{
return 8;
}
if (rangedUnit->getType() == BWAPI::UnitTypes::Zerg_Scourge)
{
if (target->getType() == BWAPI::UnitTypes::Protoss_Carrier)
{
return 100;
}
if (target->getType() == BWAPI::UnitTypes::Protoss_Corsair)
{
return 90;
}
}
bool isThreat = rangedType.isFlyer() ? targetType.airWeapon() != BWAPI::WeaponTypes::None : targetType.groundWeapon() != BWAPI::WeaponTypes::None;
if (target->getType().isWorker())
{
isThreat = false;
}
if (target->getType() == BWAPI::UnitTypes::Zerg_Larva || target->getType() == BWAPI::UnitTypes::Zerg_Egg)
{
return 0;
}
if (rangedUnit->isFlying() && target->getType() == BWAPI::UnitTypes::Protoss_Carrier)
{
return 101;
}
// if the target is building something near our base something is fishy
BWAPI::Position ourBasePosition = BWAPI::Position(BWAPI::Broodwar->self()->getStartLocation());
if (target->getType().isWorker() && (target->isConstructing() || target->isRepairing()) && target->getDistance(ourBasePosition) < 1200)
{
return 100;
}
if (target->getType().isBuilding() && (target->isCompleted() || target->isBeingConstructed()) && target->getDistance(ourBasePosition) < 1200)
{
return 90;
}
// highest priority is something that can attack us or aid in combat
if (targetType == BWAPI::UnitTypes::Terran_Bunker || isThreat)
{
return 11;
}
// next priority is worker
else if (targetType.isWorker())
{
if (rangedUnit->getType() == BWAPI::UnitTypes::Terran_Vulture)
{
return 11;
}
return 11;
}
// next is special buildings
else if (targetType == BWAPI::UnitTypes::Zerg_Spawning_Pool)
{
return 5;
}
// next is special buildings
else if (targetType == BWAPI::UnitTypes::Protoss_Pylon)
{
return 5;
}
// next is buildings that cost gas
else if (targetType.gasPrice() > 0)
{
return 4;
}
else if (targetType.mineralPrice() > 0)
{
return 3;
}
// then everything else
else
{
return 1;
}
}
示例6: getCounters
Composition getCounters(BWAPI::UnitType enemyUnitType)
{
auto allUnitTypes = BWAPI::UnitTypes::allUnitTypes();
std::unordered_map<BWAPI::UnitType, int> unitTypeCounterAmount; //LF new name pls
auto groundDamageType = enemyUnitType.groundWeapon().damageType();
auto airDamageType = enemyUnitType.airWeapon().damageType();
auto sizeType = enemyUnitType.size();
bool flyer = enemyUnitType.isFlyer();
for each (auto unitType in allUnitTypes)
{
if (unitType.getRace() != util::game::getSelf()->getRace() || unitType.isHero() || unitType.isBuilding() || unitType.isWorker())
continue;
//if enemy unit flies and friendly unit can damage it...
if (flyer)
{
if (unitType.airWeapon().damageAmount() > 0)
{
unitTypeCounterAmount[unitType]++;
//if friendly unit flies and enemy unit can't damage it...
if (!(enemyUnitType.airWeapon().damageAmount() > 0))
unitTypeCounterAmount[unitType]++;
//if enemy unit damage type is concussive and friendly unit size is small...
if (airDamageType == BWAPI::DamageTypes::Concussive && unitType.size() == BWAPI::UnitSizeTypes::Small)
unitTypeCounterAmount[unitType]++;
//if enemy unit damage type is explosive and friendly unit size is large...
else if (airDamageType == BWAPI::DamageTypes::Explosive && unitType.size() == BWAPI::UnitSizeTypes::Large)
unitTypeCounterAmount[unitType]++;
//if enemy unit size is small and friendly damage type is explosive...
if (sizeType == BWAPI::UnitSizeTypes::Small && unitType.airWeapon().damageType() == BWAPI::DamageTypes::Explosive)
unitTypeCounterAmount[unitType]++;
//if enemy unit size is medium or large and friendly damage type is concussive...
else if ((sizeType == BWAPI::UnitSizeTypes::Medium || sizeType == BWAPI::UnitSizeTypes::Large) && unitType.airWeapon().damageType() == BWAPI::DamageTypes::Concussive)
unitTypeCounterAmount[unitType]++;
}
else
continue;
}
//if enemy unit is ground unit and friendly unit can damage it...
if (!flyer && unitType.groundWeapon().damageAmount() > 0)
{
unitTypeCounterAmount[unitType]++;
//if friendly unit flies and enemy unit can't damage it...
if (unitType.isFlyer() && !(enemyUnitType.airWeapon().damageAmount() > 0))
unitTypeCounterAmount[unitType]++;
//if enemy unit damage type is concussive and friendly unit size is small...
if (groundDamageType == BWAPI::DamageTypes::Concussive && unitType.size() == BWAPI::UnitSizeTypes::Small)
unitTypeCounterAmount[unitType]++;
//if enemy unit damage type is explosive and friendly unit size is large...
else if (groundDamageType == BWAPI::DamageTypes::Explosive && unitType.size() == BWAPI::UnitSizeTypes::Large)
unitTypeCounterAmount[unitType]++;
//if enemy unit size is small and friendly damage type is explosive...
if (sizeType == BWAPI::UnitSizeTypes::Small && unitType.groundWeapon().damageType() == BWAPI::DamageTypes::Explosive)
unitTypeCounterAmount[unitType]++;
//if enemy unit size is medium or large and friendly damage type is concussive...
else if ((sizeType == BWAPI::UnitSizeTypes::Medium || sizeType == BWAPI::UnitSizeTypes::Large) && unitType.groundWeapon().damageType() == BWAPI::DamageTypes::Concussive)
unitTypeCounterAmount[unitType]++;
}
else
continue;
}
Composition counterComposition;
for (auto &unitType = unitTypeCounterAmount.begin(); unitType != unitTypeCounterAmount.end(); unitType++)
{
if (unitType->first == BWAPI::UnitTypes::Spell_Scanner_Sweep)
counterComposition.addType(BWAPI::UnitTypes::Terran_Comsat_Station, unitType->second);
else if (unitType->first == BWAPI::UnitTypes::Terran_Siege_Tank_Siege_Mode)
counterComposition.addType(BWAPI::UnitTypes::Terran_Siege_Tank_Tank_Mode, unitType->second);
else if(unitType->first == BWAPI::UnitTypes::Terran_Vulture_Spider_Mine)
counterComposition.addType(BWAPI::UnitTypes::Terran_Vulture, unitType->second);
else
counterComposition.addType(unitType->first, unitType->second);
}
return counterComposition;
}
示例7: getAttackPriority
/// Returns target attack priority.
/// Returned value must be greater than 0
int BattlecruiserManagerExt::getAttackPriority(BWAPI::Unit * selectedUnit, BWAPI::Unit * target)
{
BWAPI::UnitType selectedUnitType = selectedUnit->getType();
BWAPI::UnitType targetType = target->getType();
bool canAttackUs = targetType.airWeapon() != BWAPI::WeaponTypes::None;
int selectedUnitWeaponRange = selectedUnitType.groundWeapon().maxRange(); // 160, Concussive
int targetWeaponRange = targetType.groundWeapon().maxRange();
// Detectors are top priority but Photon Cannons are too strong
if (targetType == BWAPI::UnitTypes::Protoss_Carrier)
{
useYamatoGun(selectedUnit, target);
return 99;
}
else if (targetType.isDetector()
&& targetType != BWAPI::UnitTypes::Protoss_Photon_Cannon)
{
useYamatoGun(selectedUnit, target);
return 100;
}
// Larvas are low priority targets
else if (targetType == BWAPI::UnitTypes::Zerg_Larva
|| targetType == BWAPI::UnitTypes::Protoss_Interceptor)
{
return 1;
}
else if (targetType == BWAPI::UnitTypes::Protoss_Pylon)
{
return 3;
}
else if ((targetType.isBuilding()) && !(targetType.canAttack()))
{
return 2;
}
// Workers are priority over ground units and buildings
else if (targetType.isWorker())
{
return 4;
}
else if (isTurret(target))
{
// Attack tower if in its weapon range
// Otherwise attack something else
if (target->isInWeaponRange(selectedUnit))
{
return 5;
}
else
{
return 1;
}
}
// Anti air units are top priority
else if (canAttackUs)
{
return selectedUnitWeaponRange + 10;
}
else
{
return 1;
}
}