BWAPI
|
00001 #pragma once 00002 #include "GroupBase.h" 00003 00004 #include <BWAPI.h> 00005 #include <BWTA.h> 00006 00007 // Original file was in BWSAL 00008 00009 enum FilterFlag 00010 { 00011 exists = 1, 00012 isAccelerating, 00013 isAttacking, 00014 isBeingConstructed, 00015 isBeingGathered, 00016 isBeingHealed, 00017 isBlind, 00018 isBraking, 00019 isBurrowed, 00020 isCarryingGas, 00021 isCarryingMinerals, 00022 isCloaked, 00023 isCompleted, 00024 isConstructing, 00025 isDefenseMatrixed, 00026 isDetected, 00027 isEnsnared, 00028 isFollowing, 00029 isGatheringGas, 00030 isGatheringMinerals, 00031 isHallucination, 00032 isHoldingPosition, 00033 isIdle, 00034 isInterruptible, 00035 isIrradiated, 00036 isLifted, 00037 isLoaded, 00038 isLockedDown, 00039 isMaelstrommed, 00040 isMorphing, 00041 isMoving, 00042 isParasited, 00043 isPatrolling, 00044 isPlagued, 00045 isRepairing, 00046 isResearching, 00047 isSelected, 00048 isSieged, 00049 isStartingAttack, 00050 isStasised, 00051 isStimmed, 00052 isStuck, 00053 isTraining, 00054 isUnderStorm, 00055 isUnpowered, 00056 isUpgrading, 00057 isVisible, 00058 00059 canProduce, 00060 canAttack, 00061 canMove, 00062 isFlyer, 00063 regeneratesHP, 00064 isSpellcaster, 00065 hasPermanentCloak, 00066 isInvincible, 00067 isOrganic, 00068 isMechanical, 00069 isRobotic, 00070 isDetector, 00071 isResourceContainer, 00072 isResourceDepot, 00073 isRefinery, 00074 isWorker, 00075 requiresPsi, 00076 requiresCreep, 00077 isTwoUnitsInOneEgg, 00078 isBurrowable, 00079 isCloakable, 00080 isBuilding, 00081 isAddon, 00082 isFlyingBuilding, 00083 isNeutral, 00084 isHero, 00085 isPowerup, 00086 isBeacon, 00087 isFlagBeacon, 00088 isSpecialBuilding, 00089 isSpell, 00090 00091 Firebat, 00092 Ghost, 00093 Goliath, 00094 Marine, 00095 Medic, 00096 SCV, 00097 Siege_Tank, 00098 Vulture, 00099 Vulture_Spider_Mine, 00100 Battlecruiser, 00101 Dropship, 00102 Nuclear_Missile, 00103 Science_Vessel, 00104 Valkyrie, 00105 Wraith, 00106 Alan_Schezar, 00107 Alexei_Stukov, 00108 Arcturus_Mengsk, 00109 Edmund_Duke, 00110 Gerard_DuGalle, 00111 Gui_Montag, 00112 Hyperion, 00113 Jim_Raynor_Marine, 00114 Jim_Raynor_Vulture, 00115 Magellan, 00116 Norad_II, 00117 Samir_Duran, 00118 Sarah_Kerrigan, 00119 Tom_Kazansky, 00120 Civilian, 00121 Academy, 00122 Armory, 00123 Barracks, 00124 Bunker, 00125 Command_Center, 00126 Engineering_Bay, 00127 Factory, 00128 Missile_Turret, 00129 Refinery, 00130 Science_Facility, 00131 Starport, 00132 Supply_Depot, 00133 Comsat_Station, 00134 Control_Tower, 00135 Covert_Ops, 00136 Machine_Shop, 00137 Nuclear_Silo, 00138 Physics_Lab, 00139 Crashed_Norad_II, 00140 Ion_Cannon, 00141 Power_Generator, 00142 Psi_Disrupter, 00143 00144 Archon, 00145 Dark_Archon, 00146 Dark_Templar, 00147 Dragoon, 00148 High_Templar, 00149 Probe, 00150 Reaver, 00151 Scarab, 00152 Zealot, 00153 Arbiter, 00154 Carrier, 00155 Corsair, 00156 Interceptor, 00157 Observer, 00158 Scout, 00159 Shuttle, 00160 Aldaris, 00161 Artanis, 00162 Danimoth, 00163 Hero_Dark_Templar, 00164 Fenix_Dragoon, 00165 Fenix_Zealot, 00166 Gantrithor, 00167 Mojo, 00168 Raszagal, 00169 Tassadar, 00170 Tassadar_Zeratul_Archon, 00171 Warbringer, 00172 Zeratul, 00173 Arbiter_Tribunal, 00174 Assimilator, 00175 Citadel_of_Adun, 00176 Cybernetics_Core, 00177 Fleet_Beacon, 00178 Forge, 00179 Gateway, 00180 Nexus, 00181 Observatory, 00182 Photon_Cannon, 00183 Pylon, 00184 Robotics_Facility, 00185 Robotics_Support_Bay, 00186 Shield_Battery, 00187 Stargate, 00188 Templar_Archives, 00189 Khaydarin_Crystal_Form, 00190 Protoss_Temple, 00191 Stasis_Cell_Prison, 00192 Warp_Gate, 00193 XelNaga_Temple, 00194 00195 Broodling, 00196 Defiler, 00197 Drone, 00198 Egg, 00199 Hydralisk, 00200 Infested_Terran, 00201 Larva, 00202 Lurker, 00203 Lurker_Egg, 00204 Ultralisk, 00205 Zergling, 00206 Cocoon, 00207 Devourer, 00208 Guardian, 00209 Mutalisk, 00210 Overlord, 00211 Queen, 00212 Scourge, 00213 Devouring_One, 00214 Hunter_Killer, 00215 Infested_Duran, 00216 Infested_Kerrigan, 00217 Kukulza_Guardian, 00218 Kukulza_Mutalisk, 00219 Matriarch, 00220 Torrasque, 00221 Unclean_One, 00222 Yggdrasill, 00223 Creep_Colony, 00224 Defiler_Mound, 00225 Evolution_Chamber, 00226 Extractor, 00227 Greater_Spire, 00228 Hatchery, 00229 Hive, 00230 Hydralisk_Den, 00231 Infested_Command_Center, 00232 Lair, 00233 Nydus_Canal, 00234 QueeNest, 00235 Spawning_Pool, 00236 Spire, 00237 Spore_Colony, 00238 Sunken_Colony, 00239 Ultralisk_Cavern, 00240 Cerebrate, 00241 Cerebrate_Daggoth, 00242 Mature_Chrysalis, 00243 Overmind, 00244 Overmind_Cocoon, 00245 Overmind_With_Shell, 00246 00247 Bengalaas, 00248 Kakaru, 00249 Ragnasaur, 00250 Rhynadon, 00251 Scantid, 00252 Ursadon, 00253 00254 Mineral_Field, 00255 Vespene_Geyser, 00256 00257 Dark_Swarm, 00258 Disruption_Web, 00259 Scanner_Sweep, 00260 00261 Protoss_Beacon, 00262 Protoss_Flag_Beacon, 00263 Terran_Beacon, 00264 Terran_Flag_Beacon, 00265 Zerg_Beacon, 00266 Zerg_Flag_Beacon, 00267 00268 Powerup_Data_Disk, 00269 Powerup_Flag, 00270 Powerup_Khalis_Crystal, 00271 Powerup_Khaydarin_Crystal, 00272 Powerup_Psi_Emitter, 00273 Powerup_Uraj_Crystal, 00274 Powerup_Young_Chrysalis, 00275 00276 None, 00277 Unknown_Unit 00278 }; 00279 enum FliterAttributeScalar 00280 { 00281 HitPoints, 00282 InitialHitPoints, 00283 Shields, 00284 Energy, 00285 UnitResources, 00286 InitialResources, 00287 KillCount, 00288 GroundWeaponCooldown, 00289 AirWeaponCooldown, 00290 SpellCooldown, 00291 DefenseMatrixPoints, 00292 DefenseMatrixTimer, 00293 EnsnareTimer, 00294 IrradiateTimer, 00295 LockdownTimer, 00296 MaelstromTimer, 00297 PlagueTimer, 00298 RemoveTimer, 00299 StasisTimer, 00300 StimTimer, 00301 PositionX, 00302 PositionY, 00303 InitialPositionX, 00304 InitialPositionY, 00305 TilePositionX, 00306 TilePositionY, 00307 InitialTilePositionX, 00308 InitialTilePositionY, 00309 Angle, 00310 VelocityX, 00311 VelocityY, 00312 TargetPositionX, 00313 TargetPositionY, 00314 OrderTimer, 00315 RemainingBuildTime, 00316 RemainingTrainTime, 00317 TrainingQueueCount, 00318 LoadedUnitsCount, 00319 InterceptorCount, 00320 ScarabCount, 00321 SpiderMineCount, 00322 RemainingResearchTime, 00323 RemainingUpgradeTime, 00324 RallyPositionX, 00325 RallyPositionY 00326 }; 00327 00328 enum FilterAttributeUnit 00329 { 00330 GetTarget, 00331 GetOrderTarget, 00332 GetBuildUnit, 00333 GetTransport, 00334 GetRallyUnit, 00335 GetAddon 00336 }; 00337 enum FilterAttributeType 00338 { 00339 GetType, 00340 GetInitialType, 00341 GetBuildType, 00342 GetTech, 00343 GetUpgrade 00344 }; 00345 00346 enum FilterAttributePosition 00347 { 00348 GetPosition, 00349 GetInitialPosition, 00350 GetTargetPosition, 00351 GetRallyPosition 00352 }; 00353 00354 enum FilterAttributeTilePosition 00355 { 00356 GetTilePosition, 00357 GetInitialTilePosition, 00358 }; 00359 enum FilterAttributeOrder 00360 { 00361 GetOrder, 00362 GetSecondaryOrder 00363 }; 00364 00365 00366 class UnitGroup : public std::set<BWAPI::Unit*>, public GroupBase<UnitGroup> 00367 { 00368 public: 00369 UnitGroup() 00370 { 00371 } 00372 00373 UnitGroup(const std::set<BWAPI::Unit*>& units) 00374 : std::set<BWAPI::Unit*>(units) 00375 { 00376 } 00377 00378 bool contains(BWAPI::Unit* unit) const 00379 { 00380 return this->find(unit) != this->end(); 00381 } 00382 00383 UnitGroup operator+(const UnitGroup& other) const;//union 00384 UnitGroup operator*(const UnitGroup& other) const;//intersection 00385 UnitGroup operator^(const UnitGroup& other) const;//symmetric difference 00386 UnitGroup operator-(const UnitGroup& other) const;//difference 00387 UnitGroup inRadius(double radius,BWAPI::Position position) const; 00388 UnitGroup inRegion(BWTA::Region* region) const; 00389 UnitGroup onlyNearestChokepoint(BWTA::Chokepoint* choke) const; 00390 UnitGroup onlyNearestBaseLocation(BWTA::BaseLocation* location) const; 00391 UnitGroup onlyNearestUnwalkablePolygon(BWTA::Polygon* polygon) const; 00392 UnitGroup operator()(int f1) const; 00393 UnitGroup operator()(int f1, int f2) const; 00394 UnitGroup operator()(int f1, int f2, int f3) const; 00395 UnitGroup operator()(int f1, int f2, int f3, int f4) const; 00396 UnitGroup operator()(int f1, int f2, int f3, int f4, int f5) const; 00397 UnitGroup operator()(FliterAttributeScalar a, const char* compare, double value) const; 00398 UnitGroup operator()(FliterAttributeScalar a, const char* compare, int value) const; 00399 UnitGroup operator()(BWAPI::Player* player) const; 00400 UnitGroup operator()(FilterAttributeUnit a, BWAPI::Unit* unit) const; 00401 UnitGroup operator()(FilterAttributeType a, BWAPI::UnitType type) const; 00402 UnitGroup operator()(FilterAttributeType a, BWAPI::TechType type) const; 00403 UnitGroup operator()(FilterAttributeType a, BWAPI::UpgradeType type) const; 00404 UnitGroup operator()(FilterAttributeOrder a, BWAPI::Order type) const; 00405 UnitGroup operator()(FilterAttributePosition a, BWAPI::Position position) const; 00406 UnitGroup operator()(FilterAttributeTilePosition a, BWAPI::TilePosition position) const; 00407 00408 UnitGroup not(int f1) const; 00409 UnitGroup not(int f1, int f2) const; 00410 UnitGroup not(int f1, int f2, int f3) const; 00411 UnitGroup not(int f1, int f2, int f3, int f4) const; 00412 UnitGroup not(int f1, int f2, int f3, int f4, int f5) const; 00413 UnitGroup not(FliterAttributeScalar a, const char* compare, double value) const; 00414 UnitGroup not(FliterAttributeScalar a, const char* compare, int value) const; 00415 UnitGroup not(BWAPI::Player* player) const; 00416 UnitGroup not(FilterAttributeUnit a, BWAPI::Unit* unit) const; 00417 UnitGroup not(FilterAttributeType a, BWAPI::UnitType type) const; 00418 UnitGroup not(FilterAttributeType a, BWAPI::TechType type) const; 00419 UnitGroup not(FilterAttributeType a, BWAPI::UpgradeType type) const; 00420 UnitGroup not(FilterAttributeOrder a, BWAPI::Order type) const; 00421 UnitGroup not(FilterAttributePosition a, BWAPI::Position position) const; 00422 UnitGroup not(FilterAttributeTilePosition a, BWAPI::TilePosition position) const; 00423 00424 UnitGroup& operator+=(const UnitGroup& other);//union 00425 UnitGroup& operator*=(const UnitGroup& other);//intersection 00426 UnitGroup& operator^=(const UnitGroup& other);//symmetric difference 00427 UnitGroup& operator-=(const UnitGroup& other);//difference 00428 /*BWAPI::Unit* getNearest(BWAPI::Position position) const; 00429 bool contains(BWAPI::Unit* u) const; 00430 BWAPI::Position getCenter() const; 00431 00432 bool attackMove(BWAPI::Position position) const; 00433 bool attackUnit(BWAPI::Unit* target) const; 00434 bool rightClick(BWAPI::Position position) const; 00435 bool rightClick(BWAPI::Unit* target) const; 00436 bool train(BWAPI::UnitType type) const; 00437 bool build(BWAPI::TilePosition position, BWAPI::UnitType type) const; 00438 bool buildAddon(BWAPI::UnitType type) const; 00439 bool research(BWAPI::TechType tech) const; 00440 bool upgrade(BWAPI::UpgradeType upgrade) const; 00441 bool stop() const; 00442 bool holdPosition() const; 00443 bool patrol(BWAPI::Position position) const; 00444 bool follow(BWAPI::Unit* target) const; 00445 bool setRallyPoint(BWAPI::Position target) const; 00446 bool setRallyPoint(BWAPI::Unit* target) const; 00447 bool repair(BWAPI::Unit* target) const; 00448 bool morph(BWAPI::UnitType type) const; 00449 bool burrow() const; 00450 bool unburrow() const; 00451 bool siege() const; 00452 bool unsiege() const; 00453 bool cloak() const; 00454 bool decloak() const; 00455 bool lift() const; 00456 bool land(BWAPI::TilePosition position) const; 00457 bool load(BWAPI::Unit* target) const; 00458 bool unload(BWAPI::Unit* target) const; 00459 bool unloadAll() const; 00460 bool unloadAll(BWAPI::Position position) const; 00461 bool cancelConstruction() const; 00462 bool haltConstruction() const; 00463 bool cancelMorph() const; 00464 bool cancelTrain() const; 00465 bool cancelTrain(int slot) const; 00466 bool cancelAddon() const; 00467 bool cancelResearch() const; 00468 bool cancelUpgrade() const; 00469 bool useTech(BWAPI::TechType tech) const; 00470 bool useTech(BWAPI::TechType tech, BWAPI::Position position) const; 00471 bool useTech(BWAPI::TechType tech, BWAPI::Unit* target) const;*/ 00472 };