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 class Agent;
50 
52 struct PlayerSetup {
54  PlayerType type;
57 
58  // Only used for Computer
59 
61  Race race;
63  Difficulty difficulty;
64 
65  PlayerSetup() :
66  type(Participant),
67  agent(nullptr),
68  race(Terran),
69  difficulty(Easy) {
70  };
71 
72  PlayerSetup(PlayerType in_type, Race in_race, Agent* in_agent = nullptr, Difficulty in_difficulty = Easy) :
73  type(in_type),
74  agent(in_agent),
75  race(in_race),
76  difficulty(in_difficulty) {
77 
78  }
79 };
80 
81 static inline PlayerSetup CreateParticipant(Race race, Agent* agent) {
82  return PlayerSetup(PlayerType::Participant, race, agent);
83 }
84 
85 static inline PlayerSetup CreateComputer(Race race, Difficulty difficulty = Easy) {
86  return PlayerSetup(PlayerType::Computer, race, nullptr, difficulty);
87 }
88 
90 struct PortSet {
91  int game_port;
92  int base_port;
93 
94  PortSet() :
95  game_port(-1),
96  base_port(-1) {
97  }
98 
99  bool IsValid() const {
100  return game_port > 0 && base_port > 0;
101  }
102 };
103 
105 struct Ports {
106  PortSet server_ports;
107  std::vector<PortSet> client_ports;
108  int shared_port;
109 
110  Ports() :
111  shared_port(-1) {
112  }
113 
114  bool IsValid() const {
115  if (shared_port < 1)
116  return false;
117  if (!server_ports.IsValid())
118  return false;
119  if (client_ports.size() < 1)
120  return false;
121  for (std::size_t i = 0; i < client_ports.size(); ++i)
122  if (!client_ports[i].IsValid())
123  return false;
124 
125  return true;
126  }
127 };
128 
129 static const int max_path_size = 512;
130 static const int max_version_size = 32;
131 static const int max_num_players = 16;
132 
138  int mmr;
140  int apm;
142  Race race;
146  GameResult game_result;
147 
148  ReplayPlayerInfo() :
149  player_id(0),
150  mmr(-10000),
151  apm(0),
152  race(Random),
153  race_selected(Random) {
154  }
155 };
156 
158 struct ReplayInfo {
159  float duration;
160  unsigned int duration_gameloops;
161  int32_t num_players;
162  uint32_t data_build;
163  uint32_t base_build;
164  std::string map_name;
165  std::string map_path;
166  std::string replay_path;
167  std::string version;
168  std::string data_version;
169  ReplayPlayerInfo players[max_num_players];
170 
171  ReplayInfo() :
172  duration(0.0f),
173  duration_gameloops(0),
174  num_players(0),
175  data_build(0),
176  base_build(0) {
177  }
178 
179  bool GetPlayerInfo(ReplayPlayerInfo& replay_player_info, int playerID) const {
180  for (int i = 0; i < num_players; ++i) {
181  if (playerID == players[i].player_id) {
182  replay_player_info = players[i];
183  return true;
184  }
185  }
186 
187  return false;
188  }
189 
190  float GetGameloopsPerSecond() const {
191  return float(duration_gameloops) / duration;
192  }
193 };
194 
195 }
Race race_selected
Selected player race. If the race is "Random", the race data member may be different.
Definition: sc2_gametypes.h:144
Common data types, including points, rectangles and colors.
int apm
Player actions per minute.
Definition: sc2_gametypes.h:140
Information about a replay file.
Definition: sc2_gametypes.h:158
Definition: sc2_action.h:9
Port setup for one or more clients in a game.
Definition: sc2_gametypes.h:105
Difficulty difficulty
Difficulty: Only for playing against the built-in AI.
Definition: sc2_gametypes.h:63
Port setup for a client.
Definition: sc2_gametypes.h:90
Information about a player in a replay.
Definition: sc2_gametypes.h:134
GameResult game_result
If the player won or lost.
Definition: sc2_gametypes.h:146
int player_id
Player ID.
Definition: sc2_gametypes.h:136
Agent * agent
Agent, if one is available.
Definition: sc2_gametypes.h:56
int mmr
Player ranking.
Definition: sc2_gametypes.h:138
Race race
Race: Terran, Zerg or Protoss. Only for playing against the built-in AI.
Definition: sc2_gametypes.h:61
Setup for a player in a game.
Definition: sc2_gametypes.h:52
PlayerType type
Player can be a Participant (usually an agent), Computer (in-built AI) or Observer.
Definition: sc2_gametypes.h:54
The base class for user defined bots.
Definition: sc2_agent.h:22
Race race
Actual player race.
Definition: sc2_gametypes.h:142