2014-11-13 12:17:06 -05:00
|
|
|
#pragma once
|
|
|
|
#include <list>
|
|
|
|
#include <string>
|
2015-02-07 12:16:07 -05:00
|
|
|
#include <cstdarg>
|
2014-11-13 12:17:06 -05:00
|
|
|
|
|
|
|
#include <BWAPI/Interface.h>
|
|
|
|
#include <BWAPI/UnitType.h>
|
|
|
|
#include <BWAPI/Error.h>
|
|
|
|
#include <BWAPI/Color.h>
|
|
|
|
|
|
|
|
#include <BWAPI/Filters.h>
|
|
|
|
#include <BWAPI/UnaryFilter.h>
|
|
|
|
#include <BWAPI/Input.h>
|
|
|
|
#include <BWAPI/CoordinateType.h>
|
|
|
|
|
|
|
|
#include <sstream>
|
|
|
|
|
|
|
|
namespace BWAPI
|
|
|
|
{
|
|
|
|
// Forward Declarations
|
|
|
|
class Bulletset;
|
|
|
|
class Color;
|
|
|
|
class Event;
|
|
|
|
class ForceInterface;
|
|
|
|
typedef ForceInterface *Force;
|
|
|
|
class Forceset;
|
|
|
|
class GameType;
|
|
|
|
class PlayerInterface;
|
|
|
|
typedef PlayerInterface *Player;
|
|
|
|
class Playerset;
|
|
|
|
class Race;
|
|
|
|
|
|
|
|
class RegionInterface;
|
|
|
|
typedef RegionInterface *Region;
|
|
|
|
|
|
|
|
class Regionset;
|
|
|
|
class TechType;
|
|
|
|
class UnitCommand;
|
|
|
|
class Unitset;
|
|
|
|
class UpgradeType;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>The abstract Game class is implemented by BWAPI and is the primary means of obtaining all
|
|
|
|
/// game state information from Starcraft Broodwar.</summary> Game state information includes all units,
|
2014-11-13 12:17:06 -05:00
|
|
|
/// resources, players, forces, bullets, terrain, fog of war, regions, etc.
|
2016-02-28 08:49:15 -05:00
|
|
|
///
|
|
|
|
/// @ingroup Interface
|
2014-11-13 12:17:06 -05:00
|
|
|
class Game : public Interface<Game>
|
|
|
|
{
|
|
|
|
protected:
|
|
|
|
virtual ~Game() {};
|
2016-02-28 08:49:15 -05:00
|
|
|
|
|
|
|
Game& operator=(const Game& other) = delete;
|
|
|
|
Game& operator=(Game&& other) = delete;
|
2014-11-13 12:17:06 -05:00
|
|
|
public :
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all teams/forces.</summary> Forces are commonly seen in @UMS
|
|
|
|
/// game types and some others such as @TvB and the team versions of game types.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Forceset containing all forces in the game.
|
|
|
|
virtual const Forceset& getForces() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all players in the match.</summary> This includes the neutral
|
|
|
|
/// player, which owns all the resources and critters by default.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Playerset containing all players in the game.
|
|
|
|
virtual const Playerset& getPlayers() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all accessible units.</summary> If
|
|
|
|
/// Flag::CompleteMapInformation is enabled, then the set also includes units that are not
|
|
|
|
/// visible to the player.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note Units that are inside refineries are not included in this set.
|
|
|
|
///
|
|
|
|
/// @returns Unitset containing all known units in the game.
|
|
|
|
virtual const Unitset& getAllUnits() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all accessible @minerals in the game.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Unitset containing @minerals
|
|
|
|
virtual const Unitset& getMinerals() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all accessible @geysers in the game.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Unitset containing @geysers
|
|
|
|
virtual const Unitset& getGeysers() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all accessible neutral units in the game.</summary> This
|
|
|
|
/// includes @minerals, @geysers, and @critters.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Unitset containing all neutral units.
|
|
|
|
virtual const Unitset& getNeutralUnits() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all @minerals that were available at the beginning of the
|
|
|
|
/// game.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note This set includes resources that have been mined out or are inaccessible.
|
|
|
|
///
|
|
|
|
/// @returns Unitset containing static @minerals
|
|
|
|
virtual const Unitset& getStaticMinerals() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all @geysers that were available at the beginning of the
|
|
|
|
/// game.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note This set includes resources that are inaccessible.
|
|
|
|
///
|
|
|
|
/// @returns Unitset containing static @geysers
|
|
|
|
virtual const Unitset& getStaticGeysers() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all units owned by the neutral player (resources, critters,
|
|
|
|
/// etc.) that were available at the beginning of the game.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note This set includes units that are inaccessible.
|
|
|
|
///
|
|
|
|
/// @returns Unitset containing static neutral units
|
|
|
|
virtual const Unitset& getStaticNeutralUnits() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all accessible bullets.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Bulletset containing all accessible Bullet objects.
|
|
|
|
virtual const Bulletset& getBullets() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all accessible @Nuke dots.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note Nuke dots are the red dots painted by a @Ghost when using the nuclear strike ability.
|
|
|
|
///
|
|
|
|
/// @returns Set of Positions giving the coordinates of nuke locations.
|
2015-02-07 12:16:07 -05:00
|
|
|
virtual const Position::list& getNukeDots() const = 0;
|
2014-11-13 12:17:06 -05:00
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the list of all unhandled game events.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns std::list containing Event objects.
|
|
|
|
virtual const std::list< Event >& getEvents() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the Force interface object associated with a given identifier.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="forceID">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The identifier for the Force object.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Force interface object mapped to the given \p forceID.
|
|
|
|
/// @retval nullptr if the given identifier is invalid.
|
|
|
|
virtual Force getForce(int forceID) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the Player interface object associated with a given identifier.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="playerID">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The identifier for the Player object.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Player interface object mapped to the given \p playerID.
|
|
|
|
/// @retval nullptr if the given identifier is invalid.
|
|
|
|
virtual Player getPlayer(int playerID) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the Unit interface object associated with a given identifier.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="unitID">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The identifier for the Unit object.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Unit interface object mapped to the given \p unitID.
|
|
|
|
/// @retval nullptr if the given identifier is invalid.
|
|
|
|
virtual Unit getUnit(int unitID) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves a Unit interface object from a given unit index.</summary> The value
|
|
|
|
/// given as an index maps directly to Broodwar's unit array index and matches the index found
|
|
|
|
/// in replay files. In order to use this function, CompleteMapInformation must be enabled.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="unitIndex">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The unitIndex to identify the Unit with. A valid index is 0 <= unitIndex & 0x7FF < 1700.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Unit interface object that matches the given \p unitIndex.
|
|
|
|
/// @retval nullptr if the given index is invalid.
|
|
|
|
virtual Unit indexToUnit(int unitIndex) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the Region interface object associated with a given identifier.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="regionID">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The identifier for the Region object.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Region interface object mapped to the given \p regionID.
|
|
|
|
/// @retval nullptr if the given ID is invalid.
|
|
|
|
virtual Region getRegion(int regionID) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the GameType of the current game.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns GameType indicating the rules of the match.
|
|
|
|
/// @see GameType
|
|
|
|
virtual GameType getGameType() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the current latency setting that the game is set to.</summary> Latency
|
|
|
|
/// indicates the delay between issuing a command and having it processed.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns The latency setting of the game, which is of Latency::Enum.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// @see Latency::Enum
|
|
|
|
///
|
2014-11-13 12:17:06 -05:00
|
|
|
/// @todo Change return type to Latency::Enum without breaking everything.
|
|
|
|
virtual int getLatency() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the number of logical frames since the beginning of the match.</summary>
|
|
|
|
/// If the game is paused, then getFrameCount will not increase.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Number of logical frames that have elapsed since the game started as an integer.
|
|
|
|
virtual int getFrameCount() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the maximum number of logical frames that have been recorded in a
|
|
|
|
/// replay.</summary> If the game is not a replay, then the value returned is undefined.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns The number of logical frames that the replay contains.
|
|
|
|
virtual int getReplayFrameCount() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the logical frame rate of the game in frames per second (FPS).</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// Example:
|
|
|
|
/// @code
|
|
|
|
/// BWAPI::Broodwar->setLocalSpeed(0);
|
|
|
|
///
|
|
|
|
/// // Log and display the best logical FPS seen in the game
|
|
|
|
/// static int bestFPS = 0;
|
|
|
|
/// bestFPS = std::max(bestFPS, BWAPI::Broodwar->getFPS());
|
|
|
|
/// BWAPI::Broodwar->drawTextScreen(BWAPI::Positions::Origin, "%cBest: %d GFPS\nCurrent: %d GFPS", BWAPI::Text::White, bestFPS, BWAPI::Broodwar->getFPS());
|
|
|
|
/// @endcode
|
|
|
|
/// @returns Logical frames per second that the game is currently running at as an integer.
|
|
|
|
/// @see getAverageFPS
|
|
|
|
virtual int getFPS() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the average logical frame rate of the game in frames per second (FPS).</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Average logical frames per second that the game is currently running at as a
|
|
|
|
/// double.
|
|
|
|
/// @see getFPS
|
|
|
|
virtual double getAverageFPS() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the position of the user's mouse on the screen, in Position coordinates.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Position indicating the location of the mouse.
|
|
|
|
/// @retval Positions::Unknown if Flag::UserInput is disabled.
|
|
|
|
virtual Position getMousePosition() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the state of the given mouse button.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="button">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A MouseButton enum member indicating which button on the mouse to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @return A bool indicating the state of the given \p button. true if the button was pressed
|
|
|
|
/// and false if it was not.
|
|
|
|
/// @retval false always if Flag::UserInput is disabled.
|
2016-02-28 08:49:15 -05:00
|
|
|
///
|
|
|
|
/// @see MouseButton
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual bool getMouseState(MouseButton button) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the state of the given keyboard key.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="key">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A Key enum member indicating which key on the keyboard to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @return A bool indicating the state of the given \p key. true if the key was pressed
|
|
|
|
/// and false if it was not.
|
|
|
|
/// @retval false always if Flag::UserInput is disabled.
|
2016-02-28 08:49:15 -05:00
|
|
|
///
|
|
|
|
/// @see Key
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual bool getKeyState(Key key) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the top left position of the viewport from the top left corner of the
|
|
|
|
/// map, in pixels.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Position containing the coordinates of the top left corner of the game's viewport.
|
|
|
|
/// @retval Positions::Unknown always if Flag::UserInput is disabled.
|
|
|
|
/// @see setScreenPosition
|
|
|
|
virtual BWAPI::Position getScreenPosition() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Moves the top left corner of the viewport to the provided position relative to
|
|
|
|
/// the map's origin (top left (0,0)).</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="x">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate to move the screen to, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="y">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate to move the screen to, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
/// @see getScreenPosition
|
|
|
|
virtual void setScreenPosition(int x, int y) = 0;
|
|
|
|
/// @overload
|
|
|
|
void setScreenPosition(BWAPI::Position p);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Pings the minimap at the given position.</summary> Minimap pings are visible to
|
|
|
|
/// allied players.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="x">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate to ping at, in pixels, from the map's origin (left).
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="y">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate to ping at, in pixels, from the map's origin (top).
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual void pingMinimap(int x, int y) = 0;
|
|
|
|
/// @overload
|
|
|
|
void pingMinimap(BWAPI::Position p);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the state of the given flag is enabled or not.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note Flags may only be enabled at the start of the match during the AIModule::onStart
|
|
|
|
/// callback.
|
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="flag">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The Flag::Enum entry describing the flag's effects on BWAPI.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
///
|
2014-11-13 12:17:06 -05:00
|
|
|
/// @returns true if the given \p flag is enabled, false if the flag is disabled.
|
2016-02-28 08:49:15 -05:00
|
|
|
///
|
|
|
|
/// @see Flag::Enum
|
|
|
|
///
|
2014-11-13 12:17:06 -05:00
|
|
|
/// @todo Take Flag::Enum as parameter instead of int
|
|
|
|
virtual bool isFlagEnabled(int flag) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Enables the state of a given flag.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note Flags may only be enabled at the start of the match during the AIModule::onStart
|
|
|
|
/// callback.
|
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="flag">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The Flag::Enum entry describing the flag's effects on BWAPI.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
///
|
|
|
|
/// @see Flag::Enum
|
|
|
|
///
|
2014-11-13 12:17:06 -05:00
|
|
|
/// @todo Take Flag::Enum as parameter instead of int
|
|
|
|
virtual void enableFlag(int flag) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of accessible units that are on a given build tile.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="tileX">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The X position, in tiles.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="tileY">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The Y position, in tiles.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="pred"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A function predicate that indicates which units are included in the returned set.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns A Unitset object consisting of all the units that have any part of them on the
|
|
|
|
/// given build tile.
|
|
|
|
Unitset getUnitsOnTile(int tileX, int tileY, const UnitFilter &pred = nullptr) const;
|
|
|
|
/// @overload
|
|
|
|
Unitset getUnitsOnTile(BWAPI::TilePosition tile, const UnitFilter &pred = nullptr) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of accessible units that are in a given rectangle.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="left">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The X coordinate of the left position of the bounding box, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="top">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The Y coordinate of the top position of the bounding box, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="right">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The X coordinate of the right position of the bounding box, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="bottom">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The Y coordinate of the bottom position of the bounding box, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="pred"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A function predicate that indicates which units are included in the returned set.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns A Unitset object consisting of all the units that have any part of them within the
|
|
|
|
/// given rectangle bounds.
|
|
|
|
virtual Unitset getUnitsInRectangle(int left, int top, int right, int bottom, const UnitFilter &pred = nullptr) const = 0;
|
|
|
|
/// @overload
|
|
|
|
Unitset getUnitsInRectangle(BWAPI::Position topLeft, BWAPI::Position bottomRight, const UnitFilter &pred = nullptr) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of accessible units that are within a given radius of a
|
|
|
|
/// position.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="x">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate of the center, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="y">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate of the center, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="radius">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The radius from the center, in pixels, to include units.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="pred"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A function predicate that indicates which units are included in the returned set.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns A Unitset object consisting of all the units that have any part of them within the
|
|
|
|
/// given radius from the center position.
|
|
|
|
Unitset getUnitsInRadius(int x, int y, int radius, const UnitFilter &pred = nullptr) const;
|
|
|
|
/// @overload
|
|
|
|
Unitset getUnitsInRadius(BWAPI::Position center, int radius, const UnitFilter &pred = nullptr) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the closest unit to center that matches the criteria of the callback
|
|
|
|
/// pred within an optional radius.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="center">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The position to start searching for the closest unit.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="pred"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The UnitFilter predicate to determine which units should be included. This includes
|
|
|
|
/// all units by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="radius"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The radius to search in. If omitted, the entire map will be searched.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns The desired unit that is closest to center.
|
|
|
|
/// @retval nullptr If a suitable unit was not found.
|
|
|
|
///
|
|
|
|
/// @see getBestUnit, UnitFilter
|
|
|
|
Unit getClosestUnit(Position center, const UnitFilter &pred = nullptr, int radius = 999999) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the closest unit to center that matches the criteria of the callback
|
|
|
|
/// pred within an optional rectangle.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="center">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The position to start searching for the closest unit.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="pred"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The UnitFilter predicate to determine which units should be included. This includes
|
|
|
|
/// all units by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="left"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The left position of the rectangle. This value is 0 by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="top"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The top position of the rectangle. This value is 0 by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="right"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The right position of the rectangle. This value includes the entire map width by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="bottom"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The bottom position of the rectangle. This value includes the entire map height by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @see UnitFilter
|
|
|
|
virtual Unit getClosestUnitInRectangle(Position center, const UnitFilter &pred = nullptr, int left = 0, int top = 0, int right = 999999, int bottom = 999999) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Compares all units with pred to determine which of them is the best.</summary>
|
|
|
|
/// All units are checked. If center and radius are specified, then it will check all units
|
|
|
|
/// that are within the radius of the position.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="best">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A BestUnitFilter that determines which parameters should be considered when calculating
|
|
|
|
/// which units are better than others.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="pred">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A UnitFilter that determines which units to include in calculations.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="center"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The position to use in the search. If omitted, then the entire map is searched.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="radius"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The distance from \p center to search for units. If omitted, then the entire map is
|
|
|
|
/// searched.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns The desired unit that best matches the given criteria.
|
|
|
|
/// @retval nullptr if a suitable unit was not found.
|
|
|
|
///
|
|
|
|
/// @see getClosestUnit, BestUnitFilter, UnitFilter
|
|
|
|
virtual Unit getBestUnit(const BestUnitFilter &best, const UnitFilter &pred, Position center = Positions::Origin, int radius = 999999) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Returns the last error that was set using setLastError.</summary> If a function
|
|
|
|
/// call in BWAPI has failed, you can use this function to retrieve the reason it failed.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Error type containing the reason for failure.
|
|
|
|
///
|
|
|
|
/// @see setLastError, Errors
|
|
|
|
virtual Error getLastError() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Sets the last error so that future calls to getLastError will return the value
|
|
|
|
/// that was set.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="e"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The error code to set. If omitted, then the last error will be cleared.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @retval true If the type passed was Errors::None, clearing the last error.
|
|
|
|
/// @retval false If any other error type was passed.
|
|
|
|
/// @see getLastError, Errors
|
|
|
|
virtual bool setLastError(BWAPI::Error e = Errors::None) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the width of the map in build tile units.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Width of the map in tiles.
|
|
|
|
/// @see mapHeight
|
|
|
|
virtual int mapWidth() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the height of the map in build tile units.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Height of the map in tiles.
|
|
|
|
/// @see mapHeight
|
|
|
|
virtual int mapHeight() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the file name of the currently loaded map.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Map file name as std::string object.
|
|
|
|
///
|
|
|
|
/// @see mapPathName, mapName
|
2016-02-28 08:49:15 -05:00
|
|
|
///
|
|
|
|
/// @TODO: Note on campaign files.
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual std::string mapFileName() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the full path name of the currently loaded map.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Map file name as std::string object.
|
|
|
|
///
|
|
|
|
/// @see mapFileName, mapName
|
2016-02-28 08:49:15 -05:00
|
|
|
///
|
|
|
|
/// @TODO: Note on campaign files.
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual std::string mapPathName() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the title of the currently loaded map.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Map title as std::string object.
|
|
|
|
///
|
|
|
|
/// @see mapFileName, mapPathName
|
|
|
|
virtual std::string mapName() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Calculates the SHA-1 hash of the currently loaded map file.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns std::string object containing SHA-1 hash.
|
|
|
|
///
|
|
|
|
/// @note Campaign maps will return a hash of their internal map chunk components(.chk), while
|
|
|
|
/// standard maps will return a hash of their entire map archive (.scm,.scx).
|
2016-02-28 08:49:15 -05:00
|
|
|
///
|
2014-11-13 12:17:06 -05:00
|
|
|
/// @TODO: Note on replays.
|
|
|
|
virtual std::string mapHash() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the given mini-tile position is walkable.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note This function only checks if the static terrain is walkable. Its current occupied
|
|
|
|
/// state is excluded from this check. To see if the space is currently occupied or not, then
|
|
|
|
/// see #getUnitsInRectangle .
|
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="walkX">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate of the mini-tile, in mini-tile units (8 pixels).
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="walkY">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate of the mini-tile, in mini-tile units (8 pixels).
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true if the mini-tile is walkable and false if it is impassable for ground units.
|
|
|
|
virtual bool isWalkable(int walkX, int walkY) const = 0;
|
|
|
|
/// @overload
|
|
|
|
bool isWalkable(BWAPI::WalkPosition position) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Returns the ground height at the given tile position.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="tileX">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// X position to query, in tiles
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="tileY">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// Y position to query, in tiles
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns The tile height as an integer. Possible values are:
|
|
|
|
/// - 0: Low ground
|
|
|
|
/// - 1: Low ground doodad
|
|
|
|
/// - 2: High ground
|
|
|
|
/// - 3: High ground doodad
|
|
|
|
/// - 4: Very high ground
|
|
|
|
/// - 5: Very high ground doodad
|
|
|
|
/// .
|
|
|
|
virtual int getGroundHeight(int tileX, int tileY) const = 0;
|
|
|
|
/// @overload
|
|
|
|
int getGroundHeight(TilePosition position) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if a given tile position is buildable.</summary> This means that, if all
|
|
|
|
/// other requirements are met, a structure can be placed on this tile. This function uses
|
|
|
|
/// static map data.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="tileX">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x value of the tile to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="tileY">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y value of the tile to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="includeBuildings"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// If this is true, then this function will also check if any visible structures are
|
|
|
|
/// occupying the space. If this value is false, then it only checks the static map data
|
|
|
|
/// for tile buildability. This value is false by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns boolean identifying if the given tile position is buildable (true) or not (false).
|
|
|
|
/// If \p includeBuildings was provided, then it will return false if a structure is currently
|
|
|
|
/// occupying the tile.
|
|
|
|
virtual bool isBuildable(int tileX, int tileY, bool includeBuildings = false) const = 0;
|
|
|
|
/// @overload
|
|
|
|
bool isBuildable(TilePosition position, bool includeBuildings = false) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if a given tile position is visible to the current player.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="tileX">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x value of the tile to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="tileY">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y value of the tile to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns boolean identifying the visibility of the tile. If the given tile is visible, then
|
|
|
|
/// the value is true. If the given tile is concealed by the fog of war, then this value will
|
|
|
|
/// be false.
|
|
|
|
virtual bool isVisible(int tileX, int tileY) const = 0;
|
|
|
|
/// @overload
|
|
|
|
bool isVisible(TilePosition position) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if a given tile position has been explored by the player.</summary> An
|
|
|
|
/// explored tile position indicates that the player has seen the location at some point in the
|
|
|
|
/// match, partially revealing the fog of war for the remainder of the match.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="tileX">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x tile coordinate to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="tileY">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y tile coordinate to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @retval true If the player has explored the given tile position (partially revealed fog).
|
|
|
|
/// @retval false If the tile position was never explored (completely black fog).
|
|
|
|
///
|
|
|
|
/// @see isVisible
|
|
|
|
virtual bool isExplored(int tileX, int tileY) const = 0;
|
|
|
|
/// @overload
|
|
|
|
bool isExplored(TilePosition position) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the given tile position has @Zerg creep on it.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="tileX">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x tile coordinate to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="tileY">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y tile coordinate to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @retval true If the given tile has creep on it.
|
|
|
|
/// @retval false If the given tile does not have creep, or if it is concealed by the fog of war.
|
|
|
|
virtual bool hasCreep(int tileX, int tileY) const = 0;
|
|
|
|
/// @overload
|
|
|
|
bool hasCreep(TilePosition position) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the given pixel position is powered by an owned @Protoss_Pylon for an
|
|
|
|
/// optional unit type.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="x">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x pixel coordinate to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="y">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y pixel coordinate to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="unitType"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// Checks if the given UnitType requires power or not. If ommitted, then it will assume
|
|
|
|
/// that the position requires power for any unit type.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @retval true if the type at the given position will have power.
|
|
|
|
/// @retval false if the type at the given position will be unpowered.
|
|
|
|
virtual bool hasPowerPrecise(int x, int y, UnitType unitType = UnitTypes::None ) const = 0;
|
|
|
|
/// @overload
|
|
|
|
bool hasPowerPrecise(Position position, UnitType unitType = UnitTypes::None) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the given tile position if powered by an owned @Protoss_Pylon for an
|
|
|
|
/// optional unit type.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="tileX">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x tile coordinate to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="tileY">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y tile coordinate to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="unitType"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// Checks if the given UnitType will be powered if placed at the given tile position. If
|
|
|
|
/// omitted, then only the immediate tile position is checked for power, and the function
|
|
|
|
/// will assume that the location requires power for any unit type.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @retval true if the type at the given tile position will receive power.
|
|
|
|
/// @retval false if the type will be unpowered at the given tile position.
|
|
|
|
bool hasPower(int tileX, int tileY, UnitType unitType = UnitTypes::None) const;
|
|
|
|
/// @overload
|
|
|
|
bool hasPower(TilePosition position, UnitType unitType = UnitTypes::None) const;
|
|
|
|
/// @overload
|
|
|
|
bool hasPower(int tileX, int tileY, int tileWidth, int tileHeight, UnitType unitType = UnitTypes::None) const;
|
|
|
|
/// @overload
|
|
|
|
bool hasPower(TilePosition position, int tileWidth, int tileHeight, UnitType unitType = UnitTypes::None) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the given unit type can be built at the given build tile position.</summary>
|
|
|
|
/// This function checks for creep, power, and resource distance requirements in addition to
|
|
|
|
/// the tiles' buildability and possible units obstructing the build location.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2015-02-07 12:16:07 -05:00
|
|
|
/// @note If the type is an addon and a builer is provided, then the location of the addon will
|
|
|
|
/// be placed 4 tiles to the right and 1 tile down from the given \p position. If the builder
|
|
|
|
/// is not given, then the check for the addon will be conducted at position.
|
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="position">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// Indicates the tile position that the top left corner of the structure is intended to go.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="type">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The UnitType to check for.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="builder"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The intended unit that will build the structure. If specified, then this function will
|
|
|
|
/// also check if there is a path to the build site and exclude the builder from the set of
|
|
|
|
/// units that may be blocking the build site.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="checkExplored"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// If this parameter is true, it will also check if the target position has been explored
|
|
|
|
/// by the current player. This value is false by default, ignoring the explored state of
|
|
|
|
/// the build site.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true indicating that the structure can be placed at the given tile position, and
|
|
|
|
/// false if something may be obstructing the build location.
|
|
|
|
virtual bool canBuildHere(TilePosition position, UnitType type, Unit builder = nullptr, bool checkExplored = false) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks all the requirements in order to make a given unit type for the current
|
|
|
|
/// player.</summary> These include resources, supply, technology tree, availability, and
|
|
|
|
/// required units.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="type">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The UnitType to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="builder"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The Unit that will be used to build/train the provided unit \p type. If this value is
|
|
|
|
/// nullptr or excluded, then the builder will be excluded in the check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true indicating that the type can be made. If \p builder is provided, then it is
|
|
|
|
/// only true if \p builder can make the \p type. Otherwise it will return false, indicating
|
|
|
|
/// that the unit type can not be made.
|
|
|
|
virtual bool canMake(UnitType type, Unit builder = nullptr) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks all the requirements in order to research a given technology type for the
|
|
|
|
/// current player.</summary> These include resources, technology tree, availability, and
|
|
|
|
/// required units.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="type">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The TechType to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="unit"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The Unit that will be used to research the provided technology \p type. If this value is
|
|
|
|
/// nullptr or excluded, then the unit will be excluded in the check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="checkCanIssueCommandType"> (optional)
|
|
|
|
/// TODO fill this in
|
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true indicating that the type can be researched. If \p unit is provided, then it is
|
|
|
|
/// only true if \p unit can research the \p type. Otherwise it will return false, indicating
|
|
|
|
/// that the technology can not be researched.
|
|
|
|
virtual bool canResearch(TechType type, Unit unit = nullptr, bool checkCanIssueCommandType = true) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks all the requirements in order to upgrade a given upgrade type for the
|
|
|
|
/// current player.</summary> These include resources, technology tree, availability, and
|
|
|
|
/// required units.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="type">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The UpgradeType to check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="unit"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The Unit that will be used to upgrade the provided upgrade \p type. If this value is
|
|
|
|
/// nullptr or excluded, then the unit will be excluded in the check.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="checkCanIssueCommandType"> (optional)
|
|
|
|
/// TODO fill this in
|
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true indicating that the type can be upgraded. If \p unit is provided, then it is
|
|
|
|
/// only true if \p unit can upgrade the \p type. Otherwise it will return false, indicating
|
|
|
|
/// that the upgrade can not be upgraded.
|
|
|
|
virtual bool canUpgrade(UpgradeType type, Unit unit = nullptr, bool checkCanIssueCommandType = true) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all starting locations for the current map.</summary> A
|
|
|
|
/// starting location is essentially a candidate for a player's spawn point.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2015-02-07 12:16:07 -05:00
|
|
|
/// @returns A TilePosition::list containing all the TilePosition objects that indicate a start
|
2014-11-13 12:17:06 -05:00
|
|
|
/// location.
|
|
|
|
/// @see PlayerInterface::getStartLocation
|
2015-02-07 12:16:07 -05:00
|
|
|
virtual const TilePosition::list& getStartLocations() const = 0;
|
2014-11-13 12:17:06 -05:00
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Prints text to the screen as a notification.</summary> This function allows text
|
|
|
|
/// formatting using Text::Enum members. The behaviour of this function is the same as printf,
|
|
|
|
/// located in header cstdio.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note That text printed through this function is not seen by other players or in replays.
|
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="format">
|
|
|
|
/// Text formatting. See std::printf for more information. Refrain from passing non-constant
|
2014-11-13 12:17:06 -05:00
|
|
|
/// strings directly in this parameter.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="...">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The arguments that will be formatted using the given text formatting.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// @see Text::Enum, std::printf
|
2014-11-13 12:17:06 -05:00
|
|
|
void printf(const char *format, ...);
|
|
|
|
|
|
|
|
/// @copydoc printf
|
|
|
|
///
|
|
|
|
/// This function is intended to forward an already-existing argument list.
|
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="args">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The argument list that will be formatted.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @see printf
|
|
|
|
virtual void vPrintf(const char *format, va_list args) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Sends a text message to all other players in the game.</summary> The behaviour of
|
|
|
|
/// this function is the same as std::printf, located in header cstdio.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note In a single player game this function can be used to execute cheat codes.
|
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="format">
|
|
|
|
/// Text formatting. See std::printf for more information. Refrain from passing non-constant
|
2014-11-13 12:17:06 -05:00
|
|
|
/// strings directly in this parameter.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
///
|
|
|
|
/// @see sendTextEx, std::printf
|
2014-11-13 12:17:06 -05:00
|
|
|
void sendText(const char *format, ...);
|
|
|
|
|
|
|
|
/// @copydoc sendText
|
|
|
|
///
|
|
|
|
/// This function is intended to forward an already-existing argument list.
|
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="args">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The argument list that will be formatted.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @see sendText
|
|
|
|
void vSendText(const char *format, va_list args);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>An extended version of Game::sendText which allows messages to be forwarded to
|
|
|
|
/// allies.</summary> The behaviour of this function is the same as std::printf, located in
|
|
|
|
/// header cstdio.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="toAllies">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// If this parameter is set to true, then the message is only sent to allied players,
|
|
|
|
/// otherwise it will be sent to all players.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="format">
|
|
|
|
/// Text formatting. See std::printf for more information. Refrain from passing non-constant
|
2014-11-13 12:17:06 -05:00
|
|
|
/// strings directly in this parameter.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
///
|
|
|
|
/// @see sendText, std::printf
|
2014-11-13 12:17:06 -05:00
|
|
|
void sendTextEx(bool toAllies, const char *format, ...);
|
|
|
|
|
|
|
|
/// @copydoc sendTextEx
|
|
|
|
///
|
|
|
|
/// This function is intended to forward an already-existing argument list.
|
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="args">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The argument list that will be formatted.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @see sendTextEx
|
|
|
|
virtual void vSendTextEx(bool toAllies, const char *format, va_list args) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the current client is inside a game.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true if the client is in a game, and false if it is not.
|
|
|
|
virtual bool isInGame() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the current client is inside a multiplayer game.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true if the client is in a multiplayer game, and false if it is a single player
|
|
|
|
/// game, a replay, or some other state.
|
|
|
|
virtual bool isMultiplayer() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the client is in a game that was created through the Battle.net
|
|
|
|
/// multiplayer gaming service.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true if the client is in a multiplayer Battle.net game and false if it is not.
|
|
|
|
virtual bool isBattleNet() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the current game is paused.</summary> While paused, AIModule::onFrame
|
|
|
|
/// will still be called.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true if the game is paused and false otherwise
|
|
|
|
/// @see pauseGame, resumeGame
|
|
|
|
virtual bool isPaused() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the client is watching a replay.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true if the client is watching a replay and false otherwise
|
|
|
|
virtual bool isReplay() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Pauses the game.</summary> While paused, AIModule::onFrame will still be called.
|
2014-11-13 12:17:06 -05:00
|
|
|
/// @see resumeGame
|
|
|
|
virtual void pauseGame() = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Resumes the game from a paused state.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
/// @see pauseGame
|
|
|
|
virtual void resumeGame() = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Leaves the current game by surrendering and enters the post-game statistics/score
|
|
|
|
/// screen.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual void leaveGame() = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Restarts the match.</summary> Works the same as if the match was restarted from
|
|
|
|
/// the in-game menu (F10). This option is only available in single player games.
|
|
|
|
///
|
2014-11-13 12:17:06 -05:00
|
|
|
/// @todo return a bool indicating success, document error code for invalid state
|
|
|
|
virtual void restartGame() = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Sets the number of milliseconds Broodwar spends in each frame.</summary> The
|
|
|
|
/// default values are as follows:
|
2014-11-13 12:17:06 -05:00
|
|
|
/// - Fastest: 42ms/frame
|
|
|
|
/// - Faster: 48ms/frame
|
|
|
|
/// - Fast: 56ms/frame
|
|
|
|
/// - Normal: 67ms/frame
|
|
|
|
/// - Slow: 83ms/frame
|
|
|
|
/// - Slower: 111ms/frame
|
|
|
|
/// - Slowest: 167ms/frame
|
|
|
|
///
|
|
|
|
/// @note Specifying a value of 0 will not guarantee that logical frames are executed as fast
|
|
|
|
/// as possible. If that is the intention, use this in combination with #setFrameSkip.
|
|
|
|
///
|
|
|
|
/// @bug Changing this value will cause the execution of @UMS scenario triggers to glitch.
|
|
|
|
/// This will only happen in campaign maps and custom scenarios (non-melee).
|
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="speed">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The time spent per frame, in milliseconds. A value of 0 indicates that frames are
|
|
|
|
/// executed immediately with no delay. Negative values will restore the default value
|
|
|
|
/// as listed above.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @see setFrameSkip, getFPS
|
|
|
|
virtual void setLocalSpeed(int speed) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Issues a given command to a set of units.</summary> This function automatically
|
|
|
|
/// splits the set into groups of 12 and issues the same command to each of them. If a unit
|
|
|
|
/// is not capable of executing the command, then it is simply ignored.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="units">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A Unitset containing all the units to issue the command for.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="command">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A UnitCommand object containing relevant information about the command to be issued.
|
|
|
|
/// The Unit interface object associated with the command will be ignored.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true if any one of the units in the Unitset were capable of executing the
|
|
|
|
/// command, and false if none of the units were capable of executing the command.
|
|
|
|
virtual bool issueCommand(const Unitset& units, UnitCommand command) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of units that are currently selected by the user outside of
|
|
|
|
/// BWAPI.</summary> This function requires that Flag::UserInput be enabled.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns A Unitset containing the user's selected units. If Flag::UserInput is disabled,
|
|
|
|
/// then this set is always empty.
|
|
|
|
///
|
|
|
|
/// @see enableFlag
|
|
|
|
virtual const Unitset& getSelectedUnits() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the player object that BWAPI is controlling.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Pointer to Player interface object representing the current player.
|
|
|
|
/// @retval nullptr if the current game is a replay.
|
|
|
|
///
|
|
|
|
/// Example usage
|
|
|
|
/// @code
|
|
|
|
/// void ExampleAIModule::onStart()
|
|
|
|
/// {
|
|
|
|
/// if ( BWAPI::Broodwar->self() )
|
|
|
|
/// BWAPI::Broodwar->sendText("Hello, my name is %s.", BWAPI::Broodwar->self()->getName().c_str());
|
|
|
|
/// }
|
|
|
|
/// @endcode
|
|
|
|
virtual Player self() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the Player interface that represents the enemy player.</summary> If
|
|
|
|
/// there is more than one enemy, and that enemy is destroyed, then this function will still
|
|
|
|
/// retrieve the same, defeated enemy. If you wish to handle multiple opponents, see the
|
|
|
|
/// Game::enemies function.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Player interface representing an enemy player.
|
|
|
|
/// @retval nullptr If there is no enemy or the current game is a replay.
|
|
|
|
/// @see enemies
|
|
|
|
virtual Player enemy() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the Player interface object representing the neutral player.</summary>
|
|
|
|
/// The neutral player owns all the resources and critters on the map by default.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Player interface indicating the neutral player.
|
|
|
|
virtual Player neutral() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves a set of all the current player's remaining allies.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Playerset containing all allied players.
|
|
|
|
virtual Playerset& allies() = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves a set of all the current player's remaining enemies.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Playerset containing all enemy players.
|
|
|
|
virtual Playerset& enemies() = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves a set of all players currently observing the game.</summary> An observer
|
|
|
|
/// is defined typically in a @UMS game type as not having any impact on the game. This means
|
|
|
|
/// an observer cannot start with any units, and cannot have any active trigger actions that
|
2014-11-13 12:17:06 -05:00
|
|
|
/// create units for it.
|
|
|
|
///
|
|
|
|
/// @returns Playerset containing all currently active observer players
|
|
|
|
virtual Playerset& observers() = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// @name Debugging Members
|
|
|
|
/// @{
|
|
|
|
|
|
|
|
/// <summary>Sets the size of the text for all calls to drawText following this one.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="size"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The size of the text. This value is one of Text::Size::Enum. If this value is omitted,
|
|
|
|
/// then a default value of Text::Size::Default is used.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// Example usage
|
|
|
|
/// @code
|
|
|
|
/// void ExampleAIModule::onFrame()
|
|
|
|
/// {
|
|
|
|
/// // Centers the name of the player in the upper middle of the screen
|
|
|
|
/// BWAPI::Broodwar->setTextSize(BWAPI::Text::Size::Large);
|
|
|
|
/// BWAPI::Broodwar->drawTextScreen(BWAPI::Positions::Origin, "%c%c%s",
|
|
|
|
/// BWAPI::Text::Align_Center,
|
|
|
|
/// BWAPI::Text::Green,
|
|
|
|
/// BWAPI::Broodwar->self()->getName().c_str() );
|
|
|
|
/// BWAPI::Broodwar->setTextSize(); // Set text size back to default
|
|
|
|
/// }
|
|
|
|
/// @endcode
|
|
|
|
/// @see Text::Size::Enum
|
|
|
|
virtual void setTextSize(Text::Size::Enum size = Text::Size::Default) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Draws text on the screen at the given coordinates.</summary> Text can be drawn in
|
|
|
|
/// different colors or formatted using the Text::Enum members.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="ctype">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The coordinate type. Indicates the relative position to draw the shape.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="x">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="y">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="format">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The string formatting portion. This is the same as printf style formatting.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="arg">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// Arglist containing the intermediate list of arguments to format before finally sending
|
|
|
|
/// the string to Broodwar.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual void vDrawText(CoordinateType::Enum ctype, int x, int y, const char *format, va_list arg) = 0;
|
|
|
|
/// @overload
|
|
|
|
void drawText(CoordinateType::Enum ctype, int x, int y, const char *format, ...);
|
|
|
|
/// @overload
|
|
|
|
void drawTextMap(int x, int y, const char *format, ...);
|
|
|
|
/// @overload
|
|
|
|
void drawTextMap(Position p, const char *format, ...);
|
|
|
|
/// @overload
|
|
|
|
void drawTextMouse(int x, int y, const char *format, ...);
|
|
|
|
/// @overload
|
|
|
|
void drawTextMouse(Position p, const char *format, ...);
|
|
|
|
/// @overload
|
|
|
|
void drawTextScreen(int x, int y, const char *format, ...);
|
|
|
|
/// @overload
|
|
|
|
void drawTextScreen(Position p, const char *format, ...);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Draws a rectangle on the screen with the given color.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="ctype">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The coordinate type. Indicates the relative position to draw the shape.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="left">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate, in pixels, relative to ctype, of the left edge of the rectangle.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="top">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate, in pixels, relative to ctype, of the top edge of the rectangle.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="right">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate, in pixels, relative to ctype, of the right edge of the rectangle.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="bottom">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate, in pixels, relative to ctype, of the bottom edge of the rectangle.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="color">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The color of the rectangle.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="isSolid"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// If true, then the shape will be filled and drawn as a solid, otherwise it will be drawn
|
|
|
|
/// as an outline. If omitted, this value will default to false.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual void drawBox(CoordinateType::Enum ctype, int left, int top, int right, int bottom, Color color, bool isSolid = false) = 0;
|
|
|
|
/// @overload
|
|
|
|
void drawBoxMap(int left, int top, int right, int bottom, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawBoxMap(Position leftTop, Position rightBottom, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawBoxMouse(int left, int top, int right, int bottom, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawBoxMouse(Position leftTop, Position rightBottom, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawBoxScreen(int left, int top, int right, int bottom, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawBoxScreen(Position leftTop, Position rightBottom, Color color, bool isSolid = false);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Draws a triangle on the screen with the given color.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="ctype">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The coordinate type. Indicates the relative position to draw the shape.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="ax">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate, in pixels, relative to ctype, of the first point.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="ay">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate, in pixels, relative to ctype, of the first point.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="bx">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate, in pixels, relative to ctype, of the second point.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="by">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate, in pixels, relative to ctype, of the second point.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="cx">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate, in pixels, relative to ctype, of the third point.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="cy">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate, in pixels, relative to ctype, of the third point.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="color">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The color of the triangle.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="isSolid"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// If true, then the shape will be filled and drawn as a solid, otherwise it will be drawn
|
|
|
|
/// as an outline. If omitted, this value will default to false.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual void drawTriangle(CoordinateType::Enum ctype, int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false) = 0;
|
|
|
|
/// @overload
|
|
|
|
void drawTriangleMap(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawTriangleMap(Position a, Position b, Position c, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawTriangleMouse(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawTriangleMouse(Position a, Position b, Position c, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawTriangleScreen(int ax, int ay, int bx, int by, int cx, int cy, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawTriangleScreen(Position a, Position b, Position c, Color color, bool isSolid = false);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Draws a circle on the screen with the given color.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="ctype">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The coordinate type. Indicates the relative position to draw the shape.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="x">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="y">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="radius">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The radius of the circle, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="color">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The color of the circle.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="isSolid"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// If true, then the shape will be filled and drawn as a solid, otherwise it will be drawn
|
|
|
|
/// as an outline. If omitted, this value will default to false.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual void drawCircle(CoordinateType::Enum ctype, int x, int y, int radius, Color color, bool isSolid = false) = 0;
|
|
|
|
/// @overload
|
|
|
|
void drawCircleMap(int x, int y, int radius, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawCircleMap(Position p, int radius, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawCircleMouse(int x, int y, int radius, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawCircleMouse(Position p, int radius, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawCircleScreen(int x, int y, int radius, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawCircleScreen(Position p, int radius, Color color, bool isSolid = false);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Draws an ellipse on the screen with the given color.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="ctype">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The coordinate type. Indicates the relative position to draw the shape.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="x">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="y">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="xrad">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x radius of the ellipse, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="yrad">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y radius of the ellipse, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="color">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The color of the ellipse.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="isSolid"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// If true, then the shape will be filled and drawn as a solid, otherwise it will be drawn
|
|
|
|
/// as an outline. If omitted, this value will default to false.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual void drawEllipse(CoordinateType::Enum ctype, int x, int y, int xrad, int yrad, Color color, bool isSolid = false) = 0;
|
|
|
|
/// @overload
|
|
|
|
void drawEllipseMap(int x, int y, int xrad, int yrad, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawEllipseMap(Position p, int xrad, int yrad, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawEllipseMouse(int x, int y, int xrad, int yrad, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawEllipseMouse(Position p, int xrad, int yrad, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawEllipseScreen(int x, int y, int xrad, int yrad, Color color, bool isSolid = false);
|
|
|
|
/// @overload
|
|
|
|
void drawEllipseScreen(Position p, int xrad, int yrad, Color color, bool isSolid = false);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Draws a dot on the map or screen with a given color.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="ctype">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The coordinate type. Indicates the relative position to draw the shape.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="x">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="y">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="color">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The color of the dot.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual void drawDot(CoordinateType::Enum ctype, int x, int y, Color color) = 0;
|
|
|
|
/// @overload
|
|
|
|
void drawDotMap(int x, int y, Color color);
|
|
|
|
/// @overload
|
|
|
|
void drawDotMap(Position p, Color color);
|
|
|
|
/// @overload
|
|
|
|
void drawDotMouse(int x, int y, Color color);
|
|
|
|
/// @overload
|
|
|
|
void drawDotMouse(Position p, Color color);
|
|
|
|
/// @overload
|
|
|
|
void drawDotScreen(int x, int y, Color color);
|
|
|
|
/// @overload
|
|
|
|
void drawDotScreen(Position p, Color color);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Draws a line on the map or screen with a given color.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="ctype">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The coordinate type. Indicates the relative position to draw the shape.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="x1">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The starting x coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="y1">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The starting y coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="x2">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The ending x coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="y2">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The ending y coordinate, in pixels, relative to ctype.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="color">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The color of the line.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual void drawLine(CoordinateType::Enum ctype, int x1, int y1, int x2, int y2, Color color) = 0;
|
|
|
|
/// @overload
|
|
|
|
void drawLineMap(int x1, int y1, int x2, int y2, Color color);
|
|
|
|
/// @overload
|
|
|
|
void drawLineMap(Position a, Position b, Color color);
|
|
|
|
/// @overload
|
|
|
|
void drawLineMouse(int x1, int y1, int x2, int y2, Color color);
|
|
|
|
/// @overload
|
|
|
|
void drawLineMouse(Position a, Position b, Color color);
|
|
|
|
/// @overload
|
|
|
|
void drawLineScreen(int x1, int y1, int x2, int y2, Color color);
|
|
|
|
/// @overload
|
|
|
|
void drawLineScreen(Position a, Position b, Color color);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// @}
|
|
|
|
|
|
|
|
/// <summary>Retrieves the maximum delay, in number of frames, between a command being issued
|
|
|
|
/// and the command being executed by Broodwar.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note In Broodwar, latency is used to keep the game synchronized between players without
|
|
|
|
/// introducing lag.
|
|
|
|
///
|
|
|
|
/// @returns Difference in frames between commands being sent and executed.
|
|
|
|
/// @see getLatencyTime, getRemainingLatencyFrames
|
|
|
|
virtual int getLatencyFrames() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the maximum delay, in milliseconds, between a command being issued and
|
|
|
|
/// the command being executed by Broodwar.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Difference in milliseconds between commands being sent and executed.
|
|
|
|
/// @see getLatencyFrames, getRemainingLatencyTime
|
|
|
|
virtual int getLatencyTime() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the number of frames it will take before a command sent in the current
|
|
|
|
/// frame will be executed by the game.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Number of frames until a command is executed if it were sent in the current
|
|
|
|
/// frame.
|
|
|
|
/// @see getRemainingLatencyTime, getLatencyFrames
|
|
|
|
virtual int getRemainingLatencyFrames() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the number of milliseconds it will take before a command sent in the
|
|
|
|
/// current frame will be executed by Broodwar.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Amount of time, in milliseconds, until a command is executed if it were sent in
|
|
|
|
/// the current frame.
|
|
|
|
/// @see getRemainingLatencyFrames, getLatencyTime
|
|
|
|
virtual int getRemainingLatencyTime() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the current revision of BWAPI.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns The revision number of the current BWAPI interface.
|
|
|
|
///
|
|
|
|
/// @threadsafe
|
|
|
|
virtual int getRevision() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the debug state of the BWAPI build.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true if the BWAPI module is a DEBUG build, and false if it is a RELEASE build.
|
|
|
|
///
|
|
|
|
/// @threadsafe
|
|
|
|
virtual bool isDebug() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks the state of latency compensation.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns true if latency compensation is enabled, false if it is disabled.
|
|
|
|
/// @see setLatCom
|
|
|
|
virtual bool isLatComEnabled() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Changes the state of latency compensation.</summary> Latency compensation
|
|
|
|
/// modifies the state of BWAPI's representation of units to reflect the implications of
|
|
|
|
/// issuing a command immediately after the command was performed, instead of waiting
|
|
|
|
/// consecutive frames for the results. Latency compensation is enabled by default.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="isEnabled">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// Set whether the latency compensation feature will be enabled (true) or disabled (false).
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @see isLatComEnabled.
|
|
|
|
virtual void setLatCom(bool isEnabled) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if the GUI is enabled.</summary> The GUI includes all drawing functions of
|
|
|
|
/// BWAPI, as well as screen updates from Broodwar.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @retval true If the GUI is enabled, and everything is visible
|
|
|
|
/// @retval false If the GUI is disabled and drawing functions are rejected
|
|
|
|
///
|
|
|
|
/// @see setGUI
|
|
|
|
virtual bool isGUIEnabled() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Sets the rendering state of the Starcraft GUI.</summary> This typically gives
|
|
|
|
/// Starcraft a very low graphical frame rate and disables all drawing functionality in BWAPI.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="enabled">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A boolean value that determines the state of the GUI. Passing false to this function
|
|
|
|
/// will disable the GUI, and true will enable it.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// Example Usage:
|
|
|
|
/// @code
|
|
|
|
/// void ExampleAIModule::onStart()
|
|
|
|
/// { // Make our bot run thousands of games as fast as possible!
|
|
|
|
/// Broodwar->setLocalSpeed(0);
|
|
|
|
/// Broodwar->setGUI(false);
|
|
|
|
/// }
|
|
|
|
/// @endcode
|
|
|
|
///
|
|
|
|
/// @see isGUIEnabled
|
|
|
|
virtual void setGUI(bool enabled) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the Starcraft instance number recorded by BWAPI to identify which
|
|
|
|
/// Starcraft instance an AI module belongs to.</summary> The very first instance should
|
|
|
|
/// return 0.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns
|
|
|
|
/// An integer value representing the instance number.
|
|
|
|
///
|
|
|
|
/// @threadsafe
|
|
|
|
virtual int getInstanceNumber() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the Actions Per Minute (APM) that the bot is producing.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="includeSelects"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// If true, the return value will include selections as individual commands, otherwise
|
|
|
|
/// it will exclude selections. This value is false by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns The number of actions that the bot has executed per minute, on average.
|
|
|
|
virtual int getAPM(bool includeSelects = false) const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Changes the map to the one specified.</summary> Once restarted, the game will
|
|
|
|
/// load the map that was provided. Changes do not take effect unless the game is restarted.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="mapFileName">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A string containing the path and file name to the desired map.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @retval true if the function succeeded and has changed the map.
|
|
|
|
/// @retval false if the function failed, does not have permission from the tournament module,
|
|
|
|
/// failed to find the map specified, or received an invalid parameter.
|
|
|
|
virtual bool setMap(const char *mapFileName) = 0;
|
|
|
|
/// @overload
|
|
|
|
bool setMap(const std::string &mapFileName);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Sets the number of graphical frames for every logical frame.</summary> This
|
|
|
|
/// allows the game to run more logical frames per graphical frame, increasing the speed at
|
|
|
|
/// which the game runs.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="frameSkip">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// Number of graphical frames per logical frame. If this value is 0 or less, then it will
|
|
|
|
/// default to 1.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2015-02-07 12:16:07 -05:00
|
|
|
///
|
|
|
|
/// @see setLocalSpeed
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual void setFrameSkip(int frameSkip) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Checks if there is a path from source to destination.</summary> This only checks
|
|
|
|
/// if the source position is connected to the destination position. This function does not
|
|
|
|
/// check if all units can actually travel from source to destination. Because of this
|
|
|
|
/// limitation, it has an O(1) complexity, and cases where this limitation hinders gameplay is
|
|
|
|
/// uncommon at best.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="source">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The source position.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="destination">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The destination position.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @retval true if there is a path between the two positions
|
|
|
|
/// @retval false if there is no path
|
2015-02-07 12:16:07 -05:00
|
|
|
bool hasPath(Position source, Position destination) const;
|
2014-11-13 12:17:06 -05:00
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Sets the alliance state of the current player with the target player.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="player">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The target player to set alliance with.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="allied"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// If true, the current player will ally the target player. If false, the current player
|
|
|
|
/// will make the target player an enemy. This value is true by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="alliedVictory"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// Sets the state of "allied victory". If true, the game will end in a victory if all
|
|
|
|
/// allied players have eliminated their opponents. Otherwise, the game will only end if
|
|
|
|
/// no other players are remaining in the game. This value is true by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual bool setAlliance(BWAPI::Player player, bool allied = true, bool alliedVictory = true) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>In a game, this function sets the vision of the current BWAPI player with the
|
|
|
|
/// target player.</summary> In a replay, this function toggles the visibility of the target
|
|
|
|
/// player.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="player">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The target player to toggle vision.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="enabled"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The vision state. If true, and in a game, the current player will enable shared vision
|
|
|
|
/// with the target player, otherwise it will unshare vision. If in a replay, the vision
|
|
|
|
/// of the target player will be shown, otherwise the target player will be hidden. This
|
|
|
|
/// value is true by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual bool setVision(BWAPI::Player player, bool enabled = true) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves current amount of time in seconds that the game has elapsed.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Time, in seconds, that the game has elapsed as an integer.
|
2016-02-28 08:49:15 -05:00
|
|
|
virtual int elapsedTime() const = 0;
|
|
|
|
|
|
|
|
/// <summary>Sets the command optimization level.</summary> Command optimization is a feature
|
|
|
|
/// in BWAPI that tries to reduce the APM of the bot by grouping or eliminating unnecessary
|
|
|
|
/// game actions. For example, suppose the bot told 24 @Zerglings to @Burrow. At command
|
|
|
|
/// optimization level 0, BWAPI is designed to select each Zergling to burrow individually,
|
|
|
|
/// which costs 48 actions. With command optimization level 1, it can perform the same
|
|
|
|
/// behaviour using only 4 actions. The command optimizer also reduces the amount of bytes used
|
|
|
|
/// for each action if it can express the same action using a different command. For example,
|
|
|
|
/// Right_Click uses less bytes than Move.
|
|
|
|
///
|
|
|
|
/// <param name="level">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// An integer representation of the aggressiveness for which commands are optimized. A
|
2016-02-28 08:49:15 -05:00
|
|
|
/// lower level means less optimization, and a higher level means more optimization.
|
|
|
|
/// </param>
|
|
|
|
///
|
|
|
|
/// The values for \p level are as follows:
|
2014-11-13 12:17:06 -05:00
|
|
|
/// - 0: No optimization.
|
|
|
|
/// - 1: Some optimization.
|
|
|
|
/// - Is not detected as a hack.
|
|
|
|
/// - Does not alter behaviour.
|
|
|
|
/// - Units performing the following actions are grouped and ordered 12 at a time:
|
|
|
|
/// - Attack_Unit
|
|
|
|
/// - Morph (@Larva only)
|
|
|
|
/// - Hold_Position
|
|
|
|
/// - Stop
|
|
|
|
/// - Follow
|
|
|
|
/// - Gather
|
|
|
|
/// - Return_Cargo
|
|
|
|
/// - Repair
|
|
|
|
/// - Burrow
|
|
|
|
/// - Unburrow
|
|
|
|
/// - Cloak
|
|
|
|
/// - Decloak
|
|
|
|
/// - Siege
|
|
|
|
/// - Unsiege
|
|
|
|
/// - Right_Click_Unit
|
|
|
|
/// - Halt_Construction
|
|
|
|
/// - Cancel_Train (@Carrier and @Reaver only)
|
|
|
|
/// - Cancel_Train_Slot (@Carrier and @Reaver only)
|
|
|
|
/// - Cancel_Morph (for non-buildings only)
|
|
|
|
/// - Use_Tech
|
|
|
|
/// - Use_Tech_Unit
|
|
|
|
/// .
|
|
|
|
/// - The following order transformations are applied to allow better grouping:
|
|
|
|
/// - Attack_Unit becomes Right_Click_Unit if the target is an enemy
|
|
|
|
/// - Move becomes Right_Click_Position
|
|
|
|
/// - Gather becomes Right_Click_Unit if the target contains resources
|
|
|
|
/// - Set_Rally_Position becomes Right_Click_Position for buildings
|
|
|
|
/// - Set_Rally_Unit becomes Right_Click_Unit for buildings
|
|
|
|
/// - Use_Tech_Unit with Infestation becomes Right_Click_Unit if the target is valid
|
|
|
|
/// .
|
|
|
|
/// .
|
|
|
|
/// - 2: More optimization by grouping structures.
|
|
|
|
/// - Includes the optimizations made by all previous levels.
|
|
|
|
/// - May be detected as a hack by some replay utilities.
|
|
|
|
/// - Does not alter behaviour.
|
|
|
|
/// - Units performing the following actions are grouped and ordered 12 at a time:
|
|
|
|
/// - Attack_Unit (@Turrets, @Photon_Cannons, @Sunkens, @Spores)
|
|
|
|
/// - Train
|
|
|
|
/// - Morph
|
|
|
|
/// - Set_Rally_Unit
|
|
|
|
/// - Lift
|
|
|
|
/// - Cancel_Construction
|
|
|
|
/// - Cancel_Addon
|
|
|
|
/// - Cancel_Train
|
|
|
|
/// - Cancel_Train_Slot
|
|
|
|
/// - Cancel_Morph
|
|
|
|
/// - Cancel_Research
|
|
|
|
/// - Cancel_Upgrade
|
|
|
|
/// .
|
|
|
|
/// .
|
|
|
|
/// - 3: Extensive optimization
|
|
|
|
/// - Includes the optimizations made by all previous levels.
|
|
|
|
/// - Units may behave or move differently than expected.
|
|
|
|
/// - Units performing the following actions are grouped and ordered 12 at a time:
|
|
|
|
/// - Attack_Move
|
|
|
|
/// - Set_Rally_Position
|
|
|
|
/// - Move
|
|
|
|
/// - Patrol
|
|
|
|
/// - Unload_All
|
|
|
|
/// - Unload_All_Position
|
|
|
|
/// - Right_Click_Position
|
|
|
|
/// - Use_Tech_Position
|
|
|
|
/// .
|
|
|
|
/// .
|
|
|
|
/// - 4: Aggressive optimization
|
|
|
|
/// - Includes the optimizations made by all previous levels.
|
|
|
|
/// - Positions used in commands will be rounded to multiples of 32.
|
|
|
|
/// - @High_Templar and @Dark_Templar that merge into @Archons will be grouped and may
|
|
|
|
/// choose a different target to merge with. It will not merge with a target that
|
|
|
|
/// wasn't included.
|
|
|
|
/// .
|
|
|
|
/// .
|
|
|
|
///
|
|
|
|
virtual void setCommandOptimizationLevel(int level) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Returns the remaining countdown time.</summary> The countdown timer is used in
|
|
|
|
/// @CTF and @UMS game types.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// Example usage:
|
|
|
|
/// @code
|
|
|
|
/// void ExampleAIModule::onStart()
|
|
|
|
/// {
|
|
|
|
/// // Register a callback that only occurs once when the countdown timer reaches 0
|
|
|
|
/// if ( BWAPI::Broodwar->getGameType() == BWAPI::GameTypes::Capture_The_Flag ||
|
|
|
|
/// BWAPI::Broodwar->getGameType() == BWAPI::GameTypes::Team_Capture_The_Flag )
|
|
|
|
/// {
|
|
|
|
/// BWAPI::Broodwar->registerEvent([](BWAPI::Game*){ BWAPI::Broodwar->sendText("Try to find my flag!"); }, // action
|
|
|
|
/// [](BWAPI::Game*){ return BWAPI::Broodwar->countdownTimer() == 0; }, // condition
|
|
|
|
/// 1); // times to run (once)
|
|
|
|
/// }
|
|
|
|
/// }
|
|
|
|
/// @endcode
|
|
|
|
///
|
|
|
|
/// @returns Integer containing the time (in game seconds) on the countdown timer.
|
|
|
|
virtual int countdownTimer() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the set of all regions on the map.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Regionset containing all map regions.
|
|
|
|
virtual const Regionset &getAllRegions() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the region at a given position.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="x">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The x coordinate, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="y">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The y coordinate, in pixels.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns Pointer to the Region interface at the given position.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// @retval nullptr if the provided position is not valid (i.e. not within the map bounds).
|
|
|
|
///
|
|
|
|
/// @note If the provided position is invalid, the error Errors::Invalid_Parameter is set.
|
|
|
|
/// @see getAllRegions, getRegion
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual BWAPI::Region getRegionAt(int x, int y) const = 0;
|
|
|
|
/// @overload
|
|
|
|
BWAPI::Region getRegionAt(BWAPI::Position position) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves the amount of time (in milliseconds) that has elapsed when running the last AI
|
|
|
|
/// module callback.</summary> This is used by tournament modules to penalize AI modules that use too
|
2014-11-13 12:17:06 -05:00
|
|
|
/// much processing time.
|
|
|
|
///
|
|
|
|
/// @retval 0 When called from an AI module.
|
|
|
|
/// @returns Time in milliseconds spent in last AI module call.
|
|
|
|
virtual int getLastEventTime() const = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Sets the state of the fog of war when watching a replay.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="reveal"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The state of the reveal all flag. If false, all fog of war will be enabled. If true,
|
|
|
|
/// then the fog of war will be revealed. It is true by default.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
virtual bool setRevealAll(bool reveal = true) = 0;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Retrieves a basic build position just as the default Computer AI would.</summary>
|
|
|
|
/// This allows users to find simple build locations without relying on external libraries.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="type">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A valid UnitType representing the unit type to accomodate space for.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="desiredPosition">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A valid TilePosition containing the desired placement position.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="maxRange"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The maximum distance (in tiles) to build from \p desiredPosition.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="creep"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// A special boolean value that changes the behaviour of @Creep_Colony placement.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @retval TilePositions::Invalid If a build location could not be found within \p maxRange.
|
|
|
|
/// @returns
|
|
|
|
/// A TilePosition containing the location that the structure should be constructed at.
|
|
|
|
TilePosition getBuildLocation(UnitType type, TilePosition desiredPosition, int maxRange = 64, bool creep = false) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Calculates the damage received for a given player.</summary> It can be understood
|
|
|
|
/// as the damage from \p fromType to \p toType. Does not include shields in calculation.
|
|
|
|
/// Includes upgrades if players are provided.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="fromType">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The unit type that will be dealing the damage.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="toType">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The unit type that will be receiving the damage.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="fromPlayer"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The player owner of the given type that will be dealing the damage. If omitted, then
|
|
|
|
/// no player will be used to calculate the upgrades for \p fromType.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="toPlayer"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The player owner of the type that will be receiving the damage. If omitted, then this
|
|
|
|
/// parameter will default to Broodwar->self().
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns The amount of damage that fromType would deal to toType.
|
|
|
|
/// @see getDamageTo
|
|
|
|
int getDamageFrom(UnitType fromType, UnitType toType, Player fromPlayer = nullptr, Player toPlayer = nullptr) const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Calculates the damage dealt for a given player.</summary> It can be understood as
|
|
|
|
/// the damage to \p toType from \p fromType. Does not include shields in calculation.
|
|
|
|
/// Includes upgrades if players are provided.
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @note This function is nearly the same as #getDamageFrom. The only difference is that
|
|
|
|
/// the last parameter is intended to default to Broodwar->self().
|
|
|
|
///
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <param name="toType">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The unit type that will be receiving the damage.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="fromType">
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The unit type that will be dealing the damage.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="toPlayer"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The player owner of the type that will be receiving the damage. If omitted, then
|
|
|
|
/// no player will be used to calculate the upgrades for \p toType.
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
|
|
|
/// <param name="fromPlayer"> (optional)
|
2014-11-13 12:17:06 -05:00
|
|
|
/// The player owner of the given type that will be dealing the damage. If omitted, then
|
|
|
|
/// this parameter will default to Broodwar->self().
|
2016-02-28 08:49:15 -05:00
|
|
|
/// </param>
|
2014-11-13 12:17:06 -05:00
|
|
|
///
|
|
|
|
/// @returns The amount of damage that fromType would deal to toType.
|
|
|
|
/// @see getDamageFrom
|
|
|
|
int getDamageTo(UnitType toType, UnitType fromType, Player toPlayer = nullptr, Player fromPlayer = nullptr) const;
|
|
|
|
};
|
|
|
|
|
|
|
|
extern Game *BroodwarPtr;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Broodwar wrapper
|
2014-11-13 12:17:06 -05:00
|
|
|
class GameWrapper
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
std::ostringstream ss;
|
|
|
|
public:
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Definition of ostream_manipulator type for convenience.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
typedef std::ostream& (*ostream_manipulator)(std::ostream&);
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Member access operator to retain the original Broodwar-> behaviour.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
Game *operator ->() const;
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Output stream operator for printing text to Broodwar.</summary> Using this
|
|
|
|
/// operator invokes Game::printf when a newline character is encountered.
|
2014-11-13 12:17:06 -05:00
|
|
|
template < class T >
|
2015-02-07 12:16:07 -05:00
|
|
|
inline GameWrapper &operator <<(const T &in)
|
2014-11-13 12:17:06 -05:00
|
|
|
{
|
|
|
|
// Pass whatever into the stream
|
|
|
|
ss << in;
|
|
|
|
return *this;
|
|
|
|
};
|
|
|
|
/// @overload
|
2015-02-07 12:16:07 -05:00
|
|
|
GameWrapper &operator <<(ostream_manipulator fn);
|
2014-11-13 12:17:06 -05:00
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>Flushes the Broodwar stream, printing all text in the stream to the screen.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
void flush();
|
|
|
|
};
|
|
|
|
|
2016-02-28 08:49:15 -05:00
|
|
|
/// <summary>The primary Game interface, used to access any Game information or perform Game
|
|
|
|
/// actions.</summary>
|
2014-11-13 12:17:06 -05:00
|
|
|
extern GameWrapper Broodwar;
|
|
|
|
|
|
|
|
}
|
|
|
|
|