BWAPI
|
00001 #pragma once 00002 #include <string> 00003 #include <map> 00004 #include <set> 00005 #include <BWAPI/Race.h> 00006 #include <BWAPI/UnitSizeType.h> 00007 #include "Type.h" 00008 #define BWAPI_UNIT_TYPE_MAX_COUNT 234 00009 00010 namespace BWAPI 00011 { 00012 class TechType; 00013 class UpgradeType; 00014 class WeaponType; 00015 00018 class UnitType : public Type 00019 { 00020 public: 00021 UnitType(); 00022 UnitType(int id); 00023 00025 const std::string &getName() const; 00026 const char *c_str() const; 00027 00030 Race getRace() const; 00031 00038 const std::pair< UnitType, int > whatBuilds() const; 00039 00044 const std::map< UnitType, int >& requiredUnits() const; 00045 00048 TechType requiredTech() const; 00049 00052 TechType cloakingTech() const; 00053 00056 const std::set< TechType >& abilities() const; 00057 00059 const std::set< UpgradeType >& upgrades() const; 00060 00064 UpgradeType armorUpgrade() const; 00065 00067 int maxHitPoints() const; 00068 00070 int maxShields() const; 00071 00073 int maxEnergy() const; 00074 00076 int armor() const; 00077 00081 int mineralPrice() const; 00082 00084 int gasPrice() const; 00085 00087 int buildTime() const; 00088 00091 int supplyRequired() const; 00092 00096 int supplyProvided() const; 00097 00099 int spaceRequired() const; 00100 00102 int spaceProvided() const; 00103 00105 int buildScore() const; 00106 00108 int destroyScore() const; 00109 00111 UnitSizeType size() const; 00112 00115 int tileWidth() const; 00116 00119 int tileHeight() const; 00120 00122 int dimensionLeft() const; 00123 00125 int dimensionUp() const; 00126 00128 int dimensionRight() const; 00129 00131 int dimensionDown() const; 00132 00134 int seekRange() const; 00135 00137 int sightRange() const; 00138 00140 WeaponType groundWeapon() const; 00141 00142 // TODO: add doc 00143 int maxGroundHits() const; 00144 00146 WeaponType airWeapon() const; 00147 00148 // TODO: add doc 00149 int maxAirHits() const; 00150 00154 double topSpeed() const; 00155 00158 int acceleration() const; 00159 00162 int haltDistance() const; 00163 00166 int turnRadius() const; 00167 00172 bool canProduce() const; 00173 00176 bool canAttack() const; 00177 00180 bool canMove() const; 00181 00183 bool isFlyer() const; 00184 00186 bool regeneratesHP() const; 00187 00189 bool isSpellcaster() const; 00190 00193 bool hasPermanentCloak() const; 00194 00197 bool isInvincible() const; 00198 00200 bool isOrganic() const; 00201 00203 bool isMechanical() const; 00204 00206 bool isRobotic() const; 00207 00211 bool isDetector() const; 00212 00215 bool isResourceContainer() const; 00216 00219 bool isResourceDepot() const; 00220 00222 bool isRefinery() const; 00223 00225 bool isWorker() const; 00226 00228 bool requiresPsi() const; 00229 00231 bool requiresCreep() const; 00232 00234 bool isTwoUnitsInOneEgg() const; 00235 00237 bool isBurrowable() const; 00238 00241 bool isCloakable() const; 00242 00244 bool isBuilding() const; 00245 00247 bool isAddon() const; 00248 00250 bool isFlyingBuilding() const; 00251 00253 bool isNeutral() const; 00254 00256 bool isHero() const; 00257 00259 bool isPowerup() const; 00260 00262 bool isBeacon() const; 00263 00265 bool isFlagBeacon() const; 00266 00268 bool isSpecialBuilding() const; 00269 00271 bool isSpell() const; 00272 00274 bool producesLarva() const; 00275 00277 bool isMineralField() const; 00278 00281 bool canBuildAddon() const; 00282 }; 00283 namespace UnitTypes 00284 { 00285 00288 UnitType getUnitType(std::string name); 00289 00290 int maxUnitWidth(); 00291 int maxUnitHeight(); 00292 00294 const std::set<UnitType>& allUnitTypes(); 00295 00297 const std::set<UnitType>& allMacroTypes(); 00298 void init(); 00299 extern const UnitType Terran_Marine; 00300 extern const UnitType Hero_Jim_Raynor_Marine; 00301 extern const UnitType Terran_Ghost; 00302 extern const UnitType Hero_Sarah_Kerrigan; 00303 extern const UnitType Hero_Samir_Duran; 00304 extern const UnitType Hero_Infested_Duran; 00305 extern const UnitType Hero_Alexei_Stukov; 00306 extern const UnitType Terran_Vulture; 00307 extern const UnitType Hero_Jim_Raynor_Vulture; 00308 extern const UnitType Terran_Goliath; 00309 extern const UnitType Hero_Alan_Schezar; 00310 extern const UnitType Terran_Siege_Tank_Tank_Mode; 00311 extern const UnitType Hero_Edmund_Duke_Tank_Mode; 00312 extern const UnitType Terran_SCV; 00313 extern const UnitType Terran_Wraith; 00314 extern const UnitType Hero_Tom_Kazansky; 00315 extern const UnitType Terran_Science_Vessel; 00316 extern const UnitType Hero_Magellan; 00317 extern const UnitType Terran_Dropship; 00318 extern const UnitType Terran_Battlecruiser; 00319 extern const UnitType Hero_Arcturus_Mengsk; 00320 extern const UnitType Hero_Hyperion; 00321 extern const UnitType Hero_Norad_II; 00322 extern const UnitType Hero_Gerard_DuGalle; 00323 extern const UnitType Terran_Vulture_Spider_Mine; 00324 extern const UnitType Terran_Nuclear_Missile; 00325 extern const UnitType Terran_Siege_Tank_Siege_Mode; 00326 extern const UnitType Hero_Edmund_Duke_Siege_Mode; 00327 extern const UnitType Terran_Firebat; 00328 extern const UnitType Hero_Gui_Montag; 00329 extern const UnitType Spell_Scanner_Sweep; 00330 extern const UnitType Terran_Medic; 00331 extern const UnitType Terran_Civilian; 00332 extern const UnitType Zerg_Larva; 00333 extern const UnitType Zerg_Egg; 00334 extern const UnitType Zerg_Zergling; 00335 extern const UnitType Hero_Devouring_One; 00336 extern const UnitType Hero_Infested_Kerrigan; 00337 extern const UnitType Zerg_Hydralisk; 00338 extern const UnitType Hero_Hunter_Killer; 00339 extern const UnitType Zerg_Ultralisk; 00340 extern const UnitType Hero_Torrasque; 00341 extern const UnitType Zerg_Broodling; 00342 extern const UnitType Zerg_Drone; 00343 extern const UnitType Zerg_Overlord; 00344 extern const UnitType Hero_Yggdrasill; 00345 extern const UnitType Zerg_Mutalisk; 00346 extern const UnitType Hero_Kukulza_Mutalisk; 00347 extern const UnitType Zerg_Guardian; 00348 extern const UnitType Hero_Kukulza_Guardian; 00349 extern const UnitType Zerg_Queen; 00350 extern const UnitType Hero_Matriarch; 00351 extern const UnitType Zerg_Defiler; 00352 extern const UnitType Hero_Unclean_One; 00353 extern const UnitType Zerg_Scourge; 00354 extern const UnitType Zerg_Infested_Terran; 00355 extern const UnitType Terran_Valkyrie; 00356 extern const UnitType Zerg_Cocoon; 00357 extern const UnitType Protoss_Corsair; 00358 extern const UnitType Hero_Raszagal; 00359 extern const UnitType Protoss_Dark_Templar; 00360 extern const UnitType Hero_Dark_Templar; 00361 extern const UnitType Hero_Zeratul; 00362 extern const UnitType Zerg_Devourer; 00363 extern const UnitType Protoss_Dark_Archon; 00364 extern const UnitType Protoss_Probe; 00365 extern const UnitType Protoss_Zealot; 00366 extern const UnitType Hero_Fenix_Zealot; 00367 extern const UnitType Protoss_Dragoon; 00368 extern const UnitType Hero_Fenix_Dragoon; 00369 extern const UnitType Protoss_High_Templar; 00370 extern const UnitType Hero_Tassadar; 00371 extern const UnitType Hero_Aldaris; 00372 extern const UnitType Protoss_Archon; 00373 extern const UnitType Hero_Tassadar_Zeratul_Archon; 00374 extern const UnitType Protoss_Shuttle; 00375 extern const UnitType Protoss_Scout; 00376 extern const UnitType Hero_Mojo; 00377 extern const UnitType Hero_Artanis; 00378 extern const UnitType Protoss_Arbiter; 00379 extern const UnitType Hero_Danimoth; 00380 extern const UnitType Protoss_Carrier; 00381 extern const UnitType Hero_Gantrithor; 00382 extern const UnitType Protoss_Interceptor; 00383 extern const UnitType Protoss_Reaver; 00384 extern const UnitType Hero_Warbringer; 00385 extern const UnitType Protoss_Observer; 00386 extern const UnitType Protoss_Scarab; 00387 extern const UnitType Critter_Rhynadon; 00388 extern const UnitType Critter_Bengalaas; 00389 extern const UnitType Special_Cargo_Ship; 00390 extern const UnitType Special_Mercenary_Gunship; 00391 extern const UnitType Critter_Scantid; 00392 extern const UnitType Critter_Kakaru; 00393 extern const UnitType Critter_Ragnasaur; 00394 extern const UnitType Critter_Ursadon; 00395 extern const UnitType Zerg_Lurker_Egg; 00396 extern const UnitType Zerg_Lurker; 00397 extern const UnitType Spell_Disruption_Web; 00398 extern const UnitType Terran_Command_Center; 00399 extern const UnitType Terran_Comsat_Station; 00400 extern const UnitType Terran_Nuclear_Silo; 00401 extern const UnitType Terran_Supply_Depot; 00402 extern const UnitType Terran_Refinery; 00403 extern const UnitType Terran_Barracks; 00404 extern const UnitType Terran_Academy; 00405 extern const UnitType Terran_Factory; 00406 extern const UnitType Terran_Starport; 00407 extern const UnitType Terran_Control_Tower; 00408 extern const UnitType Terran_Science_Facility; 00409 extern const UnitType Terran_Covert_Ops; 00410 extern const UnitType Terran_Physics_Lab; 00411 extern const UnitType Terran_Machine_Shop; 00412 extern const UnitType Terran_Engineering_Bay; 00413 extern const UnitType Terran_Armory; 00414 extern const UnitType Terran_Missile_Turret; 00415 extern const UnitType Terran_Bunker; 00416 extern const UnitType Special_Crashed_Norad_II; 00417 extern const UnitType Special_Ion_Cannon; 00418 extern const UnitType Zerg_Infested_Command_Center; 00419 extern const UnitType Zerg_Hatchery; 00420 extern const UnitType Zerg_Lair; 00421 extern const UnitType Zerg_Hive; 00422 extern const UnitType Zerg_Nydus_Canal; 00423 extern const UnitType Zerg_Hydralisk_Den; 00424 extern const UnitType Zerg_Defiler_Mound; 00425 extern const UnitType Zerg_Greater_Spire; 00426 extern const UnitType Zerg_Queens_Nest; 00427 extern const UnitType Zerg_Evolution_Chamber; 00428 extern const UnitType Zerg_Ultralisk_Cavern; 00429 extern const UnitType Zerg_Spire; 00430 extern const UnitType Zerg_Spawning_Pool; 00431 extern const UnitType Zerg_Creep_Colony; 00432 extern const UnitType Zerg_Spore_Colony; 00433 extern const UnitType Zerg_Sunken_Colony; 00434 extern const UnitType Special_Overmind_With_Shell; 00435 extern const UnitType Special_Overmind; 00436 extern const UnitType Zerg_Extractor; 00437 extern const UnitType Special_Mature_Chrysalis; 00438 extern const UnitType Special_Cerebrate; 00439 extern const UnitType Special_Cerebrate_Daggoth; 00440 extern const UnitType Protoss_Nexus; 00441 extern const UnitType Protoss_Robotics_Facility; 00442 extern const UnitType Protoss_Pylon; 00443 extern const UnitType Protoss_Assimilator; 00444 extern const UnitType Protoss_Observatory; 00445 extern const UnitType Protoss_Gateway; 00446 extern const UnitType Protoss_Photon_Cannon; 00447 extern const UnitType Protoss_Citadel_of_Adun; 00448 extern const UnitType Protoss_Cybernetics_Core; 00449 extern const UnitType Protoss_Templar_Archives; 00450 extern const UnitType Protoss_Forge; 00451 extern const UnitType Protoss_Stargate; 00452 extern const UnitType Special_Stasis_Cell_Prison; 00453 extern const UnitType Protoss_Fleet_Beacon; 00454 extern const UnitType Protoss_Arbiter_Tribunal; 00455 extern const UnitType Protoss_Robotics_Support_Bay; 00456 extern const UnitType Protoss_Shield_Battery; 00457 extern const UnitType Special_Khaydarin_Crystal_Form; 00458 extern const UnitType Special_Protoss_Temple; 00459 extern const UnitType Special_XelNaga_Temple; 00460 extern const UnitType Resource_Mineral_Field; 00461 extern const UnitType Resource_Mineral_Field_Type_2; 00462 extern const UnitType Resource_Mineral_Field_Type_3; 00463 extern const UnitType Special_Independant_Starport; 00464 extern const UnitType Resource_Vespene_Geyser; 00465 extern const UnitType Special_Warp_Gate; 00466 extern const UnitType Special_Psi_Disrupter; 00467 extern const UnitType Special_Power_Generator; 00468 extern const UnitType Special_Overmind_Cocoon; 00469 extern const UnitType Special_Zerg_Beacon; 00470 extern const UnitType Special_Terran_Beacon; 00471 extern const UnitType Special_Protoss_Beacon; 00472 extern const UnitType Special_Zerg_Flag_Beacon; 00473 extern const UnitType Special_Terran_Flag_Beacon; 00474 extern const UnitType Special_Protoss_Flag_Beacon; 00475 extern const UnitType Spell_Dark_Swarm; 00476 extern const UnitType Powerup_Uraj_Crystal; 00477 extern const UnitType Powerup_Khalis_Crystal; 00478 extern const UnitType Powerup_Flag; 00479 extern const UnitType Powerup_Young_Chrysalis; 00480 extern const UnitType Powerup_Psi_Emitter; 00481 extern const UnitType Powerup_Data_Disk; 00482 extern const UnitType Powerup_Khaydarin_Crystal; 00483 extern const UnitType Powerup_Mineral_Cluster_Type_1; 00484 extern const UnitType Powerup_Mineral_Cluster_Type_2; 00485 extern const UnitType Powerup_Protoss_Gas_Orb_Type_1; 00486 extern const UnitType Powerup_Protoss_Gas_Orb_Type_2; 00487 extern const UnitType Powerup_Zerg_Gas_Sac_Type_1; 00488 extern const UnitType Powerup_Zerg_Gas_Sac_Type_2; 00489 extern const UnitType Powerup_Terran_Gas_Tank_Type_1; 00490 extern const UnitType Powerup_Terran_Gas_Tank_Type_2; 00491 extern const UnitType Special_Map_Revealer; 00492 extern const UnitType Special_Floor_Missile_Trap; 00493 extern const UnitType Special_Floor_Hatch; 00494 extern const UnitType Special_Upper_Level_Door; 00495 extern const UnitType Special_Right_Upper_Level_Door; 00496 extern const UnitType Special_Pit_Door; 00497 extern const UnitType Special_Right_Pit_Door; 00498 extern const UnitType Special_Floor_Gun_Trap; 00499 extern const UnitType Special_Wall_Missile_Trap; 00500 extern const UnitType Special_Wall_Flame_Trap; 00501 extern const UnitType Special_Right_Wall_Missile_Trap; 00502 extern const UnitType Special_Right_Wall_Flame_Trap; 00503 extern const UnitType Special_Start_Location; 00504 00505 extern const UnitType None; 00506 extern const UnitType AllUnits; 00507 extern const UnitType Men; 00508 extern const UnitType Buildings; 00509 extern const UnitType Factories; 00510 extern const UnitType Unknown; 00511 00512 } 00513 }