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