BWAPI
|
00001 #pragma once 00002 00003 #include "BWAPI/Unit.h" 00004 00005 #include <list> 00006 00007 #include <Util/Types.h> 00008 #include <BWAPI/Order.h> 00009 #include <BWAPI/Region.h> 00010 #include <BWAPI/TechType.h> 00011 #include <BWAPI/UpgradeType.h> 00012 #include <BWAPI/UnitType.h> 00013 #include <BWAPI/UnitCommand.h> 00014 #include <BW/TilePosition.h> 00015 #include <BW/OrderID.h> 00016 #include <BWAPI/Client/UnitData.h> 00017 00018 #define checkOwnership()\ 00019 {\ 00020 if (_getPlayer != Broodwar->self())\ 00021 return BroodwarImpl.setLastError(Errors::Unit_Not_Owned);\ 00022 } 00023 00024 namespace BW { class Position; }; 00025 namespace BW { class Unit; }; 00026 namespace BWAPI { class UnitPrototype; }; 00027 namespace BWAPI { class AbilityPrototype; }; 00028 namespace BWAPI { class Player; }; 00029 00030 namespace BWAPI 00031 { 00036 class UnitImpl : public Unit 00037 { 00038 public: 00039 virtual int getID() const; 00040 virtual int getReplayID() const; 00041 virtual Player* getPlayer() const; 00042 virtual UnitType getType() const; 00043 virtual Position getPosition() const; 00044 virtual TilePosition getTilePosition() const; 00045 virtual double getAngle() const; 00046 virtual double getVelocityX() const; 00047 virtual double getVelocityY() const; 00048 virtual BWAPI::Region *getRegion() const; 00049 virtual int getLeft() const; 00050 virtual int getTop() const; 00051 virtual int getRight() const; 00052 virtual int getBottom() const; 00053 virtual int getHitPoints() const; 00054 virtual int getShields() const; 00055 virtual int getEnergy() const; 00056 virtual int getResources() const; 00057 virtual int getResourceGroup() const; 00058 00059 virtual int getDistance(Unit* target) const; 00060 virtual int getDistance(Position target) const; 00061 virtual bool hasPath(Unit* target) const; 00062 virtual bool hasPath(Position target) const; 00063 virtual int getLastCommandFrame() const; 00064 virtual UnitCommand getLastCommand() const; 00065 virtual BWAPI::Player *getLastAttackingPlayer() const; 00066 virtual int getUpgradeLevel(UpgradeType upgrade) const; 00067 00068 virtual UnitType getInitialType() const; 00069 virtual Position getInitialPosition() const; 00070 virtual TilePosition getInitialTilePosition() const; 00071 virtual int getInitialHitPoints() const; 00072 virtual int getInitialResources() const; 00073 00074 virtual int getKillCount() const; 00075 virtual int getAcidSporeCount() const; 00076 virtual int getInterceptorCount() const; 00077 virtual int getScarabCount() const; 00078 virtual int getSpiderMineCount() const; 00079 virtual int getGroundWeaponCooldown() const; 00080 virtual int getAirWeaponCooldown() const; 00081 virtual int getSpellCooldown() const; 00082 virtual int getDefenseMatrixPoints() const; 00083 00084 virtual int getDefenseMatrixTimer() const; 00085 virtual int getEnsnareTimer() const; 00086 virtual int getIrradiateTimer() const; 00087 virtual int getLockdownTimer() const; 00088 virtual int getMaelstromTimer() const; 00089 virtual int getOrderTimer() const; 00090 virtual int getPlagueTimer() const; 00091 virtual int getRemoveTimer() const; 00092 virtual int getStasisTimer() const; 00093 virtual int getStimTimer() const; 00094 00095 virtual UnitType getBuildType() const; 00096 virtual std::list<UnitType> getTrainingQueue() const; 00097 virtual TechType getTech() const; 00098 virtual UpgradeType getUpgrade() const; 00099 virtual int getRemainingBuildTime() const; 00100 virtual int getRemainingTrainTime() const; 00101 virtual int getRemainingResearchTime() const; 00102 virtual int getRemainingUpgradeTime() const; 00103 virtual Unit* getBuildUnit() const; 00104 00105 virtual Unit* getTarget() const; 00106 virtual Position getTargetPosition() const; 00107 virtual Order getOrder() const; 00108 virtual Unit* getOrderTarget() const; 00109 virtual Position getOrderTargetPosition() const; 00110 virtual Order getSecondaryOrder() const; 00111 virtual Position getRallyPosition() const; 00112 virtual Unit* getRallyUnit() const; 00113 virtual Unit* getAddon() const; 00114 virtual Unit* getNydusExit() const; 00115 virtual Unit* getPowerUp() const; 00116 00117 virtual Unit* getTransport() const; 00118 virtual std::set<Unit*> getLoadedUnits() const; 00119 virtual Unit* getCarrier() const; 00120 virtual std::set<Unit*> getInterceptors() const; 00121 virtual Unit* getHatchery() const; 00122 virtual std::set<Unit*> getLarva() const; 00123 virtual std::set<Unit*>& getUnitsInRadius(int radius) const; 00124 virtual std::set<Unit*>& getUnitsInWeaponRange(WeaponType weapon) const; 00125 virtual void *getClientInfo() const; 00126 virtual void setClientInfo(void* clientinfo); 00127 00128 virtual bool exists() const; 00129 virtual bool hasNuke() const; 00130 virtual bool isAccelerating() const; 00131 virtual bool isAttackFrame() const; 00132 virtual bool isAttacking() const; 00133 virtual bool isBeingConstructed() const; 00134 virtual bool isBeingGathered() const; 00135 virtual bool isBeingHealed() const; 00136 virtual bool isBlind() const; 00137 virtual bool isBraking() const; 00138 virtual bool isBurrowed() const; 00139 virtual bool isCarryingGas() const; 00140 virtual bool isCarryingMinerals() const; 00141 virtual bool isCloaked() const; 00142 virtual bool isCompleted() const; 00143 virtual bool isConstructing() const; 00144 virtual bool isDefenseMatrixed() const; 00145 virtual bool isDetected() const; 00146 virtual bool isEnsnared() const; 00147 virtual bool isFollowing() const; 00148 virtual bool isGatheringGas() const; 00149 virtual bool isGatheringMinerals() const; 00150 virtual bool isHallucination() const; 00151 virtual bool isHoldingPosition() const; 00152 virtual bool isIdle() const; 00153 virtual bool isInWeaponRange(Unit *target) const; 00154 virtual bool isInterruptible() const; 00155 virtual bool isInvincible() const; 00156 virtual bool isIrradiated() const; 00157 virtual bool isLifted() const; 00158 virtual bool isLoaded() const; 00159 virtual bool isLockedDown() const; 00160 virtual bool isMaelstrommed() const; 00161 virtual bool isMorphing() const; 00162 virtual bool isMoving() const; 00163 virtual bool isParasited() const; 00164 virtual bool isPatrolling() const; 00165 virtual bool isPlagued() const; 00166 virtual bool isRepairing() const; 00167 virtual bool isResearching() const; 00168 virtual bool isSelected() const; 00169 virtual bool isSieged() const; 00170 virtual bool isStartingAttack() const; 00171 virtual bool isStasised() const; 00172 virtual bool isStimmed() const; 00173 virtual bool isStuck() const; 00174 virtual bool isTraining() const; 00175 virtual bool isUnderAttack() const; 00176 virtual bool isUnderDarkSwarm() const; 00177 virtual bool isUnderDisruptionWeb() const; 00178 virtual bool isUnderStorm() const; 00179 virtual bool isUnpowered() const; 00180 virtual bool isUpgrading() const; 00181 virtual bool isVisible() const; 00182 virtual bool isVisible(Player* player) const; 00183 00184 virtual bool canIssueCommand(UnitCommand c) const; 00185 virtual bool issueCommand(UnitCommand command); 00186 00187 virtual bool attack(Position target, bool shiftQueueCommand = false); 00188 virtual bool attack(Unit* target, bool shiftQueueCommand = false); 00189 virtual bool build(TilePosition target, UnitType type); 00190 virtual bool buildAddon(UnitType type); 00191 virtual bool train(UnitType type); 00192 virtual bool morph(UnitType type); 00193 virtual bool research(TechType tech); 00194 virtual bool upgrade(UpgradeType upgrade); 00195 virtual bool setRallyPoint(Position target); 00196 virtual bool setRallyPoint(Unit* target); 00197 virtual bool move(Position target, bool shiftQueueCommand = false); 00198 virtual bool patrol(Position target, bool shiftQueueCommand = false); 00199 virtual bool holdPosition(bool shiftQueueCommand = false); 00200 virtual bool stop(bool shiftQueueCommand = false); 00201 virtual bool follow(Unit* target, bool shiftQueueCommand = false); 00202 virtual bool gather(Unit* target, bool shiftQueueCommand = false); 00203 virtual bool returnCargo(bool shiftQueueCommand = false); 00204 virtual bool repair(Unit* target, bool shiftQueueCommand = false); 00205 virtual bool burrow(); 00206 virtual bool unburrow(); 00207 virtual bool cloak(); 00208 virtual bool decloak(); 00209 virtual bool siege(); 00210 virtual bool unsiege(); 00211 virtual bool lift(); 00212 virtual bool land(TilePosition target); 00213 virtual bool load(Unit* target, bool shiftQueueCommand = false); 00214 virtual bool unload(Unit* target); 00215 virtual bool unloadAll(bool shiftQueueCommand = false); 00216 virtual bool unloadAll(Position target, bool shiftQueueCommand = false); 00217 virtual bool rightClick(Position target, bool shiftQueueCommand = false); 00218 virtual bool rightClick(Unit* target, bool shiftQueueCommand = false); 00219 virtual bool haltConstruction(); 00220 virtual bool cancelConstruction(); 00221 virtual bool cancelAddon(); 00222 virtual bool cancelTrain(int slot = -2); 00223 virtual bool cancelMorph(); 00224 virtual bool cancelResearch(); 00225 virtual bool cancelUpgrade(); 00226 virtual bool useTech(TechType tech); 00227 virtual bool useTech(TechType tech, Position target); 00228 virtual bool useTech(TechType tech, Unit* target); 00229 virtual bool placeCOP(TilePosition target); 00230 00231 //Internal BWAPI commands: 00232 UnitImpl(BW::Unit* originalUnit, 00233 u16 index); 00234 ~UnitImpl(); 00235 static UnitImpl* BWUnitToBWAPIUnit(BW::Unit* unit); 00236 void die(); 00237 void setID(int newID); 00238 bool canAccess() const; 00239 bool canAccessDetected() const; 00240 bool canAccessInside() const; 00241 Player* _getPlayer; 00242 UnitType _getType; 00243 Position _getPosition; 00244 int _getResources; 00245 int _getHitPoints; 00246 bool _isCompleted; 00247 bool wasCompleted; 00248 Unit* _getTransport; 00249 00256 u16 getIndex() const; 00257 void setSelected(bool selectedState); 00258 void setLoaded(bool loadedState); 00259 UnitImpl* getNext() const; 00261 BW::Unit* getOriginalRawData; 00263 u8 getBuildQueueSlot; 00265 BWAPI::UnitType getBuildQueue[5]; 00267 bool hasEmptyBuildQueue; 00268 00269 void saveInitialState(); 00270 void updateInternalData(); 00271 void updateData(); 00272 UnitData data; 00273 UnitData *self; 00274 00275 bool userSelected; 00276 bool staticInformation; 00277 bool nukeDetected; 00278 Position nukePosition; 00279 int lastGroundWeaponCooldown; 00280 int lastAirWeaponCooldown; 00281 int lastFrameSet; 00282 bool startingAttack; 00283 UnitType lastType; 00284 Player* lastPlayer; 00285 int id; 00286 bool isAlive; 00287 bool wasAlive; 00288 bool wasAccessible; 00289 bool wasVisible; 00290 00291 std::set<Unit*> connectedUnits; 00292 std::set<Unit*> loadedUnits; 00293 00294 int lastCommandFrame; 00295 UnitCommand lastCommand; 00296 00297 void *clientInfo; 00298 private: 00300 void orderSelect(); 00301 void clear(); 00302 00303 u16 index; 00304 UnitType initialType; 00305 BWAPI::Position initialPosition; 00306 int initialResources; 00307 int initialHitPoints; 00308 }; 00309 }; 00310