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