BWAPI
SPAR/AIModule/SparAIModule/Utils/UnitGroup.h
Go to the documentation of this file.
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 };
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines