BWAPI
trunk/bwapi/BWAPI/Source/BWAPI/UnitImpl.h
Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines