#pragma once #include #include "GameData.h" #include "Client.h" #include "Shape.h" #include "Command.h" #include "UnitCommand.h" #include "ForceImpl.h" #include "PlayerImpl.h" #include "RegionImpl.h" #include "UnitImpl.h" #include "BulletImpl.h" #include #include #include #include namespace BWAPI { class Force; class Player; class Unit; class GameImpl : public Game { private : int addShape(const BWAPIC::Shape &s); int addString(const char* text); int addText(BWAPIC::Shape &s, const char* text); int addCommand(const BWAPIC::Command &c); void clearAll(); GameData* data; std::vector forceVector; std::vector playerVector; std::vector unitVector; std::vector bulletVector; RegionImpl *regionArray[5000]; std::set forces; std::set playerSet; std::set accessibleUnits;//all units that are accessible (and definitely alive) //notDestroyedUnits - accessibleUnits = all units that may or may not be alive (status unknown) std::set minerals; std::set geysers; std::set neutralUnits; std::set staticMinerals; std::set staticGeysers; std::set staticNeutralUnits; std::set bullets; std::set nukeDots; std::set selectedUnits; std::set pylons; std::set unitsOnTileData[256][256]; std::set regionsList; std::set< TilePosition > startLocations; std::list< Event > events; bool flagEnabled[2]; Player* thePlayer; Player* theEnemy; Player* theNeutral; std::set _allies; std::set _enemies; std::set _observers; Error lastError; int textSize; public : Event makeEvent(BWAPIC::Event e); int addUnitCommand(BWAPIC::UnitCommand& c); bool inGame; GameImpl(GameData* data); void onMatchStart(); void onMatchEnd(); void onMatchFrame(); const GameData* getGameData() const; Unit *_unitFromIndex(int index); virtual std::set< Force* >& getForces(); virtual std::set< Player* >& getPlayers(); virtual std::set< Unit* >& getAllUnits(); virtual std::set< Unit* >& getMinerals(); virtual std::set< Unit* >& getGeysers(); virtual std::set< Unit* >& getNeutralUnits(); virtual std::set< Unit* >& getStaticMinerals(); virtual std::set< Unit* >& getStaticGeysers(); virtual std::set< Unit* >& getStaticNeutralUnits(); virtual std::set< Bullet* >& getBullets(); virtual std::set< Position >& getNukeDots(); virtual std::list< Event>& getEvents(); virtual Force* getForce(int forceID); virtual Player* getPlayer(int playerID); virtual Unit* getUnit(int unitID); virtual Unit* indexToUnit(int unitIndex); virtual Region* getRegion(int regionID); virtual GameType getGameType(); virtual int getLatency(); virtual int getFrameCount(); virtual int getReplayFrameCount(); virtual int getFPS(); virtual double getAverageFPS(); virtual BWAPI::Position getMousePosition(); virtual bool getMouseState(MouseButton button); virtual bool getMouseState(int button); virtual bool getKeyState(Key key); virtual bool getKeyState(int key); virtual BWAPI::Position getScreenPosition(); virtual void setScreenPosition(int x, int y); virtual void setScreenPosition(BWAPI::Position p); virtual void pingMinimap(int x, int y); virtual void pingMinimap(BWAPI::Position p); virtual bool isFlagEnabled(int flag); virtual void enableFlag(int flag); virtual std::set& getUnitsOnTile(int x, int y); virtual std::set& getUnitsInRectangle(int left, int top, int right, int bottom) const; virtual std::set& getUnitsInRectangle(BWAPI::Position topLeft, BWAPI::Position bottomRight) const; virtual std::set& getUnitsInRadius(BWAPI::Position center, int radius) const; virtual Error getLastError() const; virtual bool setLastError(BWAPI::Error e); virtual int mapWidth(); virtual int mapHeight(); virtual std::string mapFileName(); virtual std::string mapPathName(); virtual std::string mapName(); virtual std::string mapHash(); virtual bool isWalkable(int x, int y); virtual int getGroundHeight(int x, int y); virtual int getGroundHeight(TilePosition position); virtual bool isBuildable(int x, int y, bool includeBuildings = false); virtual bool isBuildable(TilePosition position, bool includeBuildings = false); virtual bool isVisible(int x, int y); virtual bool isVisible(TilePosition position); virtual bool isExplored(int x, int y); virtual bool isExplored(TilePosition position); virtual bool hasCreep(int x, int y); virtual bool hasCreep(TilePosition position); virtual bool hasPower(int tileX, int tileY, UnitType unitType = UnitTypes::None) const; virtual bool hasPower(TilePosition position, UnitType unitType = UnitTypes::None) const; virtual bool hasPower(int tileX, int tileY, int tileWidth, int tileHeight, UnitType unitType = UnitTypes::None) const; virtual bool hasPower(TilePosition position, int tileWidth, int tileHeight, UnitType unitType = UnitTypes::None) const; virtual bool hasPowerPrecise(int x, int y, UnitType unitType = UnitTypes::None ) const; virtual bool hasPowerPrecise(Position position, UnitType unitType = UnitTypes::None) const; virtual bool canBuildHere(const Unit* builder, TilePosition position, UnitType type, bool checkExplored = false); virtual bool canMake(const Unit* builder, UnitType type); virtual bool canResearch(const Unit* unit, TechType type); virtual bool canUpgrade(const Unit* unit, UpgradeType type); virtual std::set< TilePosition >& getStartLocations(); virtual void printf(const char* format, ...); virtual void sendText(const char* format, ...); virtual void sendTextEx(bool toAllies, const char *format, ...); virtual void changeRace(BWAPI::Race race); virtual bool isInGame(); virtual bool isMultiplayer(); virtual bool isBattleNet(); virtual bool isPaused(); virtual bool isReplay(); virtual void startGame(); virtual void pauseGame(); virtual void resumeGame(); virtual void leaveGame(); virtual void restartGame(); virtual void setLocalSpeed(int speed = -1); virtual bool issueCommand(const std::set& units, UnitCommand command); virtual std::set& getSelectedUnits(); virtual Player* self(); virtual Player* enemy(); virtual Player* neutral(); virtual std::set& allies(); virtual std::set& enemies(); virtual std::set& observers(); virtual void setTextSize(int size = 1); virtual void drawText(int ctype, int x, int y, const char *format, ...); virtual void drawTextMap(int x, int y, const char *format, ...); virtual void drawTextMouse(int x, int y, const char *format, ...); virtual void drawTextScreen(int x, int y, const char *format, ...); virtual void drawBox(int ctype, int left, int top, int right, int bottom, Color color, bool isSolid = false); virtual void drawBoxMap(int left, int top, int right, int bottom, Color color, bool isSolid = false); virtual void drawBoxMouse(int left, int top, int right, int bottom, Color color, bool isSolid = false); virtual void drawBoxScreen(int left, int top, int right, int bottom, Color color, bool isSolid = false); virtual void drawTriangle(int ctype, int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); virtual void drawTriangleMap(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); virtual void drawTriangleMouse(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); virtual void drawTriangleScreen(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false); virtual void drawCircle(int ctype, int x, int y, int radius, Color color, bool isSolid = false); virtual void drawCircleMap(int x, int y, int radius, Color color, bool isSolid = false); virtual void drawCircleMouse(int x, int y, int radius, Color color, bool isSolid = false); virtual void drawCircleScreen(int x, int y, int radius, Color color, bool isSolid = false); virtual void drawEllipse(int ctype, int x, int y, int xrad, int yrad, Color color, bool isSolid = false); virtual void drawEllipseMap(int x, int y, int xrad, int yrad, Color color, bool isSolid = false); virtual void drawEllipseMouse(int x, int y, int xrad, int yrad, Color color, bool isSolid = false); virtual void drawEllipseScreen(int x, int y, int xrad, int yrad, Color color, bool isSolid = false); virtual void drawDot(int ctype, int x, int y, Color color); virtual void drawDotMap(int x, int y, Color color); virtual void drawDotMouse(int x, int y, Color color); virtual void drawDotScreen(int x, int y, Color color); virtual void drawLine(int ctype, int x1, int y1, int x2, int y2, Color color); virtual void drawLineMap(int x1, int y1, int x2, int y2, Color color); virtual void drawLineMouse(int x1, int y1, int x2, int y2, Color color); virtual void drawLineScreen(int x1, int y1, int x2, int y2, Color color); virtual void *getScreenBuffer(); virtual int getLatencyFrames(); virtual int getLatencyTime(); virtual int getRemainingLatencyFrames(); virtual int getRemainingLatencyTime(); virtual int getRevision(); virtual bool isDebug(); virtual bool isLatComEnabled(); virtual void setLatCom(bool isEnabled); virtual bool isGUIEnabled(); virtual void setGUI(bool enabled = true); virtual int getInstanceNumber(); virtual int getAPM(bool includeSelects = false); virtual bool setMap(const char *mapFileName); virtual void setFrameSkip(int frameSkip = 1); virtual bool hasPath(Position source, Position destination) const; virtual bool setAlliance(BWAPI::Player *player, bool allied = true, bool alliedVictory = true); virtual bool setVision(BWAPI::Player *player, bool enabled = true); virtual int elapsedTime() const; virtual void setCommandOptimizationLevel(int level = 2); virtual int countdownTimer() const; virtual const std::set &getAllRegions() const; virtual BWAPI::Region *getRegionAt(int x, int y) const; virtual BWAPI::Region *getRegionAt(BWAPI::Position position) const; virtual int getLastEventTime() const; virtual bool setReplayVision(BWAPI::Player *player, bool enabled = true); virtual bool setRevealAll(bool reveal = true); }; }