BWAPI
|
00001 #pragma once 00002 #include <BWAPI.h> 00003 #include "GameData.h" 00004 #include "Client.h" 00005 #include "Shape.h" 00006 #include "Command.h" 00007 #include "UnitCommand.h" 00008 #include "ForceImpl.h" 00009 #include "PlayerImpl.h" 00010 #include "RegionImpl.h" 00011 #include "UnitImpl.h" 00012 #include "BulletImpl.h" 00013 #include <list> 00014 #include <map> 00015 #include <set> 00016 #include <vector> 00017 00018 namespace BWAPI 00019 { 00020 class Force; 00021 class Player; 00022 class Unit; 00023 class GameImpl : public Game 00024 { 00025 private : 00026 int addShape(const BWAPIC::Shape &s); 00027 int addString(const char* text); 00028 int addText(BWAPIC::Shape &s, const char* text); 00029 int addCommand(const BWAPIC::Command &c); 00030 void clearAll(); 00031 00032 GameData* data; 00033 std::vector<ForceImpl> forceVector; 00034 std::vector<PlayerImpl> playerVector; 00035 std::vector<UnitImpl> unitVector; 00036 std::vector<BulletImpl> bulletVector; 00037 RegionImpl *regionArray[5000]; 00038 00039 std::set<Force*> forces; 00040 std::set<Player*> playerSet; 00041 std::set<Unit*> accessibleUnits;//all units that are accessible (and definitely alive) 00042 //notDestroyedUnits - accessibleUnits = all units that may or may not be alive (status unknown) 00043 std::set<Unit*> minerals; 00044 std::set<Unit*> geysers; 00045 std::set<Unit*> neutralUnits; 00046 std::set<Unit*> staticMinerals; 00047 std::set<Unit*> staticGeysers; 00048 std::set<Unit*> staticNeutralUnits; 00049 std::set<Bullet*> bullets; 00050 std::set<Position> nukeDots; 00051 std::set<Unit*> selectedUnits; 00052 std::set<Unit*> pylons; 00053 std::set<Unit*> unitsOnTileData[256][256]; 00054 std::set<Region*> regionsList; 00055 00056 std::set< TilePosition > startLocations; 00057 std::list< Event > events; 00058 bool flagEnabled[2]; 00059 Player* thePlayer; 00060 Player* theEnemy; 00061 Player* theNeutral; 00062 std::set<Player*> _allies; 00063 std::set<Player*> _enemies; 00064 std::set<Player*> _observers; 00065 Error lastError; 00066 int textSize; 00067 00068 public : 00069 Event makeEvent(BWAPIC::Event e); 00070 int addUnitCommand(BWAPIC::UnitCommand& c); 00071 bool inGame; 00072 GameImpl(GameData* data); 00073 void onMatchStart(); 00074 void onMatchEnd(); 00075 void onMatchFrame(); 00076 const GameData* getGameData() const; 00077 Unit *_unitFromIndex(int index); 00078 00079 virtual std::set< Force* >& getForces(); 00080 virtual std::set< Player* >& getPlayers(); 00081 virtual std::set< Unit* >& getAllUnits(); 00082 virtual std::set< Unit* >& getMinerals(); 00083 virtual std::set< Unit* >& getGeysers(); 00084 virtual std::set< Unit* >& getNeutralUnits(); 00085 00086 virtual std::set< Unit* >& getStaticMinerals(); 00087 virtual std::set< Unit* >& getStaticGeysers(); 00088 virtual std::set< Unit* >& getStaticNeutralUnits(); 00089 00090 virtual std::set< Bullet* >& getBullets(); 00091 virtual std::set< Position >& getNukeDots(); 00092 virtual std::list< Event>& getEvents(); 00093 00094 virtual Force* getForce(int forceID); 00095 virtual Player* getPlayer(int playerID); 00096 virtual Unit* getUnit(int unitID); 00097 virtual Unit* indexToUnit(int unitIndex); 00098 virtual Region* getRegion(int regionID); 00099 00100 virtual GameType getGameType(); 00101 virtual int getLatency(); 00102 virtual int getFrameCount(); 00103 virtual int getReplayFrameCount(); 00104 virtual int getFPS(); 00105 virtual double getAverageFPS(); 00106 virtual BWAPI::Position getMousePosition(); 00107 virtual bool getMouseState(MouseButton button); 00108 virtual bool getMouseState(int button); 00109 virtual bool getKeyState(Key key); 00110 virtual bool getKeyState(int key); 00111 virtual BWAPI::Position getScreenPosition(); 00112 virtual void setScreenPosition(int x, int y); 00113 virtual void setScreenPosition(BWAPI::Position p); 00114 virtual void pingMinimap(int x, int y); 00115 virtual void pingMinimap(BWAPI::Position p); 00116 00117 virtual bool isFlagEnabled(int flag); 00118 virtual void enableFlag(int flag); 00119 virtual std::set<Unit*>& getUnitsOnTile(int x, int y); 00120 virtual std::set<Unit*>& getUnitsInRectangle(int left, int top, int right, int bottom) const; 00121 virtual std::set<Unit*>& getUnitsInRectangle(BWAPI::Position topLeft, BWAPI::Position bottomRight) const; 00122 virtual std::set<Unit*>& getUnitsInRadius(BWAPI::Position center, int radius) const; 00123 virtual Error getLastError() const; 00124 virtual bool setLastError(BWAPI::Error e); 00125 00126 virtual int mapWidth(); 00127 virtual int mapHeight(); 00128 virtual std::string mapFileName(); 00129 virtual std::string mapPathName(); 00130 virtual std::string mapName(); 00131 virtual std::string mapHash(); 00132 00133 virtual bool isWalkable(int x, int y); 00134 virtual int getGroundHeight(int x, int y); 00135 virtual int getGroundHeight(TilePosition position); 00136 virtual bool isBuildable(int x, int y, bool includeBuildings = false); 00137 virtual bool isBuildable(TilePosition position, bool includeBuildings = false); 00138 virtual bool isVisible(int x, int y); 00139 virtual bool isVisible(TilePosition position); 00140 virtual bool isExplored(int x, int y); 00141 virtual bool isExplored(TilePosition position); 00142 virtual bool hasCreep(int x, int y); 00143 virtual bool hasCreep(TilePosition position); 00144 virtual bool hasPower(int tileX, int tileY, UnitType unitType = UnitTypes::None) const; 00145 virtual bool hasPower(TilePosition position, UnitType unitType = UnitTypes::None) const; 00146 virtual bool hasPower(int tileX, int tileY, int tileWidth, int tileHeight, UnitType unitType = UnitTypes::None) const; 00147 virtual bool hasPower(TilePosition position, int tileWidth, int tileHeight, UnitType unitType = UnitTypes::None) const; 00148 virtual bool hasPowerPrecise(int x, int y, UnitType unitType = UnitTypes::None ) const; 00149 virtual bool hasPowerPrecise(Position position, UnitType unitType = UnitTypes::None) const; 00150 00151 virtual bool canBuildHere(const Unit* builder, TilePosition position, UnitType type, bool checkExplored = false); 00152 virtual bool canMake(const Unit* builder, UnitType type); 00153 virtual bool canResearch(const Unit* unit, TechType type); 00154 virtual bool canUpgrade(const Unit* unit, UpgradeType type); 00155 virtual std::set< TilePosition >& getStartLocations(); 00156 00157 virtual void printf(const char* format, ...); 00158 virtual void sendText(const char* format, ...); 00159 virtual void sendTextEx(bool toAllies, const char *format, ...); 00160 00161 virtual void changeRace(BWAPI::Race race); 00162 virtual bool isInGame(); 00163 virtual bool isMultiplayer(); 00164 virtual bool isBattleNet(); 00165 virtual bool isPaused(); 00166 virtual bool isReplay(); 00167 00168 virtual void startGame(); 00169 virtual void pauseGame(); 00170 virtual void resumeGame(); 00171 virtual void leaveGame(); 00172 virtual void restartGame(); 00173 virtual void setLocalSpeed(int speed = -1); 00174 virtual bool issueCommand(const std::set<BWAPI::Unit*>& units, UnitCommand command); 00175 virtual std::set<BWAPI::Unit*>& getSelectedUnits(); 00176 virtual Player* self(); 00177 virtual Player* enemy(); 00178 virtual Player* neutral(); 00179 virtual std::set<BWAPI::Player*>& allies(); 00180 virtual std::set<BWAPI::Player*>& enemies(); 00181 virtual std::set<BWAPI::Player*>& observers(); 00182 00183 virtual void setTextSize(int size = 1); 00184 virtual void drawText(int ctype, int x, int y, const char *format, ...); 00185 virtual void drawTextMap(int x, int y, const char *format, ...); 00186 virtual void drawTextMouse(int x, int y, const char *format, ...); 00187 virtual void drawTextScreen(int x, int y, const char *format, ...); 00188 00189 virtual void drawBox(int ctype, int left, int top, int right, int bottom, Color color, bool isSolid = false); 00190 virtual void drawBoxMap(int left, int top, int right, int bottom, Color color, bool isSolid = false); 00191 virtual void drawBoxMouse(int left, int top, int right, int bottom, Color color, bool isSolid = false); 00192 virtual void drawBoxScreen(int left, int top, int right, int bottom, Color color, bool isSolid = false); 00193 00194 virtual void drawTriangle(int ctype, int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); 00195 virtual void drawTriangleMap(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); 00196 virtual void drawTriangleMouse(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); 00197 virtual void drawTriangleScreen(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); 00198 00199 virtual void drawCircle(int ctype, int x, int y, int radius, Color color, bool isSolid = false); 00200 virtual void drawCircleMap(int x, int y, int radius, Color color, bool isSolid = false); 00201 virtual void drawCircleMouse(int x, int y, int radius, Color color, bool isSolid = false); 00202 virtual void drawCircleScreen(int x, int y, int radius, Color color, bool isSolid = false); 00203 00204 virtual void drawEllipse(int ctype, int x, int y, int xrad, int yrad, Color color, bool isSolid = false); 00205 virtual void drawEllipseMap(int x, int y, int xrad, int yrad, Color color, bool isSolid = false); 00206 virtual void drawEllipseMouse(int x, int y, int xrad, int yrad, Color color, bool isSolid = false); 00207 virtual void drawEllipseScreen(int x, int y, int xrad, int yrad, Color color, bool isSolid = false); 00208 00209 virtual void drawDot(int ctype, int x, int y, Color color); 00210 virtual void drawDotMap(int x, int y, Color color); 00211 virtual void drawDotMouse(int x, int y, Color color); 00212 virtual void drawDotScreen(int x, int y, Color color); 00213 00214 virtual void drawLine(int ctype, int x1, int y1, int x2, int y2, Color color); 00215 virtual void drawLineMap(int x1, int y1, int x2, int y2, Color color); 00216 virtual void drawLineMouse(int x1, int y1, int x2, int y2, Color color); 00217 virtual void drawLineScreen(int x1, int y1, int x2, int y2, Color color); 00218 00219 virtual void *getScreenBuffer(); 00220 virtual int getLatencyFrames(); 00221 virtual int getLatencyTime(); 00222 virtual int getRemainingLatencyFrames(); 00223 virtual int getRemainingLatencyTime(); 00224 virtual int getRevision(); 00225 virtual bool isDebug(); 00226 virtual bool isLatComEnabled(); 00227 virtual void setLatCom(bool isEnabled); 00228 virtual bool isGUIEnabled(); 00229 virtual void setGUI(bool enabled = true); 00230 virtual int getInstanceNumber(); 00231 virtual int getAPM(bool includeSelects = false); 00232 virtual bool setMap(const char *mapFileName); 00233 virtual void setFrameSkip(int frameSkip = 1); 00234 virtual bool hasPath(Position source, Position destination) const; 00235 virtual bool setAlliance(BWAPI::Player *player, bool allied = true, bool alliedVictory = true); 00236 virtual bool setVision(BWAPI::Player *player, bool enabled = true); 00237 virtual int elapsedTime() const; 00238 virtual void setCommandOptimizationLevel(int level = 2); 00239 virtual int countdownTimer() const; 00240 virtual const std::set<BWAPI::Region*> &getAllRegions() const; 00241 virtual BWAPI::Region *getRegionAt(int x, int y) const; 00242 virtual BWAPI::Region *getRegionAt(BWAPI::Position position) const; 00243 virtual int getLastEventTime() const; 00244 virtual bool setReplayVision(BWAPI::Player *player, bool enabled = true); 00245 virtual bool setRevealAll(bool reveal = true); 00246 }; 00247 }