BWAPI
|
00001 #pragma once 00002 #include <string> 00003 #include <map> 00004 #include <set> 00005 #include <BWAPI/Race.h> 00006 #include <BWAPI/UnitSizeType.h> 00007 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 00019 { 00020 public: 00021 UnitType(); 00022 UnitType(int id); 00023 UnitType(const UnitType& other); 00024 UnitType& operator=(const UnitType& other); 00025 operator int() const; 00026 00028 int getID() const; 00029 00031 std::string getName() const; 00032 00035 Race getRace() const; 00036 00043 const std::pair< UnitType, int > whatBuilds() const; 00044 00049 const std::map< UnitType, int >& requiredUnits() const; 00050 00053 TechType requiredTech() const; 00054 00057 TechType cloakingTech() const; 00058 00061 const std::set< TechType >& abilities() const; 00062 00064 const std::set< UpgradeType >& upgrades() const; 00065 00069 UpgradeType armorUpgrade() const; 00070 00072 int maxHitPoints() const; 00073 00075 int maxShields() const; 00076 00078 int maxEnergy() const; 00079 00081 int armor() const; 00082 00086 int mineralPrice() const; 00087 00089 int gasPrice() const; 00090 00092 int buildTime() const; 00093 00096 int supplyRequired() const; 00097 00101 int supplyProvided() const; 00102 00104 int spaceRequired() const; 00105 00107 int spaceProvided() const; 00108 00110 int buildScore() const; 00111 00113 int destroyScore() const; 00114 00116 UnitSizeType size() const; 00117 00120 int tileWidth() const; 00121 00124 int tileHeight() const; 00125 00127 int dimensionLeft() const; 00128 00130 int dimensionUp() const; 00131 00133 int dimensionRight() const; 00134 00136 int dimensionDown() const; 00137 00139 int seekRange() const; 00140 00142 int sightRange() const; 00143 00145 WeaponType groundWeapon() const; 00146 00147 // TODO: add doc 00148 int maxGroundHits() const; 00149 00151 WeaponType airWeapon() const; 00152 00153 // TODO: add doc 00154 int maxAirHits() const; 00155 00159 double topSpeed() const; 00160 00163 int acceleration() const; 00164 00167 int haltDistance() const; 00168 00171 int turnRadius() const; 00172 00177 bool canProduce() const; 00178 00181 bool canAttack() const; 00182 00185 bool canMove() const; 00186 00188 bool isFlyer() const; 00189 00191 bool regeneratesHP() const; 00192 00194 bool isSpellcaster() const; 00195 00198 bool hasPermanentCloak() const; 00199 00202 bool isInvincible() const; 00203 00205 bool isOrganic() const; 00206 00208 bool isMechanical() const; 00209 00211 bool isRobotic() const; 00212 00216 bool isDetector() const; 00217 00220 bool isResourceContainer() const; 00221 00224 bool isResourceDepot() const; 00225 00227 bool isRefinery() const; 00228 00230 bool isWorker() const; 00231 00233 bool requiresPsi() const; 00234 00236 bool requiresCreep() const; 00237 00239 bool isTwoUnitsInOneEgg() const; 00240 00242 bool isBurrowable() const; 00243 00246 bool isCloakable() const; 00247 00249 bool isBuilding() const; 00250 00252 bool isAddon() const; 00253 00255 bool isFlyingBuilding() const; 00256 00258 bool isNeutral() const; 00259 00261 bool isHero() const; 00262 00264 bool isPowerup() const; 00265 00267 bool isBeacon() const; 00268 00270 bool isFlagBeacon() const; 00271 00273 bool isSpecialBuilding() const; 00274 00276 bool isSpell() const; 00277 00279 bool producesLarva() const; 00280 00282 bool isMineralField() const; 00283 00284 private: 00285 int id; 00286 }; 00287 namespace UnitTypes 00288 { 00289 00292 UnitType getUnitType(std::string name); 00293 00295 std::set<UnitType>& allUnitTypes(); 00296 00298 std::set<UnitType>& allMacroTypes(); 00299 void init(); 00300 extern const UnitType Terran_Marine; 00301 extern const UnitType Hero_Jim_Raynor_Marine; 00302 extern const UnitType Terran_Ghost; 00303 extern const UnitType Hero_Sarah_Kerrigan; 00304 extern const UnitType Hero_Samir_Duran; 00305 extern const UnitType Hero_Infested_Duran; 00306 extern const UnitType Hero_Alexei_Stukov; 00307 extern const UnitType Terran_Vulture; 00308 extern const UnitType Hero_Jim_Raynor_Vulture; 00309 extern const UnitType Terran_Goliath; 00310 extern const UnitType Hero_Alan_Schezar; 00311 extern const UnitType Terran_Siege_Tank_Tank_Mode; 00312 extern const UnitType Hero_Edmund_Duke_Tank_Mode; 00313 extern const UnitType Terran_SCV; 00314 extern const UnitType Terran_Wraith; 00315 extern const UnitType Hero_Tom_Kazansky; 00316 extern const UnitType Terran_Science_Vessel; 00317 extern const UnitType Hero_Magellan; 00318 extern const UnitType Terran_Dropship; 00319 extern const UnitType Terran_Battlecruiser; 00320 extern const UnitType Hero_Arcturus_Mengsk; 00321 extern const UnitType Hero_Hyperion; 00322 extern const UnitType Hero_Norad_II; 00323 extern const UnitType Hero_Gerard_DuGalle; 00324 extern const UnitType Terran_Vulture_Spider_Mine; 00325 extern const UnitType Terran_Nuclear_Missile; 00326 extern const UnitType Terran_Siege_Tank_Siege_Mode; 00327 extern const UnitType Hero_Edmund_Duke_Siege_Mode; 00328 extern const UnitType Terran_Firebat; 00329 extern const UnitType Hero_Gui_Montag; 00330 extern const UnitType Spell_Scanner_Sweep; 00331 extern const UnitType Terran_Medic; 00332 extern const UnitType Terran_Civilian; 00333 extern const UnitType Zerg_Larva; 00334 extern const UnitType Zerg_Egg; 00335 extern const UnitType Zerg_Zergling; 00336 extern const UnitType Hero_Devouring_One; 00337 extern const UnitType Hero_Infested_Kerrigan; 00338 extern const UnitType Zerg_Hydralisk; 00339 extern const UnitType Hero_Hunter_Killer; 00340 extern const UnitType Zerg_Ultralisk; 00341 extern const UnitType Hero_Torrasque; 00342 extern const UnitType Zerg_Broodling; 00343 extern const UnitType Zerg_Drone; 00344 extern const UnitType Zerg_Overlord; 00345 extern const UnitType Hero_Yggdrasill; 00346 extern const UnitType Zerg_Mutalisk; 00347 extern const UnitType Hero_Kukulza_Mutalisk; 00348 extern const UnitType Zerg_Guardian; 00349 extern const UnitType Hero_Kukulza_Guardian; 00350 extern const UnitType Zerg_Queen; 00351 extern const UnitType Hero_Matriarch; 00352 extern const UnitType Zerg_Defiler; 00353 extern const UnitType Hero_Unclean_One; 00354 extern const UnitType Zerg_Scourge; 00355 extern const UnitType Zerg_Infested_Terran; 00356 extern const UnitType Terran_Valkyrie; 00357 extern const UnitType Zerg_Cocoon; 00358 extern const UnitType Protoss_Corsair; 00359 extern const UnitType Hero_Raszagal; 00360 extern const UnitType Protoss_Dark_Templar; 00361 extern const UnitType Hero_Dark_Templar; 00362 extern const UnitType Hero_Zeratul; 00363 extern const UnitType Zerg_Devourer; 00364 extern const UnitType Protoss_Dark_Archon; 00365 extern const UnitType Protoss_Probe; 00366 extern const UnitType Protoss_Zealot; 00367 extern const UnitType Hero_Fenix_Zealot; 00368 extern const UnitType Protoss_Dragoon; 00369 extern const UnitType Hero_Fenix_Dragoon; 00370 extern const UnitType Protoss_High_Templar; 00371 extern const UnitType Hero_Tassadar; 00372 extern const UnitType Hero_Aldaris; 00373 extern const UnitType Protoss_Archon; 00374 extern const UnitType Hero_Tassadar_Zeratul_Archon; 00375 extern const UnitType Protoss_Shuttle; 00376 extern const UnitType Protoss_Scout; 00377 extern const UnitType Hero_Mojo; 00378 extern const UnitType Hero_Artanis; 00379 extern const UnitType Protoss_Arbiter; 00380 extern const UnitType Hero_Danimoth; 00381 extern const UnitType Protoss_Carrier; 00382 extern const UnitType Hero_Gantrithor; 00383 extern const UnitType Protoss_Interceptor; 00384 extern const UnitType Protoss_Reaver; 00385 extern const UnitType Hero_Warbringer; 00386 extern const UnitType Protoss_Observer; 00387 extern const UnitType Protoss_Scarab; 00388 extern const UnitType Critter_Rhynadon; 00389 extern const UnitType Critter_Bengalaas; 00390 extern const UnitType Special_Cargo_Ship; 00391 extern const UnitType Special_Mercenary_Gunship; 00392 extern const UnitType Critter_Scantid; 00393 extern const UnitType Critter_Kakaru; 00394 extern const UnitType Critter_Ragnasaur; 00395 extern const UnitType Critter_Ursadon; 00396 extern const UnitType Zerg_Lurker_Egg; 00397 extern const UnitType Zerg_Lurker; 00398 extern const UnitType Spell_Disruption_Web; 00399 extern const UnitType Terran_Command_Center; 00400 extern const UnitType Terran_Comsat_Station; 00401 extern const UnitType Terran_Nuclear_Silo; 00402 extern const UnitType Terran_Supply_Depot; 00403 extern const UnitType Terran_Refinery; 00404 extern const UnitType Terran_Barracks; 00405 extern const UnitType Terran_Academy; 00406 extern const UnitType Terran_Factory; 00407 extern const UnitType Terran_Starport; 00408 extern const UnitType Terran_Control_Tower; 00409 extern const UnitType Terran_Science_Facility; 00410 extern const UnitType Terran_Covert_Ops; 00411 extern const UnitType Terran_Physics_Lab; 00412 extern const UnitType Terran_Machine_Shop; 00413 extern const UnitType Terran_Engineering_Bay; 00414 extern const UnitType Terran_Armory; 00415 extern const UnitType Terran_Missile_Turret; 00416 extern const UnitType Terran_Bunker; 00417 extern const UnitType Special_Crashed_Norad_II; 00418 extern const UnitType Special_Ion_Cannon; 00419 extern const UnitType Zerg_Infested_Command_Center; 00420 extern const UnitType Zerg_Hatchery; 00421 extern const UnitType Zerg_Lair; 00422 extern const UnitType Zerg_Hive; 00423 extern const UnitType Zerg_Nydus_Canal; 00424 extern const UnitType Zerg_Hydralisk_Den; 00425 extern const UnitType Zerg_Defiler_Mound; 00426 extern const UnitType Zerg_Greater_Spire; 00427 extern const UnitType Zerg_Queens_Nest; 00428 extern const UnitType Zerg_Evolution_Chamber; 00429 extern const UnitType Zerg_Ultralisk_Cavern; 00430 extern const UnitType Zerg_Spire; 00431 extern const UnitType Zerg_Spawning_Pool; 00432 extern const UnitType Zerg_Creep_Colony; 00433 extern const UnitType Zerg_Spore_Colony; 00434 extern const UnitType Zerg_Sunken_Colony; 00435 extern const UnitType Special_Overmind_With_Shell; 00436 extern const UnitType Special_Overmind; 00437 extern const UnitType Zerg_Extractor; 00438 extern const UnitType Special_Mature_Chrysalis; 00439 extern const UnitType Special_Cerebrate; 00440 extern const UnitType Special_Cerebrate_Daggoth; 00441 extern const UnitType Protoss_Nexus; 00442 extern const UnitType Protoss_Robotics_Facility; 00443 extern const UnitType Protoss_Pylon; 00444 extern const UnitType Protoss_Assimilator; 00445 extern const UnitType Protoss_Observatory; 00446 extern const UnitType Protoss_Gateway; 00447 extern const UnitType Protoss_Photon_Cannon; 00448 extern const UnitType Protoss_Citadel_of_Adun; 00449 extern const UnitType Protoss_Cybernetics_Core; 00450 extern const UnitType Protoss_Templar_Archives; 00451 extern const UnitType Protoss_Forge; 00452 extern const UnitType Protoss_Stargate; 00453 extern const UnitType Special_Stasis_Cell_Prison; 00454 extern const UnitType Protoss_Fleet_Beacon; 00455 extern const UnitType Protoss_Arbiter_Tribunal; 00456 extern const UnitType Protoss_Robotics_Support_Bay; 00457 extern const UnitType Protoss_Shield_Battery; 00458 extern const UnitType Special_Khaydarin_Crystal_Form; 00459 extern const UnitType Special_Protoss_Temple; 00460 extern const UnitType Special_XelNaga_Temple; 00461 extern const UnitType Resource_Mineral_Field; 00462 extern const UnitType Resource_Mineral_Field_Type_2; 00463 extern const UnitType Resource_Mineral_Field_Type_3; 00464 extern const UnitType Special_Independant_Starport; 00465 extern const UnitType Resource_Vespene_Geyser; 00466 extern const UnitType Special_Warp_Gate; 00467 extern const UnitType Special_Psi_Disrupter; 00468 extern const UnitType Special_Power_Generator; 00469 extern const UnitType Special_Overmind_Cocoon; 00470 extern const UnitType Special_Zerg_Beacon; 00471 extern const UnitType Special_Terran_Beacon; 00472 extern const UnitType Special_Protoss_Beacon; 00473 extern const UnitType Special_Zerg_Flag_Beacon; 00474 extern const UnitType Special_Terran_Flag_Beacon; 00475 extern const UnitType Special_Protoss_Flag_Beacon; 00476 extern const UnitType Spell_Dark_Swarm; 00477 extern const UnitType Powerup_Uraj_Crystal; 00478 extern const UnitType Powerup_Khalis_Crystal; 00479 extern const UnitType Powerup_Flag; 00480 extern const UnitType Powerup_Young_Chrysalis; 00481 extern const UnitType Powerup_Psi_Emitter; 00482 extern const UnitType Powerup_Data_Disk; 00483 extern const UnitType Powerup_Khaydarin_Crystal; 00484 extern const UnitType Powerup_Mineral_Cluster_Type_1; 00485 extern const UnitType Powerup_Mineral_Cluster_Type_2; 00486 extern const UnitType Powerup_Protoss_Gas_Orb_Type_1; 00487 extern const UnitType Powerup_Protoss_Gas_Orb_Type_2; 00488 extern const UnitType Powerup_Zerg_Gas_Sac_Type_1; 00489 extern const UnitType Powerup_Zerg_Gas_Sac_Type_2; 00490 extern const UnitType Powerup_Terran_Gas_Tank_Type_1; 00491 extern const UnitType Powerup_Terran_Gas_Tank_Type_2; 00492 extern const UnitType Special_Map_Revealer; 00493 extern const UnitType Special_Floor_Missile_Trap; 00494 extern const UnitType Special_Floor_Hatch; 00495 extern const UnitType Special_Upper_Level_Door; 00496 extern const UnitType Special_Right_Upper_Level_Door; 00497 extern const UnitType Special_Pit_Door; 00498 extern const UnitType Special_Right_Pit_Door; 00499 extern const UnitType Special_Floor_Gun_Trap; 00500 extern const UnitType Special_Wall_Missile_Trap; 00501 extern const UnitType Special_Wall_Flame_Trap; 00502 extern const UnitType Special_Right_Wall_Missile_Trap; 00503 extern const UnitType Special_Right_Wall_Flame_Trap; 00504 extern const UnitType Special_Start_Location; 00505 00506 extern const UnitType None; 00507 extern const UnitType AllUnits; 00508 extern const UnitType Men; 00509 extern const UnitType Buildings; 00510 extern const UnitType Factories; 00511 extern const UnitType Unknown; 00512 00513 } 00514 }