SC2API
An API for AI for StarCraft II
sc2_interfaces.h
Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include "sc2api/sc2_common.h"
12 #include "sc2api/sc2_action.h"
13 #include "sc2api/sc2_unit.h"
14 #include "sc2api/sc2_data.h"
15 
16 #include <vector>
17 
18 // Forward declarations to avoid including proto headers everywhere.
19 namespace SC2APIProtocol {
20  class Observation;
21 }
22 
23 namespace sc2 {
24 
25 enum class UNIT_TYPEID;
26 enum class ABILITY_ID;
27 
28 class ObservationInterface;
29 struct Score;
30 struct GameInfo;
31 
32 enum class Visibility {
33  Hidden = 0,
34  Fogged = 1,
35  Visible = 2,
36  FullHidden = 3
37 };
38 
44 typedef std::function<bool(const Unit& unit)> Filter;
45 
48 public:
49  virtual ~ObservationInterface() = default;
50 
53  virtual uint32_t GetPlayerID() const = 0;
54 
57  virtual uint32_t GetGameLoop() const = 0;
58 
61  virtual Units GetUnits() const = 0;
62 
68  virtual Units GetUnits(Unit::Alliance alliance, Filter filter = {}) const = 0;
69 
74  virtual Units GetUnits(Filter filter) const = 0;
75 
79  virtual const Unit* GetUnit(Tag tag) const = 0;
80 
83  virtual const RawActions& GetRawActions() const = 0;
84 
87  virtual const SpatialActions& GetFeatureLayerActions() const = 0;
88 
91  virtual const SpatialActions& GetRenderedActions() const = 0;
92 
95  virtual const std::vector<ChatMessage>& GetChatMessages() const = 0;
96 
99  virtual const std::vector<PowerSource>& GetPowerSources() const = 0;
100 
103  virtual const std::vector<Effect>& GetEffects() const = 0;
104 
107  virtual const std::vector<UpgradeID>& GetUpgrades() const = 0;
108 
111  virtual const Score& GetScore() const = 0;
112 
116  virtual const Abilities& GetAbilityData(bool force_refresh = false) const = 0;
117 
121  virtual const UnitTypes& GetUnitTypeData(bool force_refresh = false) const = 0;
122 
126  virtual const Upgrades& GetUpgradeData(bool force_refresh = false) const = 0;
127 
131  virtual const Buffs& GetBuffData(bool force_refresh = false) const = 0;
132 
136  virtual const Effects& GetEffectData(bool force_refresh = false) const = 0;
137 
140  virtual const GameInfo& GetGameInfo() const = 0;
141 
144  virtual uint32_t GetMinerals() const = 0;
145 
148  virtual uint32_t GetVespene() const = 0;
149 
153  virtual uint32_t GetFoodCap() const = 0;
154 
158  virtual uint32_t GetFoodUsed() const = 0;
159 
163  virtual uint32_t GetFoodArmy() const = 0;
164 
168  virtual uint32_t GetFoodWorkers() const = 0;
169 
172  virtual uint32_t GetIdleWorkerCount() const = 0;
173 
176  virtual uint32_t GetArmyCount() const = 0;
177 
180  virtual uint32_t GetWarpGateCount() const = 0;
181 
184  virtual uint32_t GetLarvaCount() const = 0;
185 
188  virtual Point2D GetCameraPos() const = 0;
189 
192  virtual Point3D GetStartLocation() const = 0;
193 
196  virtual const std::vector<PlayerResult>& GetResults() const = 0;
197 
201  virtual bool HasCreep(const Point2D& point) const = 0;
202 
206  virtual Visibility GetVisibility(const Point2D& point) const = 0;
207 
209  // include pathing blockers like structures. For more accurate pathing results
210  // use QueryInterface::PathingDistance.
213  virtual bool IsPathable(const Point2D& point) const = 0;
214 
216  // include blockers like other structures. For more accurate building placement
217  // results use QueryInterface::Placement.
220  virtual bool IsPlacable(const Point2D& point) const = 0;
221 
225  virtual float TerrainHeight(const Point2D& point) const = 0;
226 
228  // it is highly discouraged. It should only be used for extracting feature layers because it would be inefficient to copy these each frame.
231  virtual const SC2APIProtocol::Observation* GetRawObservation() const = 0;
232 
233 };
234 
240 public:
241  virtual ~QueryInterface() = default;
242 
248  virtual AvailableAbilities GetAbilitiesForUnit(const Unit* unit, bool ignore_resource_requirements = false, bool use_generalized_ability = true) = 0;
255  virtual std::vector<AvailableAbilities> GetAbilitiesForUnits(const Units& units, bool ignore_resource_requirements = false, bool use_generalized_ability = true) = 0;
256 
261  virtual float PathingDistance(const Point2D& start, const Point2D& end) = 0;
267  virtual float PathingDistance(const Unit* start, const Point2D& end) = 0;
268 
269  struct PathingQuery {
270  Tag start_unit_tag_ = NullTag;
271  Point2D start_;
272  Point2D end_;
273  };
275  virtual std::vector<float> PathingDistance(const std::vector<PathingQuery>& queries) = 0;
276 
284  virtual bool Placement(const AbilityID& ability, const Point2D& target_pos, const Unit* unit = nullptr) = 0;
285 
286  struct PlacementQuery {
287  PlacementQuery() = default;
288  PlacementQuery(AbilityID ability_id, Point2D target) :
289  ability(ability_id),
290  target_pos(target) {};
291 
292  AbilityID ability;
293  Point2D target_pos;
294  Tag placing_unit_tag = 0LL; // Optional. Used for testing placement with add-ons.
295  };
300  virtual std::vector<bool> Placement(const std::vector<PlacementQuery>& queries) = 0;
301 };
302 
306 public:
307  virtual ~ActionInterface() = default;
308 
317  virtual void UnitCommand(const Unit* unit, AbilityID ability, bool queued_command = false) = 0;
321 
326  virtual void UnitCommand(const Unit* unit, AbilityID ability, const Point2D& point, bool queued_command = false) = 0;
327 
332  virtual void UnitCommand(const Unit* unit, AbilityID ability, const Unit* target, bool queued_command = false) = 0;
333 
335  virtual void UnitCommand(const Units& units, AbilityID ability, bool queued_move = false) = 0;
336 
338  virtual void UnitCommand(const Units& units, AbilityID ability, const Point2D& point, bool queued_command = false) = 0;
339 
341  virtual void UnitCommand(const Units& units, AbilityID ability, const Unit* target, bool queued_command = false) = 0;
342 
346  virtual const std::vector<Tag>& Commands() const = 0;
347 
351  virtual void ToggleAutocast(Tag unit_tag, AbilityID ability) = 0;
355  virtual void ToggleAutocast(const std::vector<Tag>& unit_tags, AbilityID ability) = 0;
356 
360  virtual void SendChat(const std::string& message, ChatChannel channel = ChatChannel::All) = 0;
361 
366  virtual void SendActions() = 0;
367 };
368 
372 public:
373  virtual ~ActionFeatureLayerInterface() = default;
374 
377  virtual void UnitCommand(AbilityID ability) = 0;
378 
383  virtual void UnitCommand(AbilityID ability, const Point2DI& point, bool minimap = false) = 0;
384 
386  virtual void CameraMove(const Point2DI& center) = 0;
387 
391  virtual void Select(const Point2DI& center, PointSelectionType selection_type) = 0;
392 
397  virtual void Select(const Point2DI& p0, const Point2DI& p1, bool add_to_selection = false) = 0;
398 
401  virtual void SendActions() = 0;
402 };
403 
406 public:
407  virtual ~ObserverActionInterface () = default;
408 
413  virtual void CameraMove(const Point2D& point, float distance = 0.0f) = 0;
414 
416  virtual void CameraFollowPlayer() = 0;
417 
420  virtual void SendActions() = 0;
421 };
422 
428 public:
429  virtual ~DebugInterface() = default;
430 
431  // Debug drawing primitives.
432 
436  virtual void DebugTextOut(const std::string& out, Color color = Colors::White) = 0;
442  virtual void DebugTextOut(const std::string& out, const Point2D& pt_virtual_2D, Color color = Colors::White, uint32_t size = 8) = 0;
448  virtual void DebugTextOut(const std::string& out, const Point3D& pt3D, Color color = Colors::White, uint32_t size = 8) = 0;
453  virtual void DebugLineOut(const Point3D& p0, const Point3D& p1, Color color = Colors::White) = 0;
458  virtual void DebugBoxOut(const Point3D& p_min, const Point3D& p_max, Color color = Colors::White) = 0;
463  virtual void DebugSphereOut(const Point3D& p, float r, Color color = Colors::White) = 0;
464 
465  // Cheats.
466 
472  virtual void DebugCreateUnit(UnitTypeID unit_type, const Point2D& p, uint32_t player_id = 1, uint32_t count = 1) = 0;
473 
476  virtual void DebugKillUnit(const Unit* unit) = 0;
477 
479  virtual void DebugShowMap() = 0;
481  virtual void DebugEnemyControl() = 0;
483  virtual void DebugIgnoreFood() = 0;
485  virtual void DebugIgnoreResourceCost() = 0;
487  virtual void DebugGiveAllResources() = 0;
489  virtual void DebugGodMode() = 0;
491  virtual void DebugIgnoreMineral() = 0;
493  virtual void DebugNoCooldowns() = 0;
495  virtual void DebugGiveAllTech() = 0;
497  virtual void DebugGiveAllUpgrades() = 0;
499  virtual void DebugFastBuild() = 0;
501  virtual void DebugSetScore(float score) = 0;
504  virtual void DebugEndGame(bool victory = false) = 0;
508  virtual void DebugSetEnergy(float value, const Unit* unit) = 0;
512  virtual void DebugSetLife(float value, const Unit* unit) = 0;
516  virtual void DebugSetShields(float value, const Unit* unit) = 0;
517 
520  virtual void DebugMoveCamera(const Point2D& pos) = 0;
521 
522  enum AppTest {
523  hang = 1,
524  crash = 2,
525  exit = 3
526  };
530  virtual void DebugTestApp(AppTest app_test, int delay_ms = 0) = 0;
531 
534  virtual void SendDebug() = 0;
535 };
536 
537 } // namespace sc2
Possible actions for feature layers.
Definition: sc2_action.h:113
Definition: sc2_interfaces.h:286
Common data types, including points, rectangles and colors.
A unit. Could be a structure, a worker or a military unit.
Definition: sc2_unit.h:70
Unit data in an observation.
Alliance
Relationship to this player.
Definition: sc2_unit.h:86
Definition: sc2_interfaces.h:239
2D integer point.
Definition: sc2_common.h:94
Scores.
Definition: sc2_score.h:179
Definition: sc2_common.h:14
Definition: sc2_common.h:49
Definition: sc2_action.h:9
All available abilities for a unit.
Definition: sc2_data.h:91
RGB Color.
Definition: sc2_common.h:133
Definition: sc2_interfaces.h:269
The ObservationInterface reflects the current state of the game. Guaranteed to be valid when OnGameSt...
Definition: sc2_interfaces.h:47
std::function< bool(const Unit &unit)> Filter
Definition: sc2_interfaces.h:44
The ObserverActionInterface corresponds to the actions available in the observer UI.
Definition: sc2_interfaces.h:405
Initial data for a game and map.
Definition: sc2_map_info.h:79
Definition: sc2_interfaces.h:427
Definition: sc2_interfaces.h:305
Definition: sc2_connection.h:16
Definition: sc2_interfaces.h:371