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