BWAPI
|
00001 #pragma once 00002 00003 namespace BW { class Unit; } 00004 namespace BW { struct Bullet; } 00005 namespace BWAPI { class Player; } 00006 namespace BWAPI { class PlayerImpl; } 00007 namespace BWAPI { class Unit; } 00008 namespace BWAPI { class UnitImpl; } 00009 namespace BWAPI { class Bullet; } 00010 namespace BWAPI { class BulletImpl; } 00011 namespace BWAPI { class Command; } 00012 namespace BWAPI { class AIModule; } 00013 00014 #include <BWAPI/AIModule.h> 00015 #include <BWAPI/Game.h> 00016 #include <BWAPI/Server.h> 00017 #include <BWAPI/Map.h> 00018 #include <BWAPI/Client/Shape.h> 00019 #include <BWAPI/Client/GameData.h> 00020 00021 #include <BW/Dialog.h> 00022 #include <BW/OrderTypes.h> 00023 00028 namespace BWAPI 00029 { 00031 class GameImpl : public Game 00032 { 00033 public : 00034 virtual std::set< Force* >& getForces(); 00035 virtual std::set< Player* >& getPlayers(); 00036 virtual std::set< Unit* >& getAllUnits(); 00037 virtual std::set< Unit* >& getMinerals(); 00038 virtual std::set< Unit* >& getGeysers(); 00039 virtual std::set< Unit* >& getNeutralUnits(); 00040 00041 virtual std::set< Unit* >& getStaticMinerals(); 00042 virtual std::set< Unit* >& getStaticGeysers(); 00043 virtual std::set< Unit* >& getStaticNeutralUnits(); 00044 00045 virtual std::set< Bullet* >& getBullets(); 00046 virtual std::set< Position >& getNukeDots(); 00047 virtual std::list< Event >& getEvents(); 00048 00049 virtual Force *getForce(int forceID); 00050 virtual Player *getPlayer(int playerID); 00051 virtual Unit *getUnit(int unitID); 00052 virtual Unit *indexToUnit(int unitIndex); 00053 virtual Region *getRegion(int regionID); 00054 00055 virtual GameType getGameType(); 00056 00057 virtual int getLatency(); 00058 virtual int getFrameCount(); 00059 virtual int getReplayFrameCount(); 00060 virtual int getFPS(); 00061 virtual double getAverageFPS(); 00062 00063 virtual Position getMousePosition(); 00064 virtual bool getMouseState(MouseButton button); 00065 virtual bool getMouseState(int button); 00066 virtual bool getKeyState(Key key); 00067 bool getKeyState(int key); 00068 00069 virtual Position getScreenPosition(); 00070 virtual void setScreenPosition(int x, int y); 00071 virtual void setScreenPosition(BWAPI::Position p); 00072 00073 virtual void pingMinimap(int x, int y); 00074 virtual void pingMinimap(BWAPI::Position p); 00075 00076 virtual bool isFlagEnabled(int flag); 00077 virtual void enableFlag(int flag); 00078 00079 virtual std::set<Unit*>& getUnitsOnTile(int x, int y); 00080 virtual std::set<Unit*>& getUnitsInRectangle(int left, int top, int right, int bottom) const; 00081 virtual std::set<Unit*>& getUnitsInRectangle(BWAPI::Position topLeft, BWAPI::Position bottomRight) const; 00082 virtual std::set<Unit*>& getUnitsInRadius(BWAPI::Position center, int radius) const; 00083 00084 virtual Error getLastError() const; 00085 virtual bool setLastError(BWAPI::Error e); 00086 00087 virtual int mapWidth(); 00088 virtual int mapHeight(); 00089 virtual std::string mapFileName(); 00090 virtual std::string mapPathName(); 00091 virtual std::string mapName(); 00092 virtual std::string mapHash(); 00093 00094 virtual bool isWalkable(int x, int y); 00095 virtual int getGroundHeight(int x, int y); 00096 virtual int getGroundHeight(TilePosition position); 00097 virtual bool isBuildable(int x, int y, bool includeBuildings = false); 00098 virtual bool isBuildable(TilePosition position, bool includeBuildings = false); 00099 virtual bool isVisible(int x, int y); 00100 virtual bool isVisible(TilePosition position); 00101 virtual bool isExplored(int x, int y); 00102 virtual bool isExplored(TilePosition position); 00103 virtual bool hasCreep(int x, int y); 00104 virtual bool hasCreep(TilePosition position); 00105 virtual bool hasPower(int tileX, int tileY, UnitType unitType = UnitTypes::None) const; 00106 virtual bool hasPower(TilePosition position, UnitType unitType = UnitTypes::None) const; 00107 virtual bool hasPower(int tileX, int tileY, int tileWidth, int tileHeight, UnitType unitType = UnitTypes::None) const; 00108 virtual bool hasPower(TilePosition position, int tileWidth, int tileHeight, UnitType unitType = UnitTypes::None) const; 00109 virtual bool hasPowerPrecise(int x, int y, UnitType unitType = UnitTypes::None ) const; 00110 virtual bool hasPowerPrecise(Position position, UnitType unitType = UnitTypes::None) const; 00111 00112 virtual bool canBuildHere(const Unit* builder, TilePosition position, UnitType type, bool checkExplored = false); 00113 virtual bool canMake(const Unit* builder, UnitType type); 00114 virtual bool canResearch(const Unit* unit, TechType type); 00115 virtual bool canUpgrade(const Unit* unit, UpgradeType type); 00116 00117 virtual std::set< TilePosition >& getStartLocations(); 00118 00123 virtual void printf(const char *format, ...); 00124 virtual void sendText(const char *format, ...); 00125 virtual void sendTextEx(bool toAllies, const char *format, ...); 00126 00131 virtual void changeRace(BWAPI::Race race); 00132 virtual bool isInGame(); 00133 virtual bool isMultiplayer(); 00134 virtual bool isBattleNet(); 00135 virtual bool isPaused(); 00136 virtual bool isReplay(); 00137 00142 virtual void startGame(); 00143 virtual void pauseGame(); 00144 virtual void resumeGame(); 00145 virtual void leaveGame(); 00146 virtual void restartGame(); 00147 virtual void setLocalSpeed(int speed = -1); 00148 virtual bool issueCommand(const std::set<BWAPI::Unit*>& units, UnitCommand command); 00149 virtual std::set<BWAPI::Unit*>& getSelectedUnits(); 00150 virtual Player *self(); 00151 virtual Player *enemy(); 00152 virtual Player *neutral(); 00153 virtual std::set<BWAPI::Player*>& allies(); 00154 virtual std::set<BWAPI::Player*>& enemies(); 00155 virtual std::set<BWAPI::Player*>& observers(); 00156 00157 virtual void setTextSize(int size = 1); 00158 virtual void drawText(int ctype, int x, int y, const char *format, ...); 00159 virtual void drawTextMap(int x, int y, const char *format, ...); 00160 virtual void drawTextMouse(int x, int y, const char *format, ...); 00161 virtual void drawTextScreen(int x, int y, const char *format, ...); 00162 00163 virtual void drawBox(int ctype, int left, int top, int right, int bottom, Color color, bool isSolid = false); 00164 virtual void drawBoxMap(int left, int top, int right, int bottom, Color color, bool isSolid = false); 00165 virtual void drawBoxMouse(int left, int top, int right, int bottom, Color color, bool isSolid = false); 00166 virtual void drawBoxScreen(int left, int top, int right, int bottom, Color color, bool isSolid = false); 00167 00168 virtual void drawTriangle(int ctype, int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); 00169 virtual void drawTriangleMap(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); 00170 virtual void drawTriangleMouse(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); 00171 virtual void drawTriangleScreen(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); 00172 00173 virtual void drawCircle(int ctype, int x, int y, int radius, Color color, bool isSolid = false); 00174 virtual void drawCircleMap(int x, int y, int radius, Color color, bool isSolid = false); 00175 virtual void drawCircleMouse(int x, int y, int radius, Color color, bool isSolid = false); 00176 virtual void drawCircleScreen(int x, int y, int radius, Color color, bool isSolid = false); 00177 00178 virtual void drawEllipse(int ctype, int x, int y, int xrad, int yrad, Color color, bool isSolid = false); 00179 virtual void drawEllipseMap(int x, int y, int xrad, int yrad, Color color, bool isSolid = false); 00180 virtual void drawEllipseMouse(int x, int y, int xrad, int yrad, Color color, bool isSolid = false); 00181 virtual void drawEllipseScreen(int x, int y, int xrad, int yrad, Color color, bool isSolid = false); 00182 00183 virtual void drawDot(int ctype, int x, int y, Color color); 00184 virtual void drawDotMap(int x, int y, Color color); 00185 virtual void drawDotMouse(int x, int y, Color color); 00186 virtual void drawDotScreen(int x, int y, Color color); 00187 00188 virtual void drawLine(int ctype, int x1, int y1, int x2, int y2, Color color); 00189 virtual void drawLineMap(int x1, int y1, int x2, int y2, Color color); 00190 virtual void drawLineMouse(int x1, int y1, int x2, int y2, Color color); 00191 virtual void drawLineScreen(int x1, int y1, int x2, int y2, Color color); 00192 00193 virtual void *getScreenBuffer(); 00194 00195 virtual int getLatencyFrames(); 00196 virtual int getLatencyTime(); 00197 virtual int getRemainingLatencyFrames(); 00198 virtual int getRemainingLatencyTime(); 00199 00200 virtual int getRevision(); 00201 virtual bool isDebug(); 00202 virtual bool isLatComEnabled(); 00203 virtual void setLatCom(bool isEnabled); 00204 virtual bool isGUIEnabled(); 00205 virtual void setGUI(bool enabled = true); 00206 00207 virtual int getInstanceNumber(); 00208 virtual int getAPM(bool includeSelects = false); 00209 00210 virtual bool setMap(const char *mapFileName); 00211 virtual void setFrameSkip(int frameSkip = 1); 00212 00213 virtual bool hasPath(Position source, Position destination) const; 00214 00215 virtual bool setAlliance(BWAPI::Player *player, bool allied = true, bool alliedVictory = true); 00216 virtual bool setVision(BWAPI::Player *player, bool enabled = true); 00217 virtual int elapsedTime() const; 00218 00219 virtual void setCommandOptimizationLevel(int level = 2); 00220 virtual int countdownTimer() const; 00221 00222 virtual const std::set<BWAPI::Region*> &getAllRegions() const; 00223 virtual BWAPI::Region *getRegionAt(int x, int y) const; 00224 virtual BWAPI::Region *getRegionAt(BWAPI::Position position) const; 00225 00226 virtual int getLastEventTime() const; 00227 00228 virtual bool setReplayVision(BWAPI::Player *player, bool enabled = true); 00229 virtual bool setRevealAll(bool reveal = true); 00230 00231 //Internal BWAPI commands: 00232 GameImpl(); 00233 ~GameImpl(); 00234 00235 void update(); 00236 void loadAutoMenuData(); 00237 void onMenuFrame(); 00238 PlayerImpl *_getPlayer(int id); 00239 int _currentPlayerId(); 00240 void pressKey(int key); 00241 void mouseDown(int x, int y); 00242 void mouseUp(int x, int y); 00243 00249 void changeSlot(BW::Orders::ChangeSlot::Slot slot, u8 slotID); 00250 void addToCommandBuffer(Command* command); 00251 void onGameStart(); 00252 void onGameEnd(); 00253 int stormIdToPlayerId(int dwStormId); 00254 void onSendText(const char* text); 00255 void onReceiveText(int playerId, std::string text); 00256 bool parseText(const char* text); 00257 bool inScreen(int ctype, int x, int y); 00258 bool inScreen(int ctype, int x1, int y1, int x2, int y2); 00259 bool inScreen(int ctype, int x1, int y1, int x2, int y2, int x3, int y3); 00260 void lockFlags(); 00261 bool enabled; 00262 bool _isInGame() const; 00263 bool _isSinglePlayer() const; 00264 bool _isBattleNet(); 00265 bool _isReplay() const; 00266 void _changeRace(int slot, BWAPI::Race race); 00267 int _getLobbyRace(int slot); 00268 Race lastKnownRaceBeforeStart[8]; 00269 00270 void loadSelected(); 00271 void copyMapToSharedMemory(); 00272 void moveToSelectedUnits(); 00273 void executeCommand(UnitCommand command, bool addCommandToLatComBuffer = true); 00274 bool addToCommandOptimizer(UnitCommand command); 00275 00276 void chooseNewRandomMap(); 00277 static void SendClientEvent(BWAPI::AIModule *module, Event &e); 00278 00279 UnitImpl *getUnitFromIndex(int index); 00280 BulletImpl *getBulletFromIndex(int index); 00281 PlayerImpl *BWAPIPlayer; 00282 PlayerImpl *enemyPlayer; 00283 00284 std::set<int> invalidIndices; 00285 std::list<std::string > sentMessages; 00286 void onSaveGame(char *name); 00287 std::list<Event> events; 00288 int bulletCount; 00289 BW::dialog *myDlg; 00290 Server server; 00291 std::vector<BWAPI::UnitImpl*> lastEvadedUnits; 00292 bool onStartCalled; 00293 std::string lastMapGen; 00294 bool outOfGame; 00295 std::string autoMenuMode; 00296 std::string autoMenuMapPath; 00297 std::string autoMenuGameName; 00298 bool isHost; 00299 int autoMapTryCount; 00300 std::vector<std::string> autoMapPool; 00301 std::string autoMapIteration; 00302 std::string lastAutoMapString; 00303 unsigned int lastAutoMapEntry; 00304 00306 int frameCount; 00307 void refreshSelectionStates(); 00308 BW::Unit *savedUnitSelection[12]; 00309 bool wantSelectionUpdate; 00310 00311 bool startedClient; 00312 00313 UnitImpl *unitArray[UNIT_ARRAY_MAX_LENGTH]; 00314 bool isTournamentCall; 00315 const GameData* getGameData() const; 00316 GameData* data; 00317 00318 int drawShapes(); 00319 void processEvents(); 00320 Unit *_unitFromIndex(int index); 00321 00322 int commandOptimizerLevel; 00323 00324 HMODULE hAIModule; 00325 AIModule *client; 00326 00327 HMODULE hTournamentModule; 00328 AIModule *tournamentAI; 00329 00330 PlayerImpl *players[PLAYER_COUNT]; 00331 00332 void dropPlayers(); 00333 std::vector<PlayerImpl*> droppedPlayers; 00334 private : 00335 Map map; 00336 00337 std::set<BWAPI::UnitImpl*> aliveUnits; //units alive on current frame 00338 std::set<BWAPI::UnitImpl*> dyingUnits; //units leaving aliveUnits set on current frame 00339 00340 std::vector<BWAPI::UnitImpl*> discoverUnits; //units entering accessibleUnits set on current frame 00341 std::set<BWAPI::Unit*> accessibleUnits; //units that are accessible to the client on current frame 00342 std::vector<BWAPI::UnitImpl*> evadeUnits; //units leaving accessibleUnits set on current frame 00343 00344 std::set<BWAPI::Unit*> selectedUnitSet; 00345 std::set<BWAPI::Unit*> emptySet; 00346 std::set<TilePosition> startLocations; 00347 00348 std::set<BWAPI::Force*> forces; 00349 std::set<BWAPI::Player*> playerSet; 00350 00351 std::set<BWAPI::Unit*> minerals; 00352 std::set<BWAPI::Unit*> geysers; 00353 std::set<BWAPI::Unit*> neutralUnits; 00354 std::set<BWAPI::Bullet*> bullets; 00355 std::set<Position> nukeDots; 00356 std::set<BWAPI::UnitImpl*> pylons; 00357 Util::RectangleArray<std::set<Unit*> > unitsOnTileData; 00358 00359 std::set<BWAPI::Unit*> staticMinerals; 00360 std::set<BWAPI::Unit*> staticGeysers; 00361 std::set<BWAPI::Unit*> staticNeutralUnits; 00362 00363 std::set<BWAPI::Region*> regionsList; 00364 00365 BulletImpl* bulletArray[BULLET_ARRAY_MAX_LENGTH]; 00366 std::vector<std::vector<Command *> > commandBuffer; 00368 void updateUnits(); 00369 void updateBullets(); 00370 void computeUnitExistence(); 00371 void computePrimaryUnitSets(); 00372 void extractUnitData(); 00373 void augmentUnitData(); 00374 void applyLatencyCompensation(); 00375 void computeSecondaryUnitSets(); 00380 std::string savedMapHash; 00381 bool flags[BWAPI::Flag::Max]; 00382 TournamentModule *tournamentController; 00383 bool bTournamentMessageAppeared; 00384 BWAPI::Error lastError; 00385 std::list<UnitImpl*> deadUnits; 00386 u32 cheatFlags; 00387 std::string autoMenuLanMode; 00388 std::string autoMenuRace; 00389 std::string autoMenuEnemyRace[8]; 00390 unsigned int autoMenuEnemyCount; 00391 unsigned int autoMenuMinPlayerCount; 00392 unsigned int autoMenuMaxPlayerCount; 00393 unsigned int autoMenuWaitPlayerTime; 00394 std::string autoMenuGameType; 00395 std::string autoMenuRestartGame; 00396 std::string autoMenuSaveReplay; 00397 #ifdef _DEBUG 00398 std::string autoMenuPause; 00399 #endif 00400 std::string rn_BWAPIName; 00401 std::string rn_BWAPIRace; 00402 std::string rn_MapName; 00403 std::string rn_AlliesNames; 00404 std::string rn_AlliesRaces; 00405 std::string rn_EnemiesNames; 00406 std::string rn_EnemiesRaces; 00407 DWORD endTick; 00408 std::set<Player*> _allies; 00409 std::set<Player*> _enemies; 00410 std::set<Player*> _observers; 00411 00412 bool inGame; 00413 bool actStartedGame; 00414 bool actRaceSel; 00415 00416 DWORD startTickCount; 00417 DWORD lastTickCount; 00418 int accumulatedFrames; 00419 int fps; 00420 double averageFPS; 00421 int botAPM_noselects; 00422 int botAPM_selects; 00423 double botAPMCounter_noselects; 00424 double botAPMCounter_selects; 00425 00426 int textSize; 00427 00428 bool pathDebug; 00429 bool unitDebug; 00430 bool grid; 00431 00432 bool externalModuleConnected; 00433 bool calledMatchEnd; 00434 bool tournamentCheck(int type, void *parameter = NULL); 00435 std::vector<UnitCommand> commandOptimizer[BWAPI_UNIT_COMMAND_TYPE_COUNT]; 00436 00437 int lastEventTime; 00438 int addShape(const BWAPIC::Shape &s); 00439 int addString(const char* text); 00440 int addText(BWAPIC::Shape &s, const char* text); 00441 00442 }; 00450 extern GameImpl BroodwarImpl; 00451 };