SC2API
An API for AI for StarCraft II
sc2_gametypes.h
Go to the documentation of this file.
1 
4 #pragma once
5 
6 #include <vector>
7 #include <string>
8 
9 #include "sc2_common.h"
10 
11 namespace sc2 {
12 
13 typedef uint64_t Tag;
14 static const Tag NullTag = 0LL;
15 
16 enum Race {
17  Terran,
18  Zerg,
19  Protoss,
20  Random
21 };
22 
23 enum GameResult {
24  Win,
25  Loss,
26  Tie,
27  Undecided
28 };
29 
30 enum Difficulty {
31  VeryEasy = 1,
32  Easy = 2,
33  Medium = 3,
34  MediumHard = 4,
35  Hard = 5,
36  HardVeryHard = 6,
37  VeryHard = 7,
38  CheatVision = 8,
39  CheatMoney = 9,
40  CheatInsane = 10
41 };
42 
43 enum PlayerType {
44  Participant = 1,
45  Computer = 2,
46  Observer = 3
47 };
48 
49 enum AIBuild {
50  RandomBuild = 1,
51  Rush = 2,
52  Timing = 3,
53  Power = 4,
54  Macro = 5,
55  Air = 6
56 };
57 
58 enum class ChatChannel {
59  All = 0,
60  Team = 1
61 };
62 
63 class Agent;
64 
66 struct PlayerSetup {
68  PlayerType type;
72  std::string player_name;
73 
74  // Only used for Computer
75 
77  Race race;
79  Difficulty difficulty;
81  AIBuild ai_build;
82 
83  PlayerSetup():
84  type(Participant),
85  agent(nullptr),
86  race(Terran),
87  difficulty(Easy),
88  ai_build(RandomBuild) {
89  };
90 
91  PlayerSetup(PlayerType in_type, Race in_race, Agent* in_agent = nullptr,
92  const std::string& in_player_name = "",
93  Difficulty in_difficulty = Easy, AIBuild in_ai_build = RandomBuild):
94  type(in_type),
95  agent(in_agent),
96  player_name(in_player_name),
97  race(in_race),
98  difficulty(in_difficulty),
99  ai_build(in_ai_build) {
100  }
101 };
102 
103 static inline PlayerSetup CreateParticipant(
104  Race race, Agent* agent, const std::string& player_name = "") {
105  return PlayerSetup(PlayerType::Participant, race, agent, player_name);
106 }
107 
108 static inline PlayerSetup CreateComputer(
109  Race race, Difficulty difficulty = Easy, AIBuild ai_build = RandomBuild,
110  const std::string& player_name = "") {
111  return PlayerSetup(PlayerType::Computer, race, nullptr, player_name, difficulty, ai_build);
112 }
113 
115 struct PortSet {
116  int game_port;
117  int base_port;
118 
119  PortSet() :
120  game_port(-1),
121  base_port(-1) {
122  }
123 
124  bool IsValid() const {
125  return game_port > 0 && base_port > 0;
126  }
127 };
128 
130 struct Ports {
131  PortSet server_ports;
132  std::vector<PortSet> client_ports;
133  int shared_port;
134 
135  Ports() :
136  shared_port(-1) {
137  }
138 
139  bool IsValid() const {
140  if (shared_port < 1)
141  return false;
142  if (!server_ports.IsValid())
143  return false;
144  if (client_ports.size() < 1)
145  return false;
146  for (std::size_t i = 0; i < client_ports.size(); ++i)
147  if (!client_ports[i].IsValid())
148  return false;
149 
150  return true;
151  }
152 };
153 
154 static const int max_path_size = 512;
155 static const int max_version_size = 32;
156 static const int max_num_players = 16;
157 
163  int mmr;
165  int apm;
167  Race race;
171  GameResult game_result;
172 
173  ReplayPlayerInfo() :
174  player_id(0),
175  mmr(-10000),
176  apm(0),
177  race(Random),
178  race_selected(Random) {
179  }
180 };
181 
183 struct ReplayInfo {
184  float duration;
185  unsigned int duration_gameloops;
186  int32_t num_players;
187  uint32_t data_build;
188  uint32_t base_build;
189  std::string map_name;
190  std::string map_path;
191  std::string replay_path;
192  std::string version;
193  std::string data_version;
194  ReplayPlayerInfo players[max_num_players];
195 
196  ReplayInfo() :
197  duration(0.0f),
198  duration_gameloops(0),
199  num_players(0),
200  data_build(0),
201  base_build(0) {
202  }
203 
204  bool GetPlayerInfo(ReplayPlayerInfo& replay_player_info, int playerID) const {
205  for (int i = 0; i < num_players; ++i) {
206  if (playerID == players[i].player_id) {
207  replay_player_info = players[i];
208  return true;
209  }
210  }
211 
212  return false;
213  }
214 
215  float GetGameloopsPerSecond() const {
216  return float(duration_gameloops) / duration;
217  }
218 };
219 
220 struct PlayerResult {
221  PlayerResult(uint32_t player_id, GameResult result) : player_id(player_id), result(result) {};
222 
223  uint32_t player_id;
224  GameResult result;
225 };
226 
227 struct ChatMessage {
228  uint32_t player_id;
229  std::string message;
230 };
231 
232 }
Race race_selected
Selected player race. If the race is "Random", the race data member may be different.
Definition: sc2_gametypes.h:169
Common data types, including points, rectangles and colors.
Definition: sc2_gametypes.h:220
int apm
Player actions per minute.
Definition: sc2_gametypes.h:165
Information about a replay file.
Definition: sc2_gametypes.h:183
Definition: sc2_action.h:9
Port setup for one or more clients in a game.
Definition: sc2_gametypes.h:130
Difficulty difficulty
Difficulty: Only for playing against the built-in AI.
Definition: sc2_gametypes.h:79
Port setup for a client.
Definition: sc2_gametypes.h:115
Information about a player in a replay.
Definition: sc2_gametypes.h:159
GameResult game_result
If the player won or lost.
Definition: sc2_gametypes.h:171
int player_id
Player ID.
Definition: sc2_gametypes.h:161
Agent * agent
Agent, if one is available.
Definition: sc2_gametypes.h:70
int mmr
Player ranking.
Definition: sc2_gametypes.h:163
Race race
Race: Terran, Zerg or Protoss. Only for playing against the built-in AI.
Definition: sc2_gametypes.h:77
Setup for a player in a game.
Definition: sc2_gametypes.h:66
Definition: sc2_gametypes.h:227
AIBuild ai_build
Build type, used by computer opponent.
Definition: sc2_gametypes.h:81
PlayerType type
Player can be a Participant (usually an agent), Computer (in-built AI) or Observer.
Definition: sc2_gametypes.h:68
std::string player_name
Name of this player.
Definition: sc2_gametypes.h:72
The base class for user defined bots.
Definition: sc2_agent.h:22
Race race
Actual player race.
Definition: sc2_gametypes.h:167