BWAPI
Aiur/include/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         Terran_Firebat,
00087         Terran_Ghost,
00088         Terran_Goliath,
00089         Terran_Marine,
00090         Terran_Medic,
00091         Terran_SCV,
00092         Terran_Siege_Tank,
00093         Terran_Vulture,
00094         Terran_Vulture_Spider_Mine,
00095         Terran_Battlecruiser,
00096         Terran_Dropship,
00097         Terran_Nuclear_Missile,
00098         Terran_Science_Vessel,
00099         Terran_Valkyrie,
00100         Terran_Wraith,
00101         Hero_Alan_Schezar,
00102         Hero_Alexei_Stukov,
00103         Hero_Arcturus_Mengsk,
00104         Hero_Edmund_Duke,
00105         Hero_Gerard_DuGalle,
00106         Hero_Gui_Montag,
00107         Hero_Hyperion,
00108         Hero_Jim_Raynor_Marine,
00109         Hero_Jim_Raynor_Vulture,
00110         Hero_Magellan,
00111         Hero_Norad_II,
00112         Hero_Samir_Duran,
00113         Hero_Sarah_Kerrigan,
00114         Hero_Tom_Kazansky,
00115         Terran_Civilian,
00116         Terran_Academy,
00117         Terran_Armory,
00118         Terran_Barracks,
00119         Terran_Bunker,
00120         Terran_Command_Center,
00121         Terran_Engineering_Bay,
00122         Terran_Factory,
00123         Terran_Missile_Turret,
00124         Terran_Refinery,
00125         Terran_Science_Facility,
00126         Terran_Starport,
00127         Terran_Supply_Depot,
00128         Terran_Comsat_Station,
00129         Terran_Control_Tower,
00130         Terran_Covert_Ops,
00131         Terran_Machine_Shop,
00132         Terran_Nuclear_Silo,
00133         Terran_Physics_Lab,
00134         Special_Crashed_Norad_II,
00135         Special_Ion_Cannon,
00136         Special_Power_Generator,
00137         Special_Psi_Disrupter,
00138 
00139         Protoss_Archon,
00140         Protoss_Dark_Archon,
00141         Protoss_Dark_Templar,
00142         Protoss_Dragoon,
00143         Protoss_High_Templar,
00144         Protoss_Probe,
00145         Protoss_Reaver,
00146         Protoss_Scarab,
00147         Protoss_Zealot,
00148         Protoss_Arbiter,
00149         Protoss_Carrier,
00150         Protoss_Corsair,
00151         Protoss_Interceptor,
00152         Protoss_Observer,
00153         Protoss_Scout,
00154         Protoss_Shuttle,
00155         Hero_Aldaris,
00156         Hero_Artanis,
00157         Hero_Danimoth,
00158         Hero_Dark_Templar,
00159         Hero_Fenix_Dragoon,
00160         Hero_Fenix_Zealot,
00161         Hero_Gantrithor,
00162         Hero_Mojo,
00163         Hero_Raszagal,
00164         Hero_Tassadar,
00165         Hero_Tassadar_Zeratul_Archon,
00166         Hero_Warbringer,
00167         Hero_Zeratul,
00168         Protoss_Arbiter_Tribunal,
00169         Protoss_Assimilator,
00170         Protoss_Citadel_of_Adun,
00171         Protoss_Cybernetics_Core,
00172         Protoss_Fleet_Beacon,
00173         Protoss_Forge,
00174         Protoss_Gateway,
00175         Protoss_Nexus,
00176         Protoss_Observatory,
00177         Protoss_Photon_Cannon,
00178         Protoss_Pylon,
00179         Protoss_Robotics_Facility,
00180         Protoss_Robotics_Support_Bay,
00181         Protoss_Shield_Battery,
00182         Protoss_Stargate,
00183         Protoss_Templar_Archives,
00184         Special_Khaydarin_Crystal_Form,
00185         Special_Protoss_Temple,
00186         Special_Stasis_Cell_Prison,
00187         Special_Warp_Gate,
00188         Special_XelNaga_Temple,
00189 
00190         Zerg_Broodling,
00191         Zerg_Defiler,
00192         Zerg_Drone,
00193         Zerg_Egg,
00194         Zerg_Hydralisk,
00195         Zerg_Infested_Terran,
00196         Zerg_Larva,
00197         Zerg_Lurker,
00198         Zerg_Lurker_Egg,
00199         Zerg_Ultralisk,
00200         Zerg_Zergling,
00201         Zerg_Cocoon,
00202         Zerg_Devourer,
00203         Zerg_Guardian,
00204         Zerg_Mutalisk,
00205         Zerg_Overlord,
00206         Zerg_Queen,
00207         Zerg_Scourge,
00208         Hero_Devouring_One,
00209         Hero_Hunter_Killer,
00210         Hero_Infested_Duran,
00211         Hero_Infested_Kerrigan,
00212         Hero_Kukulza_Guardian,
00213         Hero_Kukulza_Mutalisk,
00214         Hero_Matriarch,
00215         Hero_Torrasque,
00216         Hero_Unclean_One,
00217         Hero_Yggdrasill,
00218         Zerg_Creep_Colony,
00219         Zerg_Defiler_Mound,
00220         Zerg_Evolution_Chamber,
00221         Zerg_Extractor,
00222         Zerg_Greater_Spire,
00223         Zerg_Hatchery,
00224         Zerg_Hive,
00225         Zerg_Hydralisk_Den,
00226         Zerg_Infested_Command_Center,
00227         Zerg_Lair,
00228         Zerg_Nydus_Canal,
00229         Zerg_Queens_Nest,
00230         Zerg_Spawning_Pool,
00231         Zerg_Spire,
00232         Zerg_Spore_Colony,
00233         Zerg_Sunken_Colony,
00234         Zerg_Ultralisk_Cavern,
00235         Special_Cerebrate,
00236         Special_Cerebrate_Daggoth,
00237         Special_Mature_Chrysalis,
00238         Special_Overmind,
00239         Special_Overmind_Cocoon,
00240         Special_Overmind_With_Shell,
00241 
00242         Critter_Bengalaas,
00243         Critter_Kakaru,
00244         Critter_Ragnasaur,
00245         Critter_Rhynadon,
00246         Critter_Scantid,
00247         Critter_Ursadon,
00248 
00249         Resource_Mineral_Field,
00250         Resource_Vespene_Geyser,
00251 
00252         Spell_Dark_Swarm,
00253         Spell_Disruption_Web,
00254         Spell_Scanner_Sweep,
00255 
00256         Special_Protoss_Beacon,
00257         Special_Protoss_Flag_Beacon,
00258         Special_Terran_Beacon,
00259         Special_Terran_Flag_Beacon,
00260         Special_Zerg_Beacon,
00261         Special_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         maxAirHits,
00322         maxGroundHits
00323 };
00324 
00325 enum FilterAttributeUnit
00326 {
00327         GetTarget,
00328         GetOrderTarget,
00329         GetBuildUnit,
00330         GetTransport,
00331         GetRallyUnit,
00332         GetAddon
00333 };
00334 enum FilterAttributeType
00335 {
00336         GetType,
00337         GetInitialType,
00338         GetBuildType,
00339         GetTech,
00340         GetUpgrade
00341 };
00342 
00343 enum FilterAttributePosition
00344 {
00345         GetPosition,
00346         GetInitialPosition,
00347         GetTargetPosition,
00348         GetRallyPosition
00349 };
00350 
00351 enum FilterAttributeTilePosition
00352 {
00353         GetTilePosition,
00354         GetInitialTilePosition,
00355 };
00356 enum FilterAttributeOrder
00357 {
00358         GetOrder,
00359         GetSecondaryOrder
00360 };
00361 
00362 
00363 class UnitGroup : public std::set<BWAPI::Unit*>
00364 {
00365 public:
00366         static UnitGroup getUnitGroup(const std::set<BWAPI::Unit*> units)
00367         {
00368                 UnitGroup u;
00369                 u.insert(units.begin(), units.end());
00370                 return u;
00371         }
00372 
00373         UnitGroup operator+(const UnitGroup& other) const;//union
00374         UnitGroup operator*(const UnitGroup& other) const;//intersection
00375         UnitGroup operator^(const UnitGroup& other) const;//symmetric difference
00376         UnitGroup operator-(const UnitGroup& other) const;//difference
00377         UnitGroup inRadius(double radius,BWAPI::Position position) const;
00378         UnitGroup inRegion(BWTA::Region* region) const;
00379         UnitGroup onlyNearestChokepoint(BWTA::Chokepoint* choke) const;
00380         UnitGroup onlyNearestBaseLocation(BWTA::BaseLocation* location) const;
00381         UnitGroup onlyNearestUnwalkablePolygon(BWTA::Polygon* polygon) const;
00382         UnitGroup operator()(int f1) const;
00383         UnitGroup operator()(int f1, int f2) const;
00384         UnitGroup operator()(int f1, int f2, int f3) const;
00385         UnitGroup operator()(int f1, int f2, int f3, int f4) const;
00386         UnitGroup operator()(int f1, int f2, int f3, int f4, int f5) const;
00387         UnitGroup operator()(FliterAttributeScalar a, const char* compare, double value) const;
00388         UnitGroup operator()(FliterAttributeScalar a, const char* compare, int value) const;
00389         UnitGroup operator()(BWAPI::Player* player) const;
00390         UnitGroup operator()(FilterAttributeUnit a, BWAPI::Unit* unit) const;
00391         UnitGroup operator()(FilterAttributeType a, BWAPI::UnitType type) const;
00392         UnitGroup operator()(FilterAttributeType a, BWAPI::TechType type) const;
00393         UnitGroup operator()(FilterAttributeType a, BWAPI::UpgradeType type) const;
00394         UnitGroup operator()(FilterAttributeOrder a, BWAPI::Order type) const;
00395         UnitGroup operator()(FilterAttributePosition a, BWAPI::Position position) const;
00396         UnitGroup operator()(FilterAttributeTilePosition a, BWAPI::TilePosition position) const;
00397 
00398         UnitGroup not(int f1) const;
00399         UnitGroup not(int f1, int f2) const;
00400         UnitGroup not(int f1, int f2, int f3) const;
00401         UnitGroup not(int f1, int f2, int f3, int f4) const;
00402         UnitGroup not(int f1, int f2, int f3, int f4, int f5) const;
00403         UnitGroup not(FliterAttributeScalar a, const char* compare, double value) const;
00404         UnitGroup not(FliterAttributeScalar a, const char* compare, int value) const;
00405         UnitGroup not(BWAPI::Player* player) const;
00406         UnitGroup not(FilterAttributeUnit a, BWAPI::Unit* unit) const;
00407         UnitGroup not(FilterAttributeType a, BWAPI::UnitType type) const;
00408         UnitGroup not(FilterAttributeType a, BWAPI::TechType type) const;
00409         UnitGroup not(FilterAttributeType a, BWAPI::UpgradeType type) const;
00410         UnitGroup not(FilterAttributeOrder a, BWAPI::Order type) const;
00411         UnitGroup not(FilterAttributePosition a, BWAPI::Position position) const;
00412         UnitGroup not(FilterAttributeTilePosition a, BWAPI::TilePosition position) const;
00413 
00414         UnitGroup& operator+=(const UnitGroup& other);//union
00415         UnitGroup& operator*=(const UnitGroup& other);//intersection
00416         UnitGroup& operator^=(const UnitGroup& other);//symmetric difference
00417         UnitGroup& operator-=(const UnitGroup& other);//difference
00418         BWAPI::Unit* getNearest(BWAPI::Position position) const;
00419         bool contains(BWAPI::Unit* u) const;
00420         BWAPI::Position getCenter() const;
00421 
00422         bool attack(BWAPI::Position position, bool enqueue=false) const;
00423         bool attack(BWAPI::Unit* target, bool enqueue=false) const;
00424         bool rightClick(BWAPI::Position position) const;
00425         bool rightClick(BWAPI::Unit* target) const;
00426         bool train(BWAPI::UnitType type) const;
00427         bool build(BWAPI::TilePosition position, BWAPI::UnitType type) const;
00428         bool buildAddon(BWAPI::UnitType type) const;
00429         bool research(BWAPI::TechType tech) const;
00430         bool upgrade(BWAPI::UpgradeType upgrade) const;
00431         bool stop() const;
00432         bool holdPosition() const;
00433         bool patrol(BWAPI::Position position) const;
00434         bool follow(BWAPI::Unit* target) const;
00435         bool setRallyPoint(BWAPI::Position target) const;
00436         bool setRallyPoint(BWAPI::Unit* target) const;
00437         bool repair(BWAPI::Unit* target) const;
00438         bool morph(BWAPI::UnitType type) const;
00439         bool burrow() const;
00440         bool unburrow() const;
00441         bool siege() const;
00442         bool unsiege() const;
00443         bool cloak() const;
00444         bool decloak() const;
00445         bool lift() const;
00446         bool land(BWAPI::TilePosition position) const;
00447         bool load(BWAPI::Unit* target) const;
00448         bool unload(BWAPI::Unit* target) const;
00449         bool unloadAll() const;
00450         bool unloadAll(BWAPI::Position position) const;
00451         bool cancelConstruction() const;
00452         bool haltConstruction() const;
00453         bool cancelMorph() const;
00454         bool cancelTrain() const;
00455         bool cancelTrain(int slot) const;
00456         bool cancelAddon() const;
00457         bool cancelResearch() const;
00458         bool cancelUpgrade() const;
00459         bool useTech(BWAPI::TechType tech) const;
00460         bool useTech(BWAPI::TechType tech, BWAPI::Position position) const;
00461         bool useTech(BWAPI::TechType tech, BWAPI::Unit* target) const;
00462 };
00463 
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Defines