TorchCraftAI
A bot for machine learning research on StarCraft: Brood War
constants.h
1 /**
2  * Copyright (c) 2015-present, Facebook, Inc.
3  * All rights reserved.
4  *
5  * This source code is licensed under the BSD-style license found in the
6  * LICENSE file in the root directory of this source tree. An additional grant
7  * of patent rights can be found in the PATENTS file in the same directory.
8  */
9 
10 #pragma once
11 
12 #include <functional>
13 #include <string>
14 #include <unordered_map>
15 #include <vector>
16 
17 // With MSVC, we are limited by the maximum number of macro arguments that is
18 // pretty restrictive (127). To get around this, we stick to better-enum's
19 // default limits and included the fully expanded enum definitions, generated
20 // with GCC, for enums that are too large.
21 #ifdef _MSC_VER
22 #define TC_EXPAND_LARGE_ENUMS
23 #else // _MSC_VER
24 #define BETTER_ENUMS_MACRO_FILE "enum_macros.h"
25 #endif // _MSC_VER
26 
27 #include <torchcraft/enum.h>
28 
29 namespace torchcraft {
30 namespace BW {
31 
33  Command,
34  int,
35  // no arguments
36  Quit = 0, // leave the game
37  Restart =
38  1, // restart the game. Much faster, but doesn't work in multiplayer
39 
40  MapHack = 2, // remove fog of war
41  RequestImage = 3,
42  ExitProcess = 4,
43  Noop = 5, // do nothing
44 
45  // one argument
46  SetSpeed = 6, // sets the game speed (int)
47  SetLog = 7, // activates logging (bool)
48  SetGui = 8, // activates drawing and text in SC (bool)
49  SetFrameskip = 9, // number of frames to skip (int)
50  SetCmdOptim = 10, // reduce bot APM (0-6)
51  // Combine min[/max] frames before sending (int [,int])
52  // In blocking mode, always combine according to minimum of arguments passed
53  // In non-blocking mode, it's possible to set a lower and upper limit.
54  // Reaching the upper limit results in blocking. Setting a single number
55  // disables the upper limit.
56  SetCombineFrames = 11,
57 
58  // Sets the map with BWAPI->setMap and by writing to the config. Is not
59  // thread-safe. However, as long as the next connect finishes after set_map,
60  // you are guaranteed the map will be what you want.
61  SetMap = 12,
62  SetMulti = 13,
63  SetBlocking = 14,
64  SetMaxFrameTimeMs = 15,
65 
66  // arguments: (unit ID, command, target id, target x, target y, extra)
67  // (x, y) are walktiles instead of pixels
68  // otherwise this corresponds exactly to BWAPI::UnitCommand
69  CommandUnit = 16,
70  CommandUnitProtected = 17,
71 
72  // arguments: (command, args)
73  // For documentation about args, see usercommandtypes
74  CommandUser = 18,
75  CommandOpenbw = 19,
76 
77  // BWAPI drawing routines
78  DrawLine = 20, // x1, y1, x2, y2, color index
79  DrawUnitLine = 21, // uid1, uid2, color index
80  DrawUnitPosLine = 22, // uid, x2, y2, color index
81  DrawCircle = 23, // x, y, radius, color index
82  DrawUnitCircle = 24, // uid, radius, color index
83  DrawText = 25, // x, y plus text arg
84  DrawTextScreen = 26, // x, y plus text arg
85 
86  MAX)
87 
89  OpenBWCommandType,
90  int,
91  // two args
92  KillUnit = 0, // uid
93  // four args
94  SpawnUnit = 1, // playerid, type, x, y
95  SetPlayerUpgradeLevel = 2, // player, upgrade, level
96  SetPlayerResearched = 3, // player, tech, bool
97  SetPlayerMinerals = 4, // player, minerals
98  SetPlayerGas = 5, // player, gas
99  SetUnitHealth = 6, // unit, health
100  SetUnitShield = 7, // unit, shield
101  SetUnitEnergy = 8, // unit, energy
102 
104 
106  UserCommandType,
107  int,
108  // one arg
109  Move_Screen_Up = 0, // arguments: magnitude (amount of pixels)
110  Move_Screen_Down = 1, // arguments: magnitude (amount of pixels)
111  Move_Screen_Left = 2, // arguments: magnitude (amount of pixels)
112  Move_Screen_Right = 3, // arguments: magnitude (amount of pixels)
113 
114  // two args
115  Move_Screen_To_Pos = 4, // arguments: (x, y)
116  Right_Click = 5, // arguments: (x, y)
117 
118  USER_COMMAND_END = 6)
119 
121  UnitCommandType,
122  int,
123  // corresponds to BWAPI::UnitCommandTypes::Enum
124  Attack_Move = 0,
125  Attack_Unit = 1,
126  Build = 2,
127  Build_Addon = 3,
128  Train = 4,
129  Morph = 5,
130  Research = 6,
131  Upgrade = 7,
132  Set_Rally_Position = 8,
133  Set_Rally_Unit = 9,
134  Move = 10,
135  Patrol = 11,
136  Hold_Position = 12,
137  Stop = 13,
138  Follow = 14,
139  Gather = 15,
140  Return_Cargo = 16,
141  Repair = 17,
142  Burrow = 18,
143  Unburrow = 19,
144  Cloak = 20,
145  Decloak = 21,
146  Siege = 22,
147  Unsiege = 23,
148  Lift = 24,
149  Land = 25,
150  Load = 26,
151  Unload = 27,
152  Unload_All = 28,
153  Unload_All_Position = 29,
154  Right_Click_Position = 30,
155  Right_Click_Unit = 31,
156  Halt_Construction = 32,
157  Cancel_Construction = 33,
158  Cancel_Addon = 34,
159  Cancel_Train = 35,
160  Cancel_Train_Slot = 36,
161  Cancel_Morph = 37,
162  Cancel_Research = 38,
163  Cancel_Upgrade = 39,
164  Use_Tech = 40,
165  Use_Tech_Position = 41,
166  Use_Tech_Unit = 42,
167  Place_COP = 43,
168  None = 44,
169  Unknown = 45,
170  MAX = 46)
171 
172 #ifndef TC_EXPAND_LARGE_ENUMS
173 // Be sure to update the expanded version below when changing this
175  Order,
176  int,
177  // corresponds to BWAPI::Orders::Enum
178  Die = 0,
179  Stop = 1,
180  Guard = 2,
181  PlayerGuard = 3,
182  TurretGuard = 4,
183  BunkerGuard = 5,
184  Move = 6,
185  ReaverStop = 7,
186  Attack1 = 8,
187  Attack2 = 9,
188  AttackUnit = 10,
189  AttackFixedRange = 11,
190  AttackTile = 12,
191  Hover = 13,
192  AttackMove = 14,
193  InfestedCommandCenter = 15,
194  UnusedNothing = 16,
195  UnusedPowerup = 17,
196  TowerGuard = 18,
197  TowerAttack = 19,
198  VultureMine = 20,
199  StayInRange = 21,
200  TurretAttack = 22,
201  Nothing = 23,
202  Unused_24 = 24,
203  DroneStartBuild = 25,
204  DroneBuild = 26,
205  CastInfestation = 27,
206  MoveToInfest = 28,
207  InfestingCommandCenter = 29,
208  PlaceBuilding = 30,
209  PlaceProtossBuilding = 31,
210  CreateProtossBuilding = 32,
211  ConstructingBuilding = 33,
212  Repair = 34,
213  MoveToRepair = 35,
214  PlaceAddon = 36,
215  BuildAddon = 37,
216  Train = 38,
217  RallyPointUnit = 39,
218  RallyPointTile = 40,
219  ZergBirth = 41,
220  ZergUnitMorph = 42,
221  ZergBuildingMorph = 43,
222  IncompleteBuilding = 44,
223  IncompleteMorphing = 45,
224  BuildNydusExit = 46,
225  EnterNydusCanal = 47,
226  IncompleteWarping = 48,
227  Follow = 49,
228  Carrier = 50,
229  ReaverCarrierMove = 51,
230  CarrierStop = 52,
231  CarrierAttack = 53,
232  CarrierMoveToAttack = 54,
233  CarrierIgnore2 = 55,
234  CarrierFight = 56,
235  CarrierHoldPosition = 57,
236  Reaver = 58,
237  ReaverAttack = 59,
238  ReaverMoveToAttack = 60,
239  ReaverFight = 61,
240  ReaverHoldPosition = 62,
241  TrainFighter = 63,
242  InterceptorAttack = 64,
243  ScarabAttack = 65,
244  RechargeShieldsUnit = 66,
245  RechargeShieldsBattery = 67,
246  ShieldBattery = 68,
247  InterceptorReturn = 69,
248  DroneLand = 70,
249  BuildingLand = 71,
250  BuildingLiftOff = 72,
251  DroneLiftOff = 73,
252  LiftingOff = 74,
253  ResearchTech = 75,
254  Upgrade = 76,
255  Larva = 77,
256  SpawningLarva = 78,
257  Harvest1 = 79,
258  Harvest2 = 80,
259  MoveToGas = 81,
260  WaitForGas = 82,
261  HarvestGas = 83,
262  ReturnGas = 84,
263  MoveToMinerals = 85,
264  WaitForMinerals = 86,
265  MiningMinerals = 87,
266  Harvest3 = 88,
267  Harvest4 = 89,
268  ReturnMinerals = 90,
269  Interrupted = 91,
270  EnterTransport = 92,
271  PickupIdle = 93,
272  PickupTransport = 94,
273  PickupBunker = 95,
274  Pickup4 = 96,
275  PowerupIdle = 97,
276  Sieging = 98,
277  Unsieging = 99,
278  WatchTarget = 100,
279  InitCreepGrowth = 101,
280  SpreadCreep = 102,
281  StoppingCreepGrowth = 103,
282  GuardianAspect = 104,
283  ArchonWarp = 105,
284  CompletingArchonSummon = 106,
285  HoldPosition = 107,
286  QueenHoldPosition = 108,
287  Cloak = 109,
288  Decloak = 110,
289  Unload = 111,
290  MoveUnload = 112,
291  FireYamatoGun = 113,
292  MoveToFireYamatoGun = 114,
293  CastLockdown = 115,
294  Burrowing = 116,
295  Burrowed = 117,
296  Unburrowing = 118,
297  CastDarkSwarm = 119,
298  CastParasite = 120,
299  CastSpawnBroodlings = 121,
300  CastEMPShockwave = 122,
301  NukeWait = 123,
302  NukeTrain = 124,
303  NukeLaunch = 125,
304  NukePaint = 126,
305  NukeUnit = 127,
306  CastNuclearStrike = 128,
307  NukeTrack = 129,
308  InitializeArbiter = 130,
309  CloakNearbyUnits = 131,
310  PlaceMine = 132,
311  RightClickAction = 133,
312  SuicideUnit = 134,
313  SuicideLocation = 135,
314  SuicideHoldPosition = 136,
315  CastRecall = 137,
316  Teleport = 138,
317  CastScannerSweep = 139,
318  Scanner = 140,
319  CastDefensiveMatrix = 141,
320  CastPsionicStorm = 142,
321  CastIrradiate = 143,
322  CastPlague = 144,
323  CastConsume = 145,
324  CastEnsnare = 146,
325  CastStasisField = 147,
326  CastHallucination = 148,
327  Hallucination2 = 149,
328  ResetCollision = 150,
329  ResetHarvestCollision = 151,
330  Patrol = 152,
331  CTFCOPInit = 153,
332  CTFCOPStarted = 154,
333  CTFCOP2 = 155,
334  ComputerAI = 156,
335  AtkMoveEP = 157,
336  HarassMove = 158,
337  AIPatrol = 159,
338  GuardPost = 160,
339  RescuePassive = 161,
340  Neutral = 162,
341  ComputerReturn = 163,
342  InitializePsiProvider = 164,
343  SelfDestructing = 165,
344  Critter = 166,
345  HiddenGun = 167,
346  OpenDoor = 168,
347  CloseDoor = 169,
348  HideTrap = 170,
349  RevealTrap = 171,
350  EnableDoodad = 172,
351  DisableDoodad = 173,
352  WarpIn = 174,
353  Medic = 175,
354  MedicHeal = 176,
355  HealMove = 177,
356  MedicHoldPosition = 178,
357  MedicHealToIdle = 179,
358  CastRestoration = 180,
359  CastDisruptionWeb = 181,
360  CastMindControl = 182,
361  DarkArchonMeld = 183,
362  CastFeedback = 184,
363  CastOpticalFlare = 185,
364  CastMaelstrom = 186,
365  JunkYardDog = 187,
366  Fatal = 188,
367  None = 189,
368  Unknown = 190,
369  MAX = 191)
370 #else // TC_EXPAND_LARGE_ENUMS
371 // Macro above expanded with GCC
372 namespace better_enums_data_Order {} class Order { private: typedef ::better_enums::optional<Order> _optional; typedef ::better_enums::optional<std::size_t> _optional_index; public: typedef int _integral; enum _enumerated : int { Die = 0, Stop = 1, Guard = 2, PlayerGuard = 3, TurretGuard = 4, BunkerGuard = 5, Move = 6, ReaverStop = 7, Attack1 = 8, Attack2 = 9, AttackUnit = 10, AttackFixedRange = 11, AttackTile = 12, Hover = 13, AttackMove = 14, InfestedCommandCenter = 15, UnusedNothing = 16, UnusedPowerup = 17, TowerGuard = 18, TowerAttack = 19, VultureMine = 20, StayInRange = 21, TurretAttack = 22, Nothing = 23, Unused_24 = 24, DroneStartBuild = 25, DroneBuild = 26, CastInfestation = 27, MoveToInfest = 28, InfestingCommandCenter = 29, PlaceBuilding = 30, PlaceProtossBuilding = 31, CreateProtossBuilding = 32, ConstructingBuilding = 33, Repair = 34, MoveToRepair = 35, PlaceAddon = 36, BuildAddon = 37, Train = 38, RallyPointUnit = 39, RallyPointTile = 40, ZergBirth = 41, ZergUnitMorph = 42, ZergBuildingMorph = 43, IncompleteBuilding = 44, IncompleteMorphing = 45, BuildNydusExit = 46, EnterNydusCanal = 47, IncompleteWarping = 48, Follow = 49, Carrier = 50, ReaverCarrierMove = 51, CarrierStop = 52, CarrierAttack = 53, CarrierMoveToAttack = 54, CarrierIgnore2 = 55, CarrierFight = 56, CarrierHoldPosition = 57, Reaver = 58, ReaverAttack = 59, ReaverMoveToAttack = 60, ReaverFight = 61, ReaverHoldPosition = 62, TrainFighter = 63, InterceptorAttack = 64, ScarabAttack = 65, RechargeShieldsUnit = 66, RechargeShieldsBattery = 67, ShieldBattery = 68, InterceptorReturn = 69, DroneLand = 70, BuildingLand = 71, BuildingLiftOff = 72, DroneLiftOff = 73, LiftingOff = 74, ResearchTech = 75, Upgrade = 76, Larva = 77, SpawningLarva = 78, Harvest1 = 79, Harvest2 = 80, MoveToGas = 81, WaitForGas = 82, HarvestGas = 83, ReturnGas = 84, MoveToMinerals = 85, WaitForMinerals = 86, MiningMinerals = 87, Harvest3 = 88, Harvest4 = 89, ReturnMinerals = 90, Interrupted = 91, EnterTransport = 92, PickupIdle = 93, PickupTransport = 94, PickupBunker = 95, Pickup4 = 96, PowerupIdle = 97, Sieging = 98, Unsieging = 99, WatchTarget = 100, InitCreepGrowth = 101, SpreadCreep = 102, StoppingCreepGrowth = 103, GuardianAspect = 104, ArchonWarp = 105, CompletingArchonSummon = 106, HoldPosition = 107, QueenHoldPosition = 108, Cloak = 109, Decloak = 110, Unload = 111, MoveUnload = 112, FireYamatoGun = 113, MoveToFireYamatoGun = 114, CastLockdown = 115, Burrowing = 116, Burrowed = 117, Unburrowing = 118, CastDarkSwarm = 119, CastParasite = 120, CastSpawnBroodlings = 121, CastEMPShockwave = 122, NukeWait = 123, NukeTrain = 124, NukeLaunch = 125, NukePaint = 126, NukeUnit = 127, CastNuclearStrike = 128, NukeTrack = 129, InitializeArbiter = 130, CloakNearbyUnits = 131, PlaceMine = 132, RightClickAction = 133, SuicideUnit = 134, SuicideLocation = 135, SuicideHoldPosition = 136, CastRecall = 137, Teleport = 138, CastScannerSweep = 139, Scanner = 140, CastDefensiveMatrix = 141, CastPsionicStorm = 142, CastIrradiate = 143, CastPlague = 144, CastConsume = 145, CastEnsnare = 146, CastStasisField = 147, CastHallucination = 148, Hallucination2 = 149, ResetCollision = 150, ResetHarvestCollision = 151, Patrol = 152, CTFCOPInit = 153, CTFCOPStarted = 154, CTFCOP2 = 155, ComputerAI = 156, AtkMoveEP = 157, HarassMove = 158, AIPatrol = 159, GuardPost = 160, RescuePassive = 161, Neutral = 162, ComputerReturn = 163, InitializePsiProvider = 164, SelfDestructing = 165, Critter = 166, HiddenGun = 167, OpenDoor = 168, CloseDoor = 169, HideTrap = 170, RevealTrap = 171, EnableDoodad = 172, DisableDoodad = 173, WarpIn = 174, Medic = 175, MedicHeal = 176, HealMove = 177, MedicHoldPosition = 178, MedicHealToIdle = 179, CastRestoration = 180, CastDisruptionWeb = 181, CastMindControl = 182, DarkArchonMeld = 183, CastFeedback = 184, CastOpticalFlare = 185, CastMaelstrom = 186, JunkYardDog = 187, Fatal = 188, None = 189, Unknown = 190, MAX = 191 }; constexpr Order(_enumerated value) : _value(value) { } constexpr operator _enumerated() const { return _enumerated(_value); } constexpr _integral _to_integral() const; constexpr static Order _from_integral(_integral value); constexpr static Order _from_integral_unchecked(_integral value); constexpr static _optional _from_integral_nothrow(_integral value); const char* _to_string() const; constexpr static Order _from_string(const char *name); constexpr static _optional _from_string_nothrow(const char *name); constexpr static Order _from_string_nocase(const char *name); constexpr static _optional _from_string_nocase_nothrow(const char *name); constexpr static bool _is_valid(_integral value); constexpr static bool _is_valid(const char *name); constexpr static bool _is_valid_nocase(const char *name); typedef ::better_enums::_Iterable<Order> _value_iterable; typedef ::better_enums::_Iterable<const char*> _name_iterable; typedef _value_iterable::iterator _value_iterator; typedef _name_iterable::iterator _name_iterator; constexpr static const std::size_t _size_constant = 192; constexpr static std::size_t _size() { return _size_constant; } constexpr static const char* _name(); constexpr static _value_iterable _values(); static _name_iterable _names(); _integral _value; private: Order() : _value(0) { } private: explicit constexpr Order(const _integral &value) : _value(value) { } static int initialize(); constexpr static _optional_index _from_value_loop(_integral value, std::size_t index = 0); constexpr static _optional_index _from_string_loop(const char *name, std::size_t index = 0); constexpr static _optional_index _from_string_nocase_loop(const char *name, std::size_t index = 0); friend struct ::better_enums::_initialize_at_program_start<Order>; }; namespace better_enums_data_Order { static ::better_enums::_initialize_at_program_start<Order> _force_initialization; enum _PutNamesInThisScopeAlso { Die = 0, Stop = 1, Guard = 2, PlayerGuard = 3, TurretGuard = 4, BunkerGuard = 5, Move = 6, ReaverStop = 7, Attack1 = 8, Attack2 = 9, AttackUnit = 10, AttackFixedRange = 11, AttackTile = 12, Hover = 13, AttackMove = 14, InfestedCommandCenter = 15, UnusedNothing = 16, UnusedPowerup = 17, TowerGuard = 18, TowerAttack = 19, VultureMine = 20, StayInRange = 21, TurretAttack = 22, Nothing = 23, Unused_24 = 24, DroneStartBuild = 25, DroneBuild = 26, CastInfestation = 27, MoveToInfest = 28, InfestingCommandCenter = 29, PlaceBuilding = 30, PlaceProtossBuilding = 31, CreateProtossBuilding = 32, ConstructingBuilding = 33, Repair = 34, MoveToRepair = 35, PlaceAddon = 36, BuildAddon = 37, Train = 38, RallyPointUnit = 39, RallyPointTile = 40, ZergBirth = 41, ZergUnitMorph = 42, ZergBuildingMorph = 43, IncompleteBuilding = 44, IncompleteMorphing = 45, BuildNydusExit = 46, EnterNydusCanal = 47, IncompleteWarping = 48, Follow = 49, Carrier = 50, ReaverCarrierMove = 51, CarrierStop = 52, CarrierAttack = 53, CarrierMoveToAttack = 54, CarrierIgnore2 = 55, CarrierFight = 56, CarrierHoldPosition = 57, Reaver = 58, ReaverAttack = 59, ReaverMoveToAttack = 60, ReaverFight = 61, ReaverHoldPosition = 62, TrainFighter = 63, InterceptorAttack = 64, ScarabAttack = 65, RechargeShieldsUnit = 66, RechargeShieldsBattery = 67, ShieldBattery = 68, InterceptorReturn = 69, DroneLand = 70, BuildingLand = 71, BuildingLiftOff = 72, DroneLiftOff = 73, LiftingOff = 74, ResearchTech = 75, Upgrade = 76, Larva = 77, SpawningLarva = 78, Harvest1 = 79, Harvest2 = 80, MoveToGas = 81, WaitForGas = 82, HarvestGas = 83, ReturnGas = 84, MoveToMinerals = 85, WaitForMinerals = 86, MiningMinerals = 87, Harvest3 = 88, Harvest4 = 89, ReturnMinerals = 90, Interrupted = 91, EnterTransport = 92, PickupIdle = 93, PickupTransport = 94, PickupBunker = 95, Pickup4 = 96, PowerupIdle = 97, Sieging = 98, Unsieging = 99, WatchTarget = 100, InitCreepGrowth = 101, SpreadCreep = 102, StoppingCreepGrowth = 103, GuardianAspect = 104, ArchonWarp = 105, CompletingArchonSummon = 106, HoldPosition = 107, QueenHoldPosition = 108, Cloak = 109, Decloak = 110, Unload = 111, MoveUnload = 112, FireYamatoGun = 113, MoveToFireYamatoGun = 114, CastLockdown = 115, Burrowing = 116, Burrowed = 117, Unburrowing = 118, CastDarkSwarm = 119, CastParasite = 120, CastSpawnBroodlings = 121, CastEMPShockwave = 122, NukeWait = 123, NukeTrain = 124, NukeLaunch = 125, NukePaint = 126, NukeUnit = 127, CastNuclearStrike = 128, NukeTrack = 129, InitializeArbiter = 130, CloakNearbyUnits = 131, PlaceMine = 132, RightClickAction = 133, SuicideUnit = 134, SuicideLocation = 135, SuicideHoldPosition = 136, CastRecall = 137, Teleport = 138, CastScannerSweep = 139, Scanner = 140, CastDefensiveMatrix = 141, CastPsionicStorm = 142, CastIrradiate = 143, CastPlague = 144, CastConsume = 145, CastEnsnare = 146, CastStasisField = 147, CastHallucination = 148, Hallucination2 = 149, ResetCollision = 150, ResetHarvestCollision = 151, Patrol = 152, CTFCOPInit = 153, CTFCOPStarted = 154, CTFCOP2 = 155, ComputerAI = 156, AtkMoveEP = 157, HarassMove = 158, AIPatrol = 159, GuardPost = 160, RescuePassive = 161, Neutral = 162, ComputerReturn = 163, InitializePsiProvider = 164, SelfDestructing = 165, Critter = 166, HiddenGun = 167, OpenDoor = 168, CloseDoor = 169, HideTrap = 170, RevealTrap = 171, EnableDoodad = 172, DisableDoodad = 173, WarpIn = 174, Medic = 175, MedicHeal = 176, HealMove = 177, MedicHoldPosition = 178, MedicHealToIdle = 179, CastRestoration = 180, CastDisruptionWeb = 181, CastMindControl = 182, DarkArchonMeld = 183, CastFeedback = 184, CastOpticalFlare = 185, CastMaelstrom = 186, JunkYardDog = 187, Fatal = 188, None = 189, Unknown = 190, MAX = 191 }; constexpr const Order _value_array[] = { ((::better_enums::_eat_assign<Order>)Order::Die = 0), ((::better_enums::_eat_assign<Order>)Order::Stop = 1), ((::better_enums::_eat_assign<Order>)Order::Guard = 2), ((::better_enums::_eat_assign<Order>)Order::PlayerGuard = 3), ((::better_enums::_eat_assign<Order>)Order::TurretGuard = 4), ((::better_enums::_eat_assign<Order>)Order::BunkerGuard = 5), ((::better_enums::_eat_assign<Order>)Order::Move = 6), ((::better_enums::_eat_assign<Order>)Order::ReaverStop = 7), ((::better_enums::_eat_assign<Order>)Order::Attack1 = 8), ((::better_enums::_eat_assign<Order>)Order::Attack2 = 9), ((::better_enums::_eat_assign<Order>)Order::AttackUnit = 10), ((::better_enums::_eat_assign<Order>)Order::AttackFixedRange = 11), ((::better_enums::_eat_assign<Order>)Order::AttackTile = 12), ((::better_enums::_eat_assign<Order>)Order::Hover = 13), ((::better_enums::_eat_assign<Order>)Order::AttackMove = 14), ((::better_enums::_eat_assign<Order>)Order::InfestedCommandCenter = 15), ((::better_enums::_eat_assign<Order>)Order::UnusedNothing = 16), ((::better_enums::_eat_assign<Order>)Order::UnusedPowerup = 17), ((::better_enums::_eat_assign<Order>)Order::TowerGuard = 18), ((::better_enums::_eat_assign<Order>)Order::TowerAttack = 19), ((::better_enums::_eat_assign<Order>)Order::VultureMine = 20), ((::better_enums::_eat_assign<Order>)Order::StayInRange = 21), ((::better_enums::_eat_assign<Order>)Order::TurretAttack = 22), ((::better_enums::_eat_assign<Order>)Order::Nothing = 23), ((::better_enums::_eat_assign<Order>)Order::Unused_24 = 24), ((::better_enums::_eat_assign<Order>)Order::DroneStartBuild = 25), ((::better_enums::_eat_assign<Order>)Order::DroneBuild = 26), ((::better_enums::_eat_assign<Order>)Order::CastInfestation = 27), ((::better_enums::_eat_assign<Order>)Order::MoveToInfest = 28), ((::better_enums::_eat_assign<Order>)Order::InfestingCommandCenter = 29), ((::better_enums::_eat_assign<Order>)Order::PlaceBuilding = 30), ((::better_enums::_eat_assign<Order>)Order::PlaceProtossBuilding = 31), ((::better_enums::_eat_assign<Order>)Order::CreateProtossBuilding = 32), ((::better_enums::_eat_assign<Order>)Order::ConstructingBuilding = 33), ((::better_enums::_eat_assign<Order>)Order::Repair = 34), ((::better_enums::_eat_assign<Order>)Order::MoveToRepair = 35), ((::better_enums::_eat_assign<Order>)Order::PlaceAddon = 36), ((::better_enums::_eat_assign<Order>)Order::BuildAddon = 37), ((::better_enums::_eat_assign<Order>)Order::Train = 38), ((::better_enums::_eat_assign<Order>)Order::RallyPointUnit = 39), ((::better_enums::_eat_assign<Order>)Order::RallyPointTile = 40), ((::better_enums::_eat_assign<Order>)Order::ZergBirth = 41), ((::better_enums::_eat_assign<Order>)Order::ZergUnitMorph = 42), ((::better_enums::_eat_assign<Order>)Order::ZergBuildingMorph = 43), ((::better_enums::_eat_assign<Order>)Order::IncompleteBuilding = 44), ((::better_enums::_eat_assign<Order>)Order::IncompleteMorphing = 45), ((::better_enums::_eat_assign<Order>)Order::BuildNydusExit = 46), ((::better_enums::_eat_assign<Order>)Order::EnterNydusCanal = 47), ((::better_enums::_eat_assign<Order>)Order::IncompleteWarping = 48), ((::better_enums::_eat_assign<Order>)Order::Follow = 49), ((::better_enums::_eat_assign<Order>)Order::Carrier = 50), ((::better_enums::_eat_assign<Order>)Order::ReaverCarrierMove = 51), ((::better_enums::_eat_assign<Order>)Order::CarrierStop = 52), ((::better_enums::_eat_assign<Order>)Order::CarrierAttack = 53), ((::better_enums::_eat_assign<Order>)Order::CarrierMoveToAttack = 54), ((::better_enums::_eat_assign<Order>)Order::CarrierIgnore2 = 55), ((::better_enums::_eat_assign<Order>)Order::CarrierFight = 56), ((::better_enums::_eat_assign<Order>)Order::CarrierHoldPosition = 57), ((::better_enums::_eat_assign<Order>)Order::Reaver = 58), ((::better_enums::_eat_assign<Order>)Order::ReaverAttack = 59), ((::better_enums::_eat_assign<Order>)Order::ReaverMoveToAttack = 60), ((::better_enums::_eat_assign<Order>)Order::ReaverFight = 61), ((::better_enums::_eat_assign<Order>)Order::ReaverHoldPosition = 62), ((::better_enums::_eat_assign<Order>)Order::TrainFighter = 63), ((::better_enums::_eat_assign<Order>)Order::InterceptorAttack = 64), ((::better_enums::_eat_assign<Order>)Order::ScarabAttack = 65), ((::better_enums::_eat_assign<Order>)Order::RechargeShieldsUnit = 66), ((::better_enums::_eat_assign<Order>)Order::RechargeShieldsBattery = 67), ((::better_enums::_eat_assign<Order>)Order::ShieldBattery = 68), ((::better_enums::_eat_assign<Order>)Order::InterceptorReturn = 69), ((::better_enums::_eat_assign<Order>)Order::DroneLand = 70), ((::better_enums::_eat_assign<Order>)Order::BuildingLand = 71), ((::better_enums::_eat_assign<Order>)Order::BuildingLiftOff = 72), ((::better_enums::_eat_assign<Order>)Order::DroneLiftOff = 73), ((::better_enums::_eat_assign<Order>)Order::LiftingOff = 74), ((::better_enums::_eat_assign<Order>)Order::ResearchTech = 75), ((::better_enums::_eat_assign<Order>)Order::Upgrade = 76), ((::better_enums::_eat_assign<Order>)Order::Larva = 77), ((::better_enums::_eat_assign<Order>)Order::SpawningLarva = 78), ((::better_enums::_eat_assign<Order>)Order::Harvest1 = 79), ((::better_enums::_eat_assign<Order>)Order::Harvest2 = 80), ((::better_enums::_eat_assign<Order>)Order::MoveToGas = 81), ((::better_enums::_eat_assign<Order>)Order::WaitForGas = 82), ((::better_enums::_eat_assign<Order>)Order::HarvestGas = 83), ((::better_enums::_eat_assign<Order>)Order::ReturnGas = 84), ((::better_enums::_eat_assign<Order>)Order::MoveToMinerals = 85), ((::better_enums::_eat_assign<Order>)Order::WaitForMinerals = 86), ((::better_enums::_eat_assign<Order>)Order::MiningMinerals = 87), ((::better_enums::_eat_assign<Order>)Order::Harvest3 = 88), ((::better_enums::_eat_assign<Order>)Order::Harvest4 = 89), ((::better_enums::_eat_assign<Order>)Order::ReturnMinerals = 90), ((::better_enums::_eat_assign<Order>)Order::Interrupted = 91), ((::better_enums::_eat_assign<Order>)Order::EnterTransport = 92), ((::better_enums::_eat_assign<Order>)Order::PickupIdle = 93), ((::better_enums::_eat_assign<Order>)Order::PickupTransport = 94), ((::better_enums::_eat_assign<Order>)Order::PickupBunker = 95), ((::better_enums::_eat_assign<Order>)Order::Pickup4 = 96), ((::better_enums::_eat_assign<Order>)Order::PowerupIdle = 97), ((::better_enums::_eat_assign<Order>)Order::Sieging = 98), ((::better_enums::_eat_assign<Order>)Order::Unsieging = 99), ((::better_enums::_eat_assign<Order>)Order::WatchTarget = 100), ((::better_enums::_eat_assign<Order>)Order::InitCreepGrowth = 101), ((::better_enums::_eat_assign<Order>)Order::SpreadCreep = 102), ((::better_enums::_eat_assign<Order>)Order::StoppingCreepGrowth = 103), ((::better_enums::_eat_assign<Order>)Order::GuardianAspect = 104), ((::better_enums::_eat_assign<Order>)Order::ArchonWarp = 105), ((::better_enums::_eat_assign<Order>)Order::CompletingArchonSummon = 106), ((::better_enums::_eat_assign<Order>)Order::HoldPosition = 107), ((::better_enums::_eat_assign<Order>)Order::QueenHoldPosition = 108), ((::better_enums::_eat_assign<Order>)Order::Cloak = 109), ((::better_enums::_eat_assign<Order>)Order::Decloak = 110), ((::better_enums::_eat_assign<Order>)Order::Unload = 111), ((::better_enums::_eat_assign<Order>)Order::MoveUnload = 112), ((::better_enums::_eat_assign<Order>)Order::FireYamatoGun = 113), ((::better_enums::_eat_assign<Order>)Order::MoveToFireYamatoGun = 114), ((::better_enums::_eat_assign<Order>)Order::CastLockdown = 115), ((::better_enums::_eat_assign<Order>)Order::Burrowing = 116), ((::better_enums::_eat_assign<Order>)Order::Burrowed = 117), ((::better_enums::_eat_assign<Order>)Order::Unburrowing = 118), ((::better_enums::_eat_assign<Order>)Order::CastDarkSwarm = 119), ((::better_enums::_eat_assign<Order>)Order::CastParasite = 120), ((::better_enums::_eat_assign<Order>)Order::CastSpawnBroodlings = 121), ((::better_enums::_eat_assign<Order>)Order::CastEMPShockwave = 122), ((::better_enums::_eat_assign<Order>)Order::NukeWait = 123), ((::better_enums::_eat_assign<Order>)Order::NukeTrain = 124), ((::better_enums::_eat_assign<Order>)Order::NukeLaunch = 125), ((::better_enums::_eat_assign<Order>)Order::NukePaint = 126), ((::better_enums::_eat_assign<Order>)Order::NukeUnit = 127), ((::better_enums::_eat_assign<Order>)Order::CastNuclearStrike = 128), ((::better_enums::_eat_assign<Order>)Order::NukeTrack = 129), ((::better_enums::_eat_assign<Order>)Order::InitializeArbiter = 130), ((::better_enums::_eat_assign<Order>)Order::CloakNearbyUnits = 131), ((::better_enums::_eat_assign<Order>)Order::PlaceMine = 132), ((::better_enums::_eat_assign<Order>)Order::RightClickAction = 133), ((::better_enums::_eat_assign<Order>)Order::SuicideUnit = 134), ((::better_enums::_eat_assign<Order>)Order::SuicideLocation = 135), ((::better_enums::_eat_assign<Order>)Order::SuicideHoldPosition = 136), ((::better_enums::_eat_assign<Order>)Order::CastRecall = 137), ((::better_enums::_eat_assign<Order>)Order::Teleport = 138), ((::better_enums::_eat_assign<Order>)Order::CastScannerSweep = 139), ((::better_enums::_eat_assign<Order>)Order::Scanner = 140), ((::better_enums::_eat_assign<Order>)Order::CastDefensiveMatrix = 141), ((::better_enums::_eat_assign<Order>)Order::CastPsionicStorm = 142), ((::better_enums::_eat_assign<Order>)Order::CastIrradiate = 143), ((::better_enums::_eat_assign<Order>)Order::CastPlague = 144), ((::better_enums::_eat_assign<Order>)Order::CastConsume = 145), ((::better_enums::_eat_assign<Order>)Order::CastEnsnare = 146), ((::better_enums::_eat_assign<Order>)Order::CastStasisField = 147), ((::better_enums::_eat_assign<Order>)Order::CastHallucination = 148), ((::better_enums::_eat_assign<Order>)Order::Hallucination2 = 149), ((::better_enums::_eat_assign<Order>)Order::ResetCollision = 150), ((::better_enums::_eat_assign<Order>)Order::ResetHarvestCollision = 151), ((::better_enums::_eat_assign<Order>)Order::Patrol = 152), ((::better_enums::_eat_assign<Order>)Order::CTFCOPInit = 153), ((::better_enums::_eat_assign<Order>)Order::CTFCOPStarted = 154), ((::better_enums::_eat_assign<Order>)Order::CTFCOP2 = 155), ((::better_enums::_eat_assign<Order>)Order::ComputerAI = 156), ((::better_enums::_eat_assign<Order>)Order::AtkMoveEP = 157), ((::better_enums::_eat_assign<Order>)Order::HarassMove = 158), ((::better_enums::_eat_assign<Order>)Order::AIPatrol = 159), ((::better_enums::_eat_assign<Order>)Order::GuardPost = 160), ((::better_enums::_eat_assign<Order>)Order::RescuePassive = 161), ((::better_enums::_eat_assign<Order>)Order::Neutral = 162), ((::better_enums::_eat_assign<Order>)Order::ComputerReturn = 163), ((::better_enums::_eat_assign<Order>)Order::InitializePsiProvider = 164), ((::better_enums::_eat_assign<Order>)Order::SelfDestructing = 165), ((::better_enums::_eat_assign<Order>)Order::Critter = 166), ((::better_enums::_eat_assign<Order>)Order::HiddenGun = 167), ((::better_enums::_eat_assign<Order>)Order::OpenDoor = 168), ((::better_enums::_eat_assign<Order>)Order::CloseDoor = 169), ((::better_enums::_eat_assign<Order>)Order::HideTrap = 170), ((::better_enums::_eat_assign<Order>)Order::RevealTrap = 171), ((::better_enums::_eat_assign<Order>)Order::EnableDoodad = 172), ((::better_enums::_eat_assign<Order>)Order::DisableDoodad = 173), ((::better_enums::_eat_assign<Order>)Order::WarpIn = 174), ((::better_enums::_eat_assign<Order>)Order::Medic = 175), ((::better_enums::_eat_assign<Order>)Order::MedicHeal = 176), ((::better_enums::_eat_assign<Order>)Order::HealMove = 177), ((::better_enums::_eat_assign<Order>)Order::MedicHoldPosition = 178), ((::better_enums::_eat_assign<Order>)Order::MedicHealToIdle = 179), ((::better_enums::_eat_assign<Order>)Order::CastRestoration = 180), ((::better_enums::_eat_assign<Order>)Order::CastDisruptionWeb = 181), ((::better_enums::_eat_assign<Order>)Order::CastMindControl = 182), ((::better_enums::_eat_assign<Order>)Order::DarkArchonMeld = 183), ((::better_enums::_eat_assign<Order>)Order::CastFeedback = 184), ((::better_enums::_eat_assign<Order>)Order::CastOpticalFlare = 185), ((::better_enums::_eat_assign<Order>)Order::CastMaelstrom = 186), ((::better_enums::_eat_assign<Order>)Order::JunkYardDog = 187), ((::better_enums::_eat_assign<Order>)Order::Fatal = 188), ((::better_enums::_eat_assign<Order>)Order::None = 189), ((::better_enums::_eat_assign<Order>)Order::Unknown = 190), ((::better_enums::_eat_assign<Order>)Order::MAX = 191), }; constexpr const char *_the_raw_names[] = { "Die = 0", "Stop = 1", "Guard = 2", "PlayerGuard = 3", "TurretGuard = 4", "BunkerGuard = 5", "Move = 6", "ReaverStop = 7", "Attack1 = 8", "Attack2 = 9", "AttackUnit = 10", "AttackFixedRange = 11", "AttackTile = 12", "Hover = 13", "AttackMove = 14", "InfestedCommandCenter = 15", "UnusedNothing = 16", "UnusedPowerup = 17", "TowerGuard = 18", "TowerAttack = 19", "VultureMine = 20", "StayInRange = 21", "TurretAttack = 22", "Nothing = 23", "Unused_24 = 24", "DroneStartBuild = 25", "DroneBuild = 26", "CastInfestation = 27", "MoveToInfest = 28", "InfestingCommandCenter = 29", "PlaceBuilding = 30", "PlaceProtossBuilding = 31", "CreateProtossBuilding = 32", "ConstructingBuilding = 33", "Repair = 34", "MoveToRepair = 35", "PlaceAddon = 36", "BuildAddon = 37", "Train = 38", "RallyPointUnit = 39", "RallyPointTile = 40", "ZergBirth = 41", "ZergUnitMorph = 42", "ZergBuildingMorph = 43", "IncompleteBuilding = 44", "IncompleteMorphing = 45", "BuildNydusExit = 46", "EnterNydusCanal = 47", "IncompleteWarping = 48", "Follow = 49", "Carrier = 50", "ReaverCarrierMove = 51", "CarrierStop = 52", "CarrierAttack = 53", "CarrierMoveToAttack = 54", "CarrierIgnore2 = 55", "CarrierFight = 56", "CarrierHoldPosition = 57", "Reaver = 58", "ReaverAttack = 59", "ReaverMoveToAttack = 60", "ReaverFight = 61", "ReaverHoldPosition = 62", "TrainFighter = 63", "InterceptorAttack = 64", "ScarabAttack = 65", "RechargeShieldsUnit = 66", "RechargeShieldsBattery = 67", "ShieldBattery = 68", "InterceptorReturn = 69", "DroneLand = 70", "BuildingLand = 71", "BuildingLiftOff = 72", "DroneLiftOff = 73", "LiftingOff = 74", "ResearchTech = 75", "Upgrade = 76", "Larva = 77", "SpawningLarva = 78", "Harvest1 = 79", "Harvest2 = 80", "MoveToGas = 81", "WaitForGas = 82", "HarvestGas = 83", "ReturnGas = 84", "MoveToMinerals = 85", "WaitForMinerals = 86", "MiningMinerals = 87", "Harvest3 = 88", "Harvest4 = 89", "ReturnMinerals = 90", "Interrupted = 91", "EnterTransport = 92", "PickupIdle = 93", "PickupTransport = 94", "PickupBunker = 95", "Pickup4 = 96", "PowerupIdle = 97", "Sieging = 98", "Unsieging = 99", "WatchTarget = 100", "InitCreepGrowth = 101", "SpreadCreep = 102", "StoppingCreepGrowth = 103", "GuardianAspect = 104", "ArchonWarp = 105", "CompletingArchonSummon = 106", "HoldPosition = 107", "QueenHoldPosition = 108", "Cloak = 109", "Decloak = 110", "Unload = 111", "MoveUnload = 112", "FireYamatoGun = 113", "MoveToFireYamatoGun = 114", "CastLockdown = 115", "Burrowing = 116", "Burrowed = 117", "Unburrowing = 118", "CastDarkSwarm = 119", "CastParasite = 120", "CastSpawnBroodlings = 121", "CastEMPShockwave = 122", "NukeWait = 123", "NukeTrain = 124", "NukeLaunch = 125", "NukePaint = 126", "NukeUnit = 127", "CastNuclearStrike = 128", "NukeTrack = 129", "InitializeArbiter = 130", "CloakNearbyUnits = 131", "PlaceMine = 132", "RightClickAction = 133", "SuicideUnit = 134", "SuicideLocation = 135", "SuicideHoldPosition = 136", "CastRecall = 137", "Teleport = 138", "CastScannerSweep = 139", "Scanner = 140", "CastDefensiveMatrix = 141", "CastPsionicStorm = 142", "CastIrradiate = 143", "CastPlague = 144", "CastConsume = 145", "CastEnsnare = 146", "CastStasisField = 147", "CastHallucination = 148", "Hallucination2 = 149", "ResetCollision = 150", "ResetHarvestCollision = 151", "Patrol = 152", "CTFCOPInit = 153", "CTFCOPStarted = 154", "CTFCOP2 = 155", "ComputerAI = 156", "AtkMoveEP = 157", "HarassMove = 158", "AIPatrol = 159", "GuardPost = 160", "RescuePassive = 161", "Neutral = 162", "ComputerReturn = 163", "InitializePsiProvider = 164", "SelfDestructing = 165", "Critter = 166", "HiddenGun = 167", "OpenDoor = 168", "CloseDoor = 169", "HideTrap = 170", "RevealTrap = 171", "EnableDoodad = 172", "DisableDoodad = 173", "WarpIn = 174", "Medic = 175", "MedicHeal = 176", "HealMove = 177", "MedicHoldPosition = 178", "MedicHealToIdle = 179", "CastRestoration = 180", "CastDisruptionWeb = 181", "CastMindControl = 182", "DarkArchonMeld = 183", "CastFeedback = 184", "CastOpticalFlare = 185", "CastMaelstrom = 186", "JunkYardDog = 187", "Fatal = 188", "None = 189", "Unknown = 190", "MAX = 191", }; constexpr const char * const * _raw_names() { return _the_raw_names; } inline char* _name_storage() { static char storage[] = "Die = 0" "," "Stop = 1" "," "Guard = 2" "," "PlayerGuard = 3" "," "TurretGuard = 4" "," "BunkerGuard = 5" "," "Move = 6" "," "ReaverStop = 7" "," "Attack1 = 8" "," "Attack2 = 9" "," "AttackUnit = 10" "," "AttackFixedRange = 11" "," "AttackTile = 12" "," "Hover = 13" "," "AttackMove = 14" "," "InfestedCommandCenter = 15" "," "UnusedNothing = 16" "," "UnusedPowerup = 17" "," "TowerGuard = 18" "," "TowerAttack = 19" "," "VultureMine = 20" "," "StayInRange = 21" "," "TurretAttack = 22" "," "Nothing = 23" "," "Unused_24 = 24" "," "DroneStartBuild = 25" "," "DroneBuild = 26" "," "CastInfestation = 27" "," "MoveToInfest = 28" "," "InfestingCommandCenter = 29" "," "PlaceBuilding = 30" "," "PlaceProtossBuilding = 31" "," "CreateProtossBuilding = 32" "," "ConstructingBuilding = 33" "," "Repair = 34" "," "MoveToRepair = 35" "," "PlaceAddon = 36" "," "BuildAddon = 37" "," "Train = 38" "," "RallyPointUnit = 39" "," "RallyPointTile = 40" "," "ZergBirth = 41" "," "ZergUnitMorph = 42" "," "ZergBuildingMorph = 43" "," "IncompleteBuilding = 44" "," "IncompleteMorphing = 45" "," "BuildNydusExit = 46" "," "EnterNydusCanal = 47" "," "IncompleteWarping = 48" "," "Follow = 49" "," "Carrier = 50" "," "ReaverCarrierMove = 51" "," "CarrierStop = 52" "," "CarrierAttack = 53" "," "CarrierMoveToAttack = 54" "," "CarrierIgnore2 = 55" "," "CarrierFight = 56" "," "CarrierHoldPosition = 57" "," "Reaver = 58" "," "ReaverAttack = 59" "," "ReaverMoveToAttack = 60" "," "ReaverFight = 61" "," "ReaverHoldPosition = 62" "," "TrainFighter = 63" "," "InterceptorAttack = 64" "," "ScarabAttack = 65" "," "RechargeShieldsUnit = 66" "," "RechargeShieldsBattery = 67" "," "ShieldBattery = 68" "," "InterceptorReturn = 69" "," "DroneLand = 70" "," "BuildingLand = 71" "," "BuildingLiftOff = 72" "," "DroneLiftOff = 73" "," "LiftingOff = 74" "," "ResearchTech = 75" "," "Upgrade = 76" "," "Larva = 77" "," "SpawningLarva = 78" "," "Harvest1 = 79" "," "Harvest2 = 80" "," "MoveToGas = 81" "," "WaitForGas = 82" "," "HarvestGas = 83" "," "ReturnGas = 84" "," "MoveToMinerals = 85" "," "WaitForMinerals = 86" "," "MiningMinerals = 87" "," "Harvest3 = 88" "," "Harvest4 = 89" "," "ReturnMinerals = 90" "," "Interrupted = 91" "," "EnterTransport = 92" "," "PickupIdle = 93" "," "PickupTransport = 94" "," "PickupBunker = 95" "," "Pickup4 = 96" "," "PowerupIdle = 97" "," "Sieging = 98" "," "Unsieging = 99" "," "WatchTarget = 100" "," "InitCreepGrowth = 101" "," "SpreadCreep = 102" "," "StoppingCreepGrowth = 103" "," "GuardianAspect = 104" "," "ArchonWarp = 105" "," "CompletingArchonSummon = 106" "," "HoldPosition = 107" "," "QueenHoldPosition = 108" "," "Cloak = 109" "," "Decloak = 110" "," "Unload = 111" "," "MoveUnload = 112" "," "FireYamatoGun = 113" "," "MoveToFireYamatoGun = 114" "," "CastLockdown = 115" "," "Burrowing = 116" "," "Burrowed = 117" "," "Unburrowing = 118" "," "CastDarkSwarm = 119" "," "CastParasite = 120" "," "CastSpawnBroodlings = 121" "," "CastEMPShockwave = 122" "," "NukeWait = 123" "," "NukeTrain = 124" "," "NukeLaunch = 125" "," "NukePaint = 126" "," "NukeUnit = 127" "," "CastNuclearStrike = 128" "," "NukeTrack = 129" "," "InitializeArbiter = 130" "," "CloakNearbyUnits = 131" "," "PlaceMine = 132" "," "RightClickAction = 133" "," "SuicideUnit = 134" "," "SuicideLocation = 135" "," "SuicideHoldPosition = 136" "," "CastRecall = 137" "," "Teleport = 138" "," "CastScannerSweep = 139" "," "Scanner = 140" "," "CastDefensiveMatrix = 141" "," "CastPsionicStorm = 142" "," "CastIrradiate = 143" "," "CastPlague = 144" "," "CastConsume = 145" "," "CastEnsnare = 146" "," "CastStasisField = 147" "," "CastHallucination = 148" "," "Hallucination2 = 149" "," "ResetCollision = 150" "," "ResetHarvestCollision = 151" "," "Patrol = 152" "," "CTFCOPInit = 153" "," "CTFCOPStarted = 154" "," "CTFCOP2 = 155" "," "ComputerAI = 156" "," "AtkMoveEP = 157" "," "HarassMove = 158" "," "AIPatrol = 159" "," "GuardPost = 160" "," "RescuePassive = 161" "," "Neutral = 162" "," "ComputerReturn = 163" "," "InitializePsiProvider = 164" "," "SelfDestructing = 165" "," "Critter = 166" "," "HiddenGun = 167" "," "OpenDoor = 168" "," "CloseDoor = 169" "," "HideTrap = 170" "," "RevealTrap = 171" "," "EnableDoodad = 172" "," "DisableDoodad = 173" "," "WarpIn = 174" "," "Medic = 175" "," "MedicHeal = 176" "," "HealMove = 177" "," "MedicHoldPosition = 178" "," "MedicHealToIdle = 179" "," "CastRestoration = 180" "," "CastDisruptionWeb = 181" "," "CastMindControl = 182" "," "DarkArchonMeld = 183" "," "CastFeedback = 184" "," "CastOpticalFlare = 185" "," "CastMaelstrom = 186" "," "JunkYardDog = 187" "," "Fatal = 188" "," "None = 189" "," "Unknown = 190" "," "MAX = 191" ","; return storage; } inline const char** _name_array() { static const char *value[Order::_size_constant]; return value; } inline bool& _initialized() { static bool value = false; return value; } } constexpr inline const Order operator +(Order::_enumerated enumerated) { return static_cast<Order>(enumerated); } constexpr inline Order::_optional_index Order::_from_value_loop(Order::_integral value, std::size_t index) { return index == _size() ? _optional_index() : better_enums_data_Order::_value_array[index]._value == value ? _optional_index(index) : _from_value_loop(value, index + 1); } constexpr inline Order::_optional_index Order::_from_string_loop(const char *name, std::size_t index) { return index == _size() ? _optional_index() : ::better_enums::_names_match(better_enums_data_Order::_raw_names()[index], name) ? _optional_index(index) : _from_string_loop(name, index + 1); } constexpr inline Order::_optional_index Order::_from_string_nocase_loop(const char *name, std::size_t index) { return index == _size() ? _optional_index() : ::better_enums::_names_match_nocase(better_enums_data_Order::_raw_names()[index], name) ? _optional_index(index) : _from_string_nocase_loop(name, index + 1); } constexpr inline Order::_integral Order::_to_integral() const { return _integral(_value); } constexpr inline Order Order::_from_integral_unchecked(_integral value) { return static_cast<_enumerated>(value); } constexpr inline Order::_optional Order::_from_integral_nothrow(_integral value) { return ::better_enums::_map_index<Order>(better_enums_data_Order::_value_array, _from_value_loop(value)); } constexpr inline Order Order::_from_integral(_integral value) { return ::better_enums::_or_throw(_from_integral_nothrow(value), "Order" "::_from_integral: invalid argument"); } inline const char* Order::_to_string() const { return ::better_enums::_or_null(::better_enums::_map_index<const char*>(better_enums_data_Order::_name_array(), _from_value_loop(::better_enums::continue_with(initialize(), _value)))); } constexpr inline Order::_optional Order::_from_string_nothrow(const char *name) { return ::better_enums::_map_index<Order>(better_enums_data_Order::_value_array, _from_string_loop(name)); } constexpr inline Order Order::_from_string(const char *name) { return ::better_enums::_or_throw(_from_string_nothrow(name), "Order" "::_from_string: invalid argument"); } constexpr inline Order::_optional Order::_from_string_nocase_nothrow(const char *name) { return ::better_enums::_map_index<Order>(better_enums_data_Order::_value_array, _from_string_nocase_loop(name)); } constexpr inline Order Order::_from_string_nocase(const char *name) { return ::better_enums::_or_throw(_from_string_nocase_nothrow(name), "Order" "::_from_string_nocase: invalid argument"); } constexpr inline bool Order::_is_valid(_integral value) { return _from_value_loop(value); } constexpr inline bool Order::_is_valid(const char *name) { return _from_string_loop(name); } constexpr inline bool Order::_is_valid_nocase(const char *name) { return _from_string_nocase_loop(name); } constexpr inline const char* Order::_name() { return "Order"; } constexpr inline Order::_value_iterable Order::_values() { return _value_iterable(better_enums_data_Order::_value_array, _size()); } inline Order::_name_iterable Order::_names() { return _name_iterable(better_enums_data_Order::_name_array(), ::better_enums::continue_with(initialize(), _size())); } inline int Order::initialize() { if (better_enums_data_Order::_initialized()) return 0; ::better_enums::_trim_names(better_enums_data_Order::_raw_names(), better_enums_data_Order::_name_array(), better_enums_data_Order::_name_storage(), _size()); better_enums_data_Order::_initialized() = true; return 0; } constexpr inline bool operator ==(const Order &a, const Order &b) { return a._to_integral() == b._to_integral(); } constexpr inline bool operator !=(const Order &a, const Order &b) { return a._to_integral() != b._to_integral(); } constexpr inline bool operator <(const Order &a, const Order &b) { return a._to_integral() < b._to_integral(); } constexpr inline bool operator <=(const Order &a, const Order &b) { return a._to_integral() <= b._to_integral(); } constexpr inline bool operator >(const Order &a, const Order &b) { return a._to_integral() > b._to_integral(); } constexpr inline bool operator >=(const Order &a, const Order &b) { return a._to_integral() >= b._to_integral(); } template <typename Char, typename Traits> std::basic_ostream<Char, Traits>& operator <<(std::basic_ostream<Char, Traits>& stream, const Order &value) { return stream << value._to_string(); } template <typename Char, typename Traits> std::basic_istream<Char, Traits>& operator >>(std::basic_istream<Char, Traits>& stream, Order &value) { std::basic_string<Char, Traits> buffer; stream >> buffer; ::better_enums::optional<Order> converted = Order::_from_string_nothrow(buffer.c_str()); if (converted) value = *converted; else stream.setstate(std::basic_istream<Char, Traits>::failbit); return stream; }
373 #endif // TC_EXPAND_LARGE_ENUMS
374 
376  UpgradeType,
377  int,
378  // corresponds to BWAPI::UpgradeTypes::Enum
379  Terran_Infantry_Armor = 0,
380  Terran_Vehicle_Plating = 1,
381  Terran_Ship_Plating = 2,
382  Zerg_Carapace = 3,
383  Zerg_Flyer_Carapace = 4,
384  Protoss_Ground_Armor = 5,
385  Protoss_Air_Armor = 6,
386  Terran_Infantry_Weapons = 7,
387  Terran_Vehicle_Weapons = 8,
388  Terran_Ship_Weapons = 9,
389  Zerg_Melee_Attacks = 10,
390  Zerg_Missile_Attacks = 11,
391  Zerg_Flyer_Attacks = 12,
392  Protoss_Ground_Weapons = 13,
393  Protoss_Air_Weapons = 14,
394  Protoss_Plasma_Shields = 15,
395  U_238_Shells = 16,
396  Ion_Thrusters = 17,
397  Titan_Reactor = 19,
398  Ocular_Implants = 20,
399  Moebius_Reactor = 21,
400  Apollo_Reactor = 22,
401  Colossus_Reactor = 23,
402  Ventral_Sacs = 24,
403  Antennae = 25,
404  Pneumatized_Carapace = 26,
405  Metabolic_Boost = 27,
406  Adrenal_Glands = 28,
407  Muscular_Augments = 29,
408  Grooved_Spines = 30,
409  Gamete_Meiosis = 31,
410  Metasynaptic_Node = 32,
411  Singularity_Charge = 33,
412  Leg_Enhancements = 34,
413  Scarab_Damage = 35,
414  Reaver_Capacity = 36,
415  Gravitic_Drive = 37,
416  Sensor_Array = 38,
417  Gravitic_Boosters = 39,
418  Khaydarin_Amulet = 40,
419  Apial_Sensors = 41,
420  Gravitic_Thrusters = 42,
421  Carrier_Capacity = 43,
422  Khaydarin_Core = 44,
423  Argus_Jewel = 47,
424  Argus_Talisman = 49,
425  Caduceus_Reactor = 51,
426  Chitinous_Plating = 52,
427  Anabolic_Synthesis = 53,
428  Charon_Boosters = 54,
429  Upgrade_60 = 60,
430  None = 61,
431  Unknow = 62,
432  MAX = 63)
433 
435  TechType,
436  int,
437  // corresponds to BWAPI::TechTypes::Enum
438  Stim_Packs = 0,
439  Lockdown = 1,
440  EMP_Shockwave = 2,
441  Spider_Mines = 3,
442  Scanner_Sweep = 4,
443  Tank_Siege_Mode = 5,
444  Defensive_Matrix = 6,
445  Irradiate = 7,
446  Yamato_Gun = 8,
447  Cloaking_Field = 9,
448  Personnel_Cloaking = 10,
449  Burrowing = 11,
450  Infestation = 12,
451  Spawn_Broodlings = 13,
452  Dark_Swarm = 14,
453  Plague = 15,
454  Consume = 16,
455  Ensnare = 17,
456  Parasite = 18,
457  Psionic_Storm = 19,
458  Hallucination = 20,
459  Recall = 21,
460  Stasis_Field = 22,
461  Archon_Warp = 23,
462  Restoration = 24,
463  Disruption_Web = 25,
464  Unused_26 = 26,
465  Mind_Control = 27,
466  Dark_Archon_Meld = 28,
467  Feedback = 29,
468  Optical_Flare = 30,
469  Maelstrom = 31,
470  Lurker_Aspect = 32,
471  Unused_33 = 33,
472  Healing = 34,
473  None = 44,
474  Nuclear_Strike = 45,
475  Unknown = 46,
476  MAX = 47)
477 
478 #ifndef TC_EXPAND_LARGE_ENUMS
479 // Be sure to update the expanded version below when changing this
481  UnitType,
482  int,
483  // corresponds to BWAPI::UnitTypes::Enum
484  Terran_Marine = 0,
485  Terran_Ghost = 1,
486  Terran_Vulture = 2,
487  Terran_Goliath = 3,
488  Terran_Siege_Tank_Tank_Mode = 5,
489  Terran_SCV = 7,
490  Terran_Wraith = 8,
491  Terran_Science_Vessel = 9,
492  Terran_Dropship = 11,
493  Terran_Battlecruiser = 12,
494  Terran_Vulture_Spider_Mine = 13,
495  Terran_Nuclear_Missile = 14,
496  Terran_Civilian = 15,
497  Terran_Siege_Tank_Siege_Mode = 30,
498  Terran_Firebat = 32,
499  Spell_Scanner_Sweep = 33,
500  Terran_Medic = 34,
501  Zerg_Larva = 35,
502  Zerg_Egg = 36,
503  Zerg_Zergling = 37,
504  Zerg_Hydralisk = 38,
505  Zerg_Ultralisk = 39,
506  Zerg_Broodling = 40,
507  Zerg_Drone = 41,
508  Zerg_Overlord = 42,
509  Zerg_Mutalisk = 43,
510  Zerg_Guardian = 44,
511  Zerg_Queen = 45,
512  Zerg_Defiler = 46,
513  Zerg_Scourge = 47,
514  Zerg_Infested_Terran = 50,
515  Terran_Valkyrie = 58,
516  Zerg_Cocoon = 59,
517  Protoss_Corsair = 60,
518  Protoss_Dark_Templar = 61,
519  Zerg_Devourer = 62,
520  Protoss_Dark_Archon = 63,
521  Protoss_Probe = 64,
522  Protoss_Zealot = 65,
523  Protoss_Dragoon = 66,
524  Protoss_High_Templar = 67,
525  Protoss_Archon = 68,
526  Protoss_Shuttle = 69,
527  Protoss_Scout = 70,
528  Protoss_Arbiter = 71,
529  Protoss_Carrier = 72,
530  Protoss_Interceptor = 73,
531  Protoss_Reaver = 83,
532  Protoss_Observer = 84,
533  Protoss_Scarab = 85,
534  Critter_Rhynadon = 89,
535  Critter_Bengalaas = 90,
536  Critter_Scantid = 93,
537  Critter_Kakaru = 94,
538  Critter_Ragnasaur = 95,
539  Critter_Ursadon = 96,
540  Zerg_Lurker_Egg = 97,
541  Zerg_Lurker = 103,
542  Spell_Disruption_Web = 105,
543  Terran_Command_Center = 106,
544  Terran_Comsat_Station = 107,
545  Terran_Nuclear_Silo = 108,
546  Terran_Supply_Depot = 109,
547  Terran_Refinery = 110,
548  Terran_Barracks = 111,
549  Terran_Academy = 112,
550  Terran_Factory = 113,
551  Terran_Starport = 114,
552  Terran_Control_Tower = 115,
553  Terran_Science_Facility = 116,
554  Terran_Covert_Ops = 117,
555  Terran_Physics_Lab = 118,
556  Terran_Machine_Shop = 120,
557  Terran_Engineering_Bay = 122,
558  Terran_Armory = 123,
559  Terran_Missile_Turret = 124,
560  Terran_Bunker = 125,
561  Zerg_Infested_Command_Center = 130,
562  Zerg_Hatchery = 131,
563  Zerg_Lair = 132,
564  Zerg_Hive = 133,
565  Zerg_Nydus_Canal = 134,
566  Zerg_Hydralisk_Den = 135,
567  Zerg_Defiler_Mound = 136,
568  Zerg_Greater_Spire = 137,
569  Zerg_Queens_Nest = 138,
570  Zerg_Evolution_Chamber = 139,
571  Zerg_Ultralisk_Cavern = 140,
572  Zerg_Spire = 141,
573  Zerg_Spawning_Pool = 142,
574  Zerg_Creep_Colony = 143,
575  Zerg_Spore_Colony = 144,
576  Zerg_Sunken_Colony = 146,
577  Zerg_Extractor = 149,
578  Protoss_Nexus = 154,
579  Protoss_Robotics_Facility = 155,
580  Protoss_Pylon = 156,
581  Protoss_Assimilator = 157,
582  Protoss_Observatory = 159,
583  Protoss_Gateway = 160,
584  Protoss_Photon_Cannon = 162,
585  Protoss_Citadel_of_Adun = 163,
586  Protoss_Cybernetics_Core = 164,
587  Protoss_Templar_Archives = 165,
588  Protoss_Forge = 166,
589  Protoss_Stargate = 167,
590  Protoss_Fleet_Beacon = 169,
591  Protoss_Arbiter_Tribunal = 170,
592  Protoss_Robotics_Support_Bay = 171,
593  Protoss_Shield_Battery = 172,
594  Resource_Mineral_Field = 176,
595  Resource_Mineral_Field_Type_2 = 177,
596  Resource_Mineral_Field_Type_3 = 178,
597  Resource_Vespene_Geyser = 188,
598  Spell_Dark_Swarm = 202,
599  Special_Pit_Door = 207,
600  Special_Right_Pit_Door = 208,
601  MAX = 233)
602 #else // TC_EXPAND_LARGE_ENUMS
603 namespace better_enums_data_UnitType {} class UnitType { private: typedef ::better_enums::optional<UnitType> _optional; typedef ::better_enums::optional<std::size_t> _optional_index; public: typedef int _integral; enum _enumerated : int { Terran_Marine = 0, Terran_Ghost = 1, Terran_Vulture = 2, Terran_Goliath = 3, Terran_Siege_Tank_Tank_Mode = 5, Terran_SCV = 7, Terran_Wraith = 8, Terran_Science_Vessel = 9, Terran_Dropship = 11, Terran_Battlecruiser = 12, Terran_Vulture_Spider_Mine = 13, Terran_Nuclear_Missile = 14, Terran_Civilian = 15, Terran_Siege_Tank_Siege_Mode = 30, Terran_Firebat = 32, Spell_Scanner_Sweep = 33, Terran_Medic = 34, Zerg_Larva = 35, Zerg_Egg = 36, Zerg_Zergling = 37, Zerg_Hydralisk = 38, Zerg_Ultralisk = 39, Zerg_Broodling = 40, Zerg_Drone = 41, Zerg_Overlord = 42, Zerg_Mutalisk = 43, Zerg_Guardian = 44, Zerg_Queen = 45, Zerg_Defiler = 46, Zerg_Scourge = 47, Zerg_Infested_Terran = 50, Terran_Valkyrie = 58, Zerg_Cocoon = 59, Protoss_Corsair = 60, Protoss_Dark_Templar = 61, Zerg_Devourer = 62, Protoss_Dark_Archon = 63, Protoss_Probe = 64, Protoss_Zealot = 65, Protoss_Dragoon = 66, Protoss_High_Templar = 67, Protoss_Archon = 68, Protoss_Shuttle = 69, Protoss_Scout = 70, Protoss_Arbiter = 71, Protoss_Carrier = 72, Protoss_Interceptor = 73, Protoss_Reaver = 83, Protoss_Observer = 84, Protoss_Scarab = 85, Critter_Rhynadon = 89, Critter_Bengalaas = 90, Critter_Scantid = 93, Critter_Kakaru = 94, Critter_Ragnasaur = 95, Critter_Ursadon = 96, Zerg_Lurker_Egg = 97, Zerg_Lurker = 103, Spell_Disruption_Web = 105, Terran_Command_Center = 106, Terran_Comsat_Station = 107, Terran_Nuclear_Silo = 108, Terran_Supply_Depot = 109, Terran_Refinery = 110, Terran_Barracks = 111, Terran_Academy = 112, Terran_Factory = 113, Terran_Starport = 114, Terran_Control_Tower = 115, Terran_Science_Facility = 116, Terran_Covert_Ops = 117, Terran_Physics_Lab = 118, Terran_Machine_Shop = 120, Terran_Engineering_Bay = 122, Terran_Armory = 123, Terran_Missile_Turret = 124, Terran_Bunker = 125, Zerg_Infested_Command_Center = 130, Zerg_Hatchery = 131, Zerg_Lair = 132, Zerg_Hive = 133, Zerg_Nydus_Canal = 134, Zerg_Hydralisk_Den = 135, Zerg_Defiler_Mound = 136, Zerg_Greater_Spire = 137, Zerg_Queens_Nest = 138, Zerg_Evolution_Chamber = 139, Zerg_Ultralisk_Cavern = 140, Zerg_Spire = 141, Zerg_Spawning_Pool = 142, Zerg_Creep_Colony = 143, Zerg_Spore_Colony = 144, Zerg_Sunken_Colony = 146, Zerg_Extractor = 149, Protoss_Nexus = 154, Protoss_Robotics_Facility = 155, Protoss_Pylon = 156, Protoss_Assimilator = 157, Protoss_Observatory = 159, Protoss_Gateway = 160, Protoss_Photon_Cannon = 162, Protoss_Citadel_of_Adun = 163, Protoss_Cybernetics_Core = 164, Protoss_Templar_Archives = 165, Protoss_Forge = 166, Protoss_Stargate = 167, Protoss_Fleet_Beacon = 169, Protoss_Arbiter_Tribunal = 170, Protoss_Robotics_Support_Bay = 171, Protoss_Shield_Battery = 172, Resource_Mineral_Field = 176, Resource_Mineral_Field_Type_2 = 177, Resource_Mineral_Field_Type_3 = 178, Resource_Vespene_Geyser = 188, Spell_Dark_Swarm = 202, Special_Pit_Door = 207, Special_Right_Pit_Door = 208, MAX = 233 }; constexpr UnitType(_enumerated value) : _value(value) { } constexpr operator _enumerated() const { return _enumerated(_value); } constexpr _integral _to_integral() const; constexpr static UnitType _from_integral(_integral value); constexpr static UnitType _from_integral_unchecked(_integral value); constexpr static _optional _from_integral_nothrow(_integral value); const char* _to_string() const; constexpr static UnitType _from_string(const char *name); constexpr static _optional _from_string_nothrow(const char *name); constexpr static UnitType _from_string_nocase(const char *name); constexpr static _optional _from_string_nocase_nothrow(const char *name); constexpr static bool _is_valid(_integral value); constexpr static bool _is_valid(const char *name); constexpr static bool _is_valid_nocase(const char *name); typedef ::better_enums::_Iterable<UnitType> _value_iterable; typedef ::better_enums::_Iterable<const char*> _name_iterable; typedef _value_iterable::iterator _value_iterator; typedef _name_iterable::iterator _name_iterator; constexpr static const std::size_t _size_constant = 118; constexpr static std::size_t _size() { return _size_constant; } constexpr static const char* _name(); constexpr static _value_iterable _values(); static _name_iterable _names(); _integral _value; private: UnitType() : _value(0) { } private: explicit constexpr UnitType(const _integral &value) : _value(value) { } static int initialize(); constexpr static _optional_index _from_value_loop(_integral value, std::size_t index = 0); constexpr static _optional_index _from_string_loop(const char *name, std::size_t index = 0); constexpr static _optional_index _from_string_nocase_loop(const char *name, std::size_t index = 0); friend struct ::better_enums::_initialize_at_program_start<UnitType>; }; namespace better_enums_data_UnitType { static ::better_enums::_initialize_at_program_start<UnitType> _force_initialization; enum _PutNamesInThisScopeAlso { Terran_Marine = 0, Terran_Ghost = 1, Terran_Vulture = 2, Terran_Goliath = 3, Terran_Siege_Tank_Tank_Mode = 5, Terran_SCV = 7, Terran_Wraith = 8, Terran_Science_Vessel = 9, Terran_Dropship = 11, Terran_Battlecruiser = 12, Terran_Vulture_Spider_Mine = 13, Terran_Nuclear_Missile = 14, Terran_Civilian = 15, Terran_Siege_Tank_Siege_Mode = 30, Terran_Firebat = 32, Spell_Scanner_Sweep = 33, Terran_Medic = 34, Zerg_Larva = 35, Zerg_Egg = 36, Zerg_Zergling = 37, Zerg_Hydralisk = 38, Zerg_Ultralisk = 39, Zerg_Broodling = 40, Zerg_Drone = 41, Zerg_Overlord = 42, Zerg_Mutalisk = 43, Zerg_Guardian = 44, Zerg_Queen = 45, Zerg_Defiler = 46, Zerg_Scourge = 47, Zerg_Infested_Terran = 50, Terran_Valkyrie = 58, Zerg_Cocoon = 59, Protoss_Corsair = 60, Protoss_Dark_Templar = 61, Zerg_Devourer = 62, Protoss_Dark_Archon = 63, Protoss_Probe = 64, Protoss_Zealot = 65, Protoss_Dragoon = 66, Protoss_High_Templar = 67, Protoss_Archon = 68, Protoss_Shuttle = 69, Protoss_Scout = 70, Protoss_Arbiter = 71, Protoss_Carrier = 72, Protoss_Interceptor = 73, Protoss_Reaver = 83, Protoss_Observer = 84, Protoss_Scarab = 85, Critter_Rhynadon = 89, Critter_Bengalaas = 90, Critter_Scantid = 93, Critter_Kakaru = 94, Critter_Ragnasaur = 95, Critter_Ursadon = 96, Zerg_Lurker_Egg = 97, Zerg_Lurker = 103, Spell_Disruption_Web = 105, Terran_Command_Center = 106, Terran_Comsat_Station = 107, Terran_Nuclear_Silo = 108, Terran_Supply_Depot = 109, Terran_Refinery = 110, Terran_Barracks = 111, Terran_Academy = 112, Terran_Factory = 113, Terran_Starport = 114, Terran_Control_Tower = 115, Terran_Science_Facility = 116, Terran_Covert_Ops = 117, Terran_Physics_Lab = 118, Terran_Machine_Shop = 120, Terran_Engineering_Bay = 122, Terran_Armory = 123, Terran_Missile_Turret = 124, Terran_Bunker = 125, Zerg_Infested_Command_Center = 130, Zerg_Hatchery = 131, Zerg_Lair = 132, Zerg_Hive = 133, Zerg_Nydus_Canal = 134, Zerg_Hydralisk_Den = 135, Zerg_Defiler_Mound = 136, Zerg_Greater_Spire = 137, Zerg_Queens_Nest = 138, Zerg_Evolution_Chamber = 139, Zerg_Ultralisk_Cavern = 140, Zerg_Spire = 141, Zerg_Spawning_Pool = 142, Zerg_Creep_Colony = 143, Zerg_Spore_Colony = 144, Zerg_Sunken_Colony = 146, Zerg_Extractor = 149, Protoss_Nexus = 154, Protoss_Robotics_Facility = 155, Protoss_Pylon = 156, Protoss_Assimilator = 157, Protoss_Observatory = 159, Protoss_Gateway = 160, Protoss_Photon_Cannon = 162, Protoss_Citadel_of_Adun = 163, Protoss_Cybernetics_Core = 164, Protoss_Templar_Archives = 165, Protoss_Forge = 166, Protoss_Stargate = 167, Protoss_Fleet_Beacon = 169, Protoss_Arbiter_Tribunal = 170, Protoss_Robotics_Support_Bay = 171, Protoss_Shield_Battery = 172, Resource_Mineral_Field = 176, Resource_Mineral_Field_Type_2 = 177, Resource_Mineral_Field_Type_3 = 178, Resource_Vespene_Geyser = 188, Spell_Dark_Swarm = 202, Special_Pit_Door = 207, Special_Right_Pit_Door = 208, MAX = 233 }; constexpr const UnitType _value_array[] = { ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Marine = 0), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Ghost = 1), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Vulture = 2), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Goliath = 3), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Siege_Tank_Tank_Mode = 5), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_SCV = 7), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Wraith = 8), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Science_Vessel = 9), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Dropship = 11), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Battlecruiser = 12), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Vulture_Spider_Mine = 13), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Nuclear_Missile = 14), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Civilian = 15), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Siege_Tank_Siege_Mode = 30), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Firebat = 32), ((::better_enums::_eat_assign<UnitType>)UnitType::Spell_Scanner_Sweep = 33), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Medic = 34), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Larva = 35), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Egg = 36), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Zergling = 37), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Hydralisk = 38), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Ultralisk = 39), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Broodling = 40), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Drone = 41), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Overlord = 42), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Mutalisk = 43), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Guardian = 44), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Queen = 45), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Defiler = 46), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Scourge = 47), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Infested_Terran = 50), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Valkyrie = 58), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Cocoon = 59), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Corsair = 60), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Dark_Templar = 61), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Devourer = 62), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Dark_Archon = 63), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Probe = 64), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Zealot = 65), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Dragoon = 66), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_High_Templar = 67), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Archon = 68), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Shuttle = 69), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Scout = 70), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Arbiter = 71), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Carrier = 72), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Interceptor = 73), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Reaver = 83), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Observer = 84), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Scarab = 85), ((::better_enums::_eat_assign<UnitType>)UnitType::Critter_Rhynadon = 89), ((::better_enums::_eat_assign<UnitType>)UnitType::Critter_Bengalaas = 90), ((::better_enums::_eat_assign<UnitType>)UnitType::Critter_Scantid = 93), ((::better_enums::_eat_assign<UnitType>)UnitType::Critter_Kakaru = 94), ((::better_enums::_eat_assign<UnitType>)UnitType::Critter_Ragnasaur = 95), ((::better_enums::_eat_assign<UnitType>)UnitType::Critter_Ursadon = 96), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Lurker_Egg = 97), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Lurker = 103), ((::better_enums::_eat_assign<UnitType>)UnitType::Spell_Disruption_Web = 105), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Command_Center = 106), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Comsat_Station = 107), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Nuclear_Silo = 108), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Supply_Depot = 109), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Refinery = 110), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Barracks = 111), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Academy = 112), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Factory = 113), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Starport = 114), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Control_Tower = 115), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Science_Facility = 116), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Covert_Ops = 117), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Physics_Lab = 118), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Machine_Shop = 120), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Engineering_Bay = 122), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Armory = 123), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Missile_Turret = 124), ((::better_enums::_eat_assign<UnitType>)UnitType::Terran_Bunker = 125), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Infested_Command_Center = 130), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Hatchery = 131), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Lair = 132), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Hive = 133), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Nydus_Canal = 134), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Hydralisk_Den = 135), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Defiler_Mound = 136), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Greater_Spire = 137), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Queens_Nest = 138), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Evolution_Chamber = 139), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Ultralisk_Cavern = 140), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Spire = 141), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Spawning_Pool = 142), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Creep_Colony = 143), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Spore_Colony = 144), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Sunken_Colony = 146), ((::better_enums::_eat_assign<UnitType>)UnitType::Zerg_Extractor = 149), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Nexus = 154), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Robotics_Facility = 155), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Pylon = 156), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Assimilator = 157), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Observatory = 159), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Gateway = 160), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Photon_Cannon = 162), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Citadel_of_Adun = 163), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Cybernetics_Core = 164), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Templar_Archives = 165), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Forge = 166), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Stargate = 167), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Fleet_Beacon = 169), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Arbiter_Tribunal = 170), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Robotics_Support_Bay = 171), ((::better_enums::_eat_assign<UnitType>)UnitType::Protoss_Shield_Battery = 172), ((::better_enums::_eat_assign<UnitType>)UnitType::Resource_Mineral_Field = 176), ((::better_enums::_eat_assign<UnitType>)UnitType::Resource_Mineral_Field_Type_2 = 177), ((::better_enums::_eat_assign<UnitType>)UnitType::Resource_Mineral_Field_Type_3 = 178), ((::better_enums::_eat_assign<UnitType>)UnitType::Resource_Vespene_Geyser = 188), ((::better_enums::_eat_assign<UnitType>)UnitType::Spell_Dark_Swarm = 202), ((::better_enums::_eat_assign<UnitType>)UnitType::Special_Pit_Door = 207), ((::better_enums::_eat_assign<UnitType>)UnitType::Special_Right_Pit_Door = 208), ((::better_enums::_eat_assign<UnitType>)UnitType::MAX = 233), }; constexpr const char *_the_raw_names[] = { "Terran_Marine = 0", "Terran_Ghost = 1", "Terran_Vulture = 2", "Terran_Goliath = 3", "Terran_Siege_Tank_Tank_Mode = 5", "Terran_SCV = 7", "Terran_Wraith = 8", "Terran_Science_Vessel = 9", "Terran_Dropship = 11", "Terran_Battlecruiser = 12", "Terran_Vulture_Spider_Mine = 13", "Terran_Nuclear_Missile = 14", "Terran_Civilian = 15", "Terran_Siege_Tank_Siege_Mode = 30", "Terran_Firebat = 32", "Spell_Scanner_Sweep = 33", "Terran_Medic = 34", "Zerg_Larva = 35", "Zerg_Egg = 36", "Zerg_Zergling = 37", "Zerg_Hydralisk = 38", "Zerg_Ultralisk = 39", "Zerg_Broodling = 40", "Zerg_Drone = 41", "Zerg_Overlord = 42", "Zerg_Mutalisk = 43", "Zerg_Guardian = 44", "Zerg_Queen = 45", "Zerg_Defiler = 46", "Zerg_Scourge = 47", "Zerg_Infested_Terran = 50", "Terran_Valkyrie = 58", "Zerg_Cocoon = 59", "Protoss_Corsair = 60", "Protoss_Dark_Templar = 61", "Zerg_Devourer = 62", "Protoss_Dark_Archon = 63", "Protoss_Probe = 64", "Protoss_Zealot = 65", "Protoss_Dragoon = 66", "Protoss_High_Templar = 67", "Protoss_Archon = 68", "Protoss_Shuttle = 69", "Protoss_Scout = 70", "Protoss_Arbiter = 71", "Protoss_Carrier = 72", "Protoss_Interceptor = 73", "Protoss_Reaver = 83", "Protoss_Observer = 84", "Protoss_Scarab = 85", "Critter_Rhynadon = 89", "Critter_Bengalaas = 90", "Critter_Scantid = 93", "Critter_Kakaru = 94", "Critter_Ragnasaur = 95", "Critter_Ursadon = 96", "Zerg_Lurker_Egg = 97", "Zerg_Lurker = 103", "Spell_Disruption_Web = 105", "Terran_Command_Center = 106", "Terran_Comsat_Station = 107", "Terran_Nuclear_Silo = 108", "Terran_Supply_Depot = 109", "Terran_Refinery = 110", "Terran_Barracks = 111", "Terran_Academy = 112", "Terran_Factory = 113", "Terran_Starport = 114", "Terran_Control_Tower = 115", "Terran_Science_Facility = 116", "Terran_Covert_Ops = 117", "Terran_Physics_Lab = 118", "Terran_Machine_Shop = 120", "Terran_Engineering_Bay = 122", "Terran_Armory = 123", "Terran_Missile_Turret = 124", "Terran_Bunker = 125", "Zerg_Infested_Command_Center = 130", "Zerg_Hatchery = 131", "Zerg_Lair = 132", "Zerg_Hive = 133", "Zerg_Nydus_Canal = 134", "Zerg_Hydralisk_Den = 135", "Zerg_Defiler_Mound = 136", "Zerg_Greater_Spire = 137", "Zerg_Queens_Nest = 138", "Zerg_Evolution_Chamber = 139", "Zerg_Ultralisk_Cavern = 140", "Zerg_Spire = 141", "Zerg_Spawning_Pool = 142", "Zerg_Creep_Colony = 143", "Zerg_Spore_Colony = 144", "Zerg_Sunken_Colony = 146", "Zerg_Extractor = 149", "Protoss_Nexus = 154", "Protoss_Robotics_Facility = 155", "Protoss_Pylon = 156", "Protoss_Assimilator = 157", "Protoss_Observatory = 159", "Protoss_Gateway = 160", "Protoss_Photon_Cannon = 162", "Protoss_Citadel_of_Adun = 163", "Protoss_Cybernetics_Core = 164", "Protoss_Templar_Archives = 165", "Protoss_Forge = 166", "Protoss_Stargate = 167", "Protoss_Fleet_Beacon = 169", "Protoss_Arbiter_Tribunal = 170", "Protoss_Robotics_Support_Bay = 171", "Protoss_Shield_Battery = 172", "Resource_Mineral_Field = 176", "Resource_Mineral_Field_Type_2 = 177", "Resource_Mineral_Field_Type_3 = 178", "Resource_Vespene_Geyser = 188", "Spell_Dark_Swarm = 202", "Special_Pit_Door = 207", "Special_Right_Pit_Door = 208", "MAX = 233", }; constexpr const char * const * _raw_names() { return _the_raw_names; } inline char* _name_storage() { static char storage[] = "Terran_Marine = 0" "," "Terran_Ghost = 1" "," "Terran_Vulture = 2" "," "Terran_Goliath = 3" "," "Terran_Siege_Tank_Tank_Mode = 5" "," "Terran_SCV = 7" "," "Terran_Wraith = 8" "," "Terran_Science_Vessel = 9" "," "Terran_Dropship = 11" "," "Terran_Battlecruiser = 12" "," "Terran_Vulture_Spider_Mine = 13" "," "Terran_Nuclear_Missile = 14" "," "Terran_Civilian = 15" "," "Terran_Siege_Tank_Siege_Mode = 30" "," "Terran_Firebat = 32" "," "Spell_Scanner_Sweep = 33" "," "Terran_Medic = 34" "," "Zerg_Larva = 35" "," "Zerg_Egg = 36" "," "Zerg_Zergling = 37" "," "Zerg_Hydralisk = 38" "," "Zerg_Ultralisk = 39" "," "Zerg_Broodling = 40" "," "Zerg_Drone = 41" "," "Zerg_Overlord = 42" "," "Zerg_Mutalisk = 43" "," "Zerg_Guardian = 44" "," "Zerg_Queen = 45" "," "Zerg_Defiler = 46" "," "Zerg_Scourge = 47" "," "Zerg_Infested_Terran = 50" "," "Terran_Valkyrie = 58" "," "Zerg_Cocoon = 59" "," "Protoss_Corsair = 60" "," "Protoss_Dark_Templar = 61" "," "Zerg_Devourer = 62" "," "Protoss_Dark_Archon = 63" "," "Protoss_Probe = 64" "," "Protoss_Zealot = 65" "," "Protoss_Dragoon = 66" "," "Protoss_High_Templar = 67" "," "Protoss_Archon = 68" "," "Protoss_Shuttle = 69" "," "Protoss_Scout = 70" "," "Protoss_Arbiter = 71" "," "Protoss_Carrier = 72" "," "Protoss_Interceptor = 73" "," "Protoss_Reaver = 83" "," "Protoss_Observer = 84" "," "Protoss_Scarab = 85" "," "Critter_Rhynadon = 89" "," "Critter_Bengalaas = 90" "," "Critter_Scantid = 93" "," "Critter_Kakaru = 94" "," "Critter_Ragnasaur = 95" "," "Critter_Ursadon = 96" "," "Zerg_Lurker_Egg = 97" "," "Zerg_Lurker = 103" "," "Spell_Disruption_Web = 105" "," "Terran_Command_Center = 106" "," "Terran_Comsat_Station = 107" "," "Terran_Nuclear_Silo = 108" "," "Terran_Supply_Depot = 109" "," "Terran_Refinery = 110" "," "Terran_Barracks = 111" "," "Terran_Academy = 112" "," "Terran_Factory = 113" "," "Terran_Starport = 114" "," "Terran_Control_Tower = 115" "," "Terran_Science_Facility = 116" "," "Terran_Covert_Ops = 117" "," "Terran_Physics_Lab = 118" "," "Terran_Machine_Shop = 120" "," "Terran_Engineering_Bay = 122" "," "Terran_Armory = 123" "," "Terran_Missile_Turret = 124" "," "Terran_Bunker = 125" "," "Zerg_Infested_Command_Center = 130" "," "Zerg_Hatchery = 131" "," "Zerg_Lair = 132" "," "Zerg_Hive = 133" "," "Zerg_Nydus_Canal = 134" "," "Zerg_Hydralisk_Den = 135" "," "Zerg_Defiler_Mound = 136" "," "Zerg_Greater_Spire = 137" "," "Zerg_Queens_Nest = 138" "," "Zerg_Evolution_Chamber = 139" "," "Zerg_Ultralisk_Cavern = 140" "," "Zerg_Spire = 141" "," "Zerg_Spawning_Pool = 142" "," "Zerg_Creep_Colony = 143" "," "Zerg_Spore_Colony = 144" "," "Zerg_Sunken_Colony = 146" "," "Zerg_Extractor = 149" "," "Protoss_Nexus = 154" "," "Protoss_Robotics_Facility = 155" "," "Protoss_Pylon = 156" "," "Protoss_Assimilator = 157" "," "Protoss_Observatory = 159" "," "Protoss_Gateway = 160" "," "Protoss_Photon_Cannon = 162" "," "Protoss_Citadel_of_Adun = 163" "," "Protoss_Cybernetics_Core = 164" "," "Protoss_Templar_Archives = 165" "," "Protoss_Forge = 166" "," "Protoss_Stargate = 167" "," "Protoss_Fleet_Beacon = 169" "," "Protoss_Arbiter_Tribunal = 170" "," "Protoss_Robotics_Support_Bay = 171" "," "Protoss_Shield_Battery = 172" "," "Resource_Mineral_Field = 176" "," "Resource_Mineral_Field_Type_2 = 177" "," "Resource_Mineral_Field_Type_3 = 178" "," "Resource_Vespene_Geyser = 188" "," "Spell_Dark_Swarm = 202" "," "Special_Pit_Door = 207" "," "Special_Right_Pit_Door = 208" "," "MAX = 233" ","; return storage; } inline const char** _name_array() { static const char *value[UnitType::_size_constant]; return value; } inline bool& _initialized() { static bool value = false; return value; } } constexpr inline const UnitType operator +(UnitType::_enumerated enumerated) { return static_cast<UnitType>(enumerated); } constexpr inline UnitType::_optional_index UnitType::_from_value_loop(UnitType::_integral value, std::size_t index) { return index == _size() ? _optional_index() : better_enums_data_UnitType::_value_array[index]._value == value ? _optional_index(index) : _from_value_loop(value, index + 1); } constexpr inline UnitType::_optional_index UnitType::_from_string_loop(const char *name, std::size_t index) { return index == _size() ? _optional_index() : ::better_enums::_names_match(better_enums_data_UnitType::_raw_names()[index], name) ? _optional_index(index) : _from_string_loop(name, index + 1); } constexpr inline UnitType::_optional_index UnitType::_from_string_nocase_loop(const char *name, std::size_t index) { return index == _size() ? _optional_index() : ::better_enums::_names_match_nocase(better_enums_data_UnitType::_raw_names()[index], name) ? _optional_index(index) : _from_string_nocase_loop(name, index + 1); } constexpr inline UnitType::_integral UnitType::_to_integral() const { return _integral(_value); } constexpr inline UnitType UnitType::_from_integral_unchecked(_integral value) { return static_cast<_enumerated>(value); } constexpr inline UnitType::_optional UnitType::_from_integral_nothrow(_integral value) { return ::better_enums::_map_index<UnitType>(better_enums_data_UnitType::_value_array, _from_value_loop(value)); } constexpr inline UnitType UnitType::_from_integral(_integral value) { return ::better_enums::_or_throw(_from_integral_nothrow(value), "UnitType" "::_from_integral: invalid argument"); } inline const char* UnitType::_to_string() const { return ::better_enums::_or_null(::better_enums::_map_index<const char*>(better_enums_data_UnitType::_name_array(), _from_value_loop(::better_enums::continue_with(initialize(), _value)))); } constexpr inline UnitType::_optional UnitType::_from_string_nothrow(const char *name) { return ::better_enums::_map_index<UnitType>(better_enums_data_UnitType::_value_array, _from_string_loop(name)); } constexpr inline UnitType UnitType::_from_string(const char *name) { return ::better_enums::_or_throw(_from_string_nothrow(name), "UnitType" "::_from_string: invalid argument"); } constexpr inline UnitType::_optional UnitType::_from_string_nocase_nothrow(const char *name) { return ::better_enums::_map_index<UnitType>(better_enums_data_UnitType::_value_array, _from_string_nocase_loop(name)); } constexpr inline UnitType UnitType::_from_string_nocase(const char *name) { return ::better_enums::_or_throw(_from_string_nocase_nothrow(name), "UnitType" "::_from_string_nocase: invalid argument"); } constexpr inline bool UnitType::_is_valid(_integral value) { return _from_value_loop(value); } constexpr inline bool UnitType::_is_valid(const char *name) { return _from_string_loop(name); } constexpr inline bool UnitType::_is_valid_nocase(const char *name) { return _from_string_nocase_loop(name); } constexpr inline const char* UnitType::_name() { return "UnitType"; } constexpr inline UnitType::_value_iterable UnitType::_values() { return _value_iterable(better_enums_data_UnitType::_value_array, _size()); } inline UnitType::_name_iterable UnitType::_names() { return _name_iterable(better_enums_data_UnitType::_name_array(), ::better_enums::continue_with(initialize(), _size())); } inline int UnitType::initialize() { if (better_enums_data_UnitType::_initialized()) return 0; ::better_enums::_trim_names(better_enums_data_UnitType::_raw_names(), better_enums_data_UnitType::_name_array(), better_enums_data_UnitType::_name_storage(), _size()); better_enums_data_UnitType::_initialized() = true; return 0; } constexpr inline bool operator ==(const UnitType &a, const UnitType &b) { return a._to_integral() == b._to_integral(); } constexpr inline bool operator !=(const UnitType &a, const UnitType &b) { return a._to_integral() != b._to_integral(); } constexpr inline bool operator <(const UnitType &a, const UnitType &b) { return a._to_integral() < b._to_integral(); } constexpr inline bool operator <=(const UnitType &a, const UnitType &b) { return a._to_integral() <= b._to_integral(); } constexpr inline bool operator >(const UnitType &a, const UnitType &b) { return a._to_integral() > b._to_integral(); } constexpr inline bool operator >=(const UnitType &a, const UnitType &b) { return a._to_integral() >= b._to_integral(); } template <typename Char, typename Traits> std::basic_ostream<Char, Traits>& operator <<(std::basic_ostream<Char, Traits>& stream, const UnitType &value) { return stream << value._to_string(); } template <typename Char, typename Traits> std::basic_istream<Char, Traits>& operator >>(std::basic_istream<Char, Traits>& stream, UnitType &value) { std::basic_string<Char, Traits> buffer; stream >> buffer; ::better_enums::optional<UnitType> converted = UnitType::_from_string_nothrow(buffer.c_str()); if (converted) value = *converted; else stream.setstate(std::basic_istream<Char, Traits>::failbit); return stream; }
604 #endif // TC_EXPAND_LARGE_ENUMS
605 
607  BulletType,
608  int,
609  // corresponds to BWAPI::BulletTypes::Enum
610  Melee = 0,
611  Fusion_Cutter_Hit = 141,
612  Gauss_Rifle_Hit = 142,
613  C_10_Canister_Rifle_Hit = 143,
614  Gemini_Missiles = 144,
615  Fragmentation_Grenade = 145,
616  Longbolt_Missile = 146,
617  Unused_Lockdown = 147,
618  ATS_ATA_Laser_Battery = 148,
619  Burst_Lasers = 149,
620  Arclite_Shock_Cannon_Hit = 150,
621  EMP_Missile = 151,
622  Dual_Photon_Blasters_Hit = 152,
623  Particle_Beam_Hit = 153,
624  Anti_Matter_Missile = 154,
625  Pulse_Cannon = 155,
626  Psionic_Shockwave_Hit = 156,
627  Psionic_Storm = 157,
628  Yamato_Gun = 158,
629  Phase_Disruptor = 159,
630  STA_STS_Cannon_Overlay = 160,
631  Sunken_Colony_Tentacle = 161,
632  Venom_Unused = 162,
633  Acid_Spore = 163,
634  Plasma_Drip_Unused = 164,
635  Glave_Wurm = 165,
636  Seeker_Spores = 166,
637  Queen_Spell_Carrier = 167,
638  Plague_Cloud = 168,
639  Consume = 169,
640  Ensnare = 170,
641  Needle_Spine_Hit = 171,
642  Invisible = 172,
643  Optical_Flare_Grenade = 201,
644  Halo_Rockets = 202,
645  Subterranean_Spines = 203,
646  Corrosive_Acid_Shot = 204,
647  Corrosive_Acid_Hit = 205,
648  Neutron_Flare = 206,
649  None = 209,
650  Unknown = 210,
651  MAX = 211)
652 
653 #ifndef TC_EXPAND_LARGE_ENUMS
654 // Be sure to update the expanded version below when changing this
656  WeaponType,
657  int,
658  // corresponds to BWAPI::WeaponTypes::Enum
659  Gauss_Rifle = 0,
660  Gauss_Rifle_Jim_Raynor = 1,
661  C_10_Canister_Rifle = 2,
662  C_10_Canister_Rifle_Sarah_Kerrigan = 3,
663  Fragmentation_Grenade = 4,
664  Fragmentation_Grenade_Jim_Raynor = 5,
665  Spider_Mines = 6,
666  Twin_Autocannons = 7,
667  Hellfire_Missile_Pack = 8,
668  Twin_Autocannons_Alan_Schezar = 9,
669  Hellfire_Missile_Pack_Alan_Schezar = 10,
670  Arclite_Cannon = 11,
671  Arclite_Cannon_Edmund_Duke = 12,
672  Fusion_Cutter = 13,
673 
674  Gemini_Missiles = 15,
675  Burst_Lasers = 16,
676  Gemini_Missiles_Tom_Kazansky = 17,
677  Burst_Lasers_Tom_Kazansky = 18,
678  ATS_Laser_Battery = 19,
679  ATA_Laser_Battery = 20,
680  ATS_Laser_Battery_Hero = 21,
681  ATA_Laser_Battery_Hero = 22,
682  ATS_Laser_Battery_Hyperion = 23,
683  ATA_Laser_Battery_Hyperion = 24,
684  Flame_Thrower = 25,
685  Flame_Thrower_Gui_Montag = 26,
686  Arclite_Shock_Cannon = 27,
687  Arclite_Shock_Cannon_Edmund_Duke = 28,
688  Longbolt_Missile = 29,
689  Yamato_Gun = 30,
690  Nuclear_Strike = 31,
691  Lockdown = 32,
692  EMP_Shockwave = 33,
693  Irradiate = 34,
694  Claws = 35,
695  Claws_Devouring_One = 36,
696  Claws_Infested_Kerrigan = 37,
697  Needle_Spines = 38,
698  Needle_Spines_Hunter_Killer = 39,
699  Kaiser_Blades = 40,
700  Kaiser_Blades_Torrasque = 41,
701  Toxic_Spores = 42,
702  Spines = 43,
703 
704  Acid_Spore = 46,
705  Acid_Spore_Kukulza = 47,
706  Glave_Wurm = 48,
707  Glave_Wurm_Kukulza = 49,
708 
709  Seeker_Spores = 52,
710  Subterranean_Tentacle = 53,
711  Suicide_Infested_Terran = 54,
712  Suicide_Scourge = 55,
713  Parasite = 56,
714  Spawn_Broodlings = 57,
715  Ensnare = 58,
716  Dark_Swarm = 59,
717  Plague = 60,
718  Consume = 61,
719  Particle_Beam = 62,
720 
721  Psi_Blades = 64,
722  Psi_Blades_Fenix = 65,
723  Phase_Disruptor = 66,
724  Phase_Disruptor_Fenix = 67,
725 
726  Psi_Assault = 69,
727  Psionic_Shockwave = 70,
728  Psionic_Shockwave_TZ_Archon = 71,
729 
730  Dual_Photon_Blasters = 73,
731  Anti_Matter_Missiles = 74,
732  Dual_Photon_Blasters_Mojo = 75,
733  Anti_Matter_Missiles_Mojo = 76,
734  Phase_Disruptor_Cannon = 77,
735  Phase_Disruptor_Cannon_Danimoth = 78,
736  Pulse_Cannon = 79,
737  STS_Photon_Cannon = 80,
738  STA_Photon_Cannon = 81,
739  Scarab = 82,
740  Stasis_Field = 83,
741  Psionic_Storm = 84,
742  Warp_Blades_Zeratul = 85,
743  Warp_Blades_Hero = 86,
744 
745  Platform_Laser_Battery = 92,
746  Independant_Laser_Battery = 93,
747 
748  Twin_Autocannons_Floor_Trap = 96,
749  Hellfire_Missile_Pack_Wall_Trap = 97,
750  Flame_Thrower_Wall_Trap = 98,
751  Hellfire_Missile_Pack_Floor_Trap = 99,
752 
753  Neutron_Flare = 100,
754  Disruption_Web = 101,
755  Restoration = 102,
756  Halo_Rockets = 103,
757  Corrosive_Acid = 104,
758  Mind_Control = 105,
759  Feedback = 106,
760  Optical_Flare = 107,
761  Maelstrom = 108,
762  Subterranean_Spines = 109,
763 
764  Warp_Blades = 111,
765  C_10_Canister_Rifle_Samir_Duran = 112,
766  C_10_Canister_Rifle_Infested_Duran = 113,
767  Dual_Photon_Blasters_Artanis = 114,
768  Anti_Matter_Missiles_Artanis = 115,
769  C_10_Canister_Rifle_Alexei_Stukov = 116,
770 
771  None = 130,
772  Unknown,
773  MAX)
774 #else // TC_EXPAND_LARGE_ENUMS
775 namespace better_enums_data_WeaponType {} class WeaponType { private: typedef ::better_enums::optional<WeaponType> _optional; typedef ::better_enums::optional<std::size_t> _optional_index; public: typedef int _integral; enum _enumerated : int { Gauss_Rifle = 0, Gauss_Rifle_Jim_Raynor = 1, C_10_Canister_Rifle = 2, C_10_Canister_Rifle_Sarah_Kerrigan = 3, Fragmentation_Grenade = 4, Fragmentation_Grenade_Jim_Raynor = 5, Spider_Mines = 6, Twin_Autocannons = 7, Hellfire_Missile_Pack = 8, Twin_Autocannons_Alan_Schezar = 9, Hellfire_Missile_Pack_Alan_Schezar = 10, Arclite_Cannon = 11, Arclite_Cannon_Edmund_Duke = 12, Fusion_Cutter = 13, Gemini_Missiles = 15, Burst_Lasers = 16, Gemini_Missiles_Tom_Kazansky = 17, Burst_Lasers_Tom_Kazansky = 18, ATS_Laser_Battery = 19, ATA_Laser_Battery = 20, ATS_Laser_Battery_Hero = 21, ATA_Laser_Battery_Hero = 22, ATS_Laser_Battery_Hyperion = 23, ATA_Laser_Battery_Hyperion = 24, Flame_Thrower = 25, Flame_Thrower_Gui_Montag = 26, Arclite_Shock_Cannon = 27, Arclite_Shock_Cannon_Edmund_Duke = 28, Longbolt_Missile = 29, Yamato_Gun = 30, Nuclear_Strike = 31, Lockdown = 32, EMP_Shockwave = 33, Irradiate = 34, Claws = 35, Claws_Devouring_One = 36, Claws_Infested_Kerrigan = 37, Needle_Spines = 38, Needle_Spines_Hunter_Killer = 39, Kaiser_Blades = 40, Kaiser_Blades_Torrasque = 41, Toxic_Spores = 42, Spines = 43, Acid_Spore = 46, Acid_Spore_Kukulza = 47, Glave_Wurm = 48, Glave_Wurm_Kukulza = 49, Seeker_Spores = 52, Subterranean_Tentacle = 53, Suicide_Infested_Terran = 54, Suicide_Scourge = 55, Parasite = 56, Spawn_Broodlings = 57, Ensnare = 58, Dark_Swarm = 59, Plague = 60, Consume = 61, Particle_Beam = 62, Psi_Blades = 64, Psi_Blades_Fenix = 65, Phase_Disruptor = 66, Phase_Disruptor_Fenix = 67, Psi_Assault = 69, Psionic_Shockwave = 70, Psionic_Shockwave_TZ_Archon = 71, Dual_Photon_Blasters = 73, Anti_Matter_Missiles = 74, Dual_Photon_Blasters_Mojo = 75, Anti_Matter_Missiles_Mojo = 76, Phase_Disruptor_Cannon = 77, Phase_Disruptor_Cannon_Danimoth = 78, Pulse_Cannon = 79, STS_Photon_Cannon = 80, STA_Photon_Cannon = 81, Scarab = 82, Stasis_Field = 83, Psionic_Storm = 84, Warp_Blades_Zeratul = 85, Warp_Blades_Hero = 86, Platform_Laser_Battery = 92, Independant_Laser_Battery = 93, Twin_Autocannons_Floor_Trap = 96, Hellfire_Missile_Pack_Wall_Trap = 97, Flame_Thrower_Wall_Trap = 98, Hellfire_Missile_Pack_Floor_Trap = 99, Neutron_Flare = 100, Disruption_Web = 101, Restoration = 102, Halo_Rockets = 103, Corrosive_Acid = 104, Mind_Control = 105, Feedback = 106, Optical_Flare = 107, Maelstrom = 108, Subterranean_Spines = 109, Warp_Blades = 111, C_10_Canister_Rifle_Samir_Duran = 112, C_10_Canister_Rifle_Infested_Duran = 113, Dual_Photon_Blasters_Artanis = 114, Anti_Matter_Missiles_Artanis = 115, C_10_Canister_Rifle_Alexei_Stukov = 116, None = 130, Unknown, MAX }; constexpr WeaponType(_enumerated value) : _value(value) { } constexpr operator _enumerated() const { return _enumerated(_value); } constexpr _integral _to_integral() const; constexpr static WeaponType _from_integral(_integral value); constexpr static WeaponType _from_integral_unchecked(_integral value); constexpr static _optional _from_integral_nothrow(_integral value); const char* _to_string() const; constexpr static WeaponType _from_string(const char *name); constexpr static _optional _from_string_nothrow(const char *name); constexpr static WeaponType _from_string_nocase(const char *name); constexpr static _optional _from_string_nocase_nothrow(const char *name); constexpr static bool _is_valid(_integral value); constexpr static bool _is_valid(const char *name); constexpr static bool _is_valid_nocase(const char *name); typedef ::better_enums::_Iterable<WeaponType> _value_iterable; typedef ::better_enums::_Iterable<const char*> _name_iterable; typedef _value_iterable::iterator _value_iterator; typedef _name_iterable::iterator _name_iterator; constexpr static const std::size_t _size_constant = 104; constexpr static std::size_t _size() { return _size_constant; } constexpr static const char* _name(); constexpr static _value_iterable _values(); static _name_iterable _names(); _integral _value; private: WeaponType() : _value(0) { } private: explicit constexpr WeaponType(const _integral &value) : _value(value) { } static int initialize(); constexpr static _optional_index _from_value_loop(_integral value, std::size_t index = 0); constexpr static _optional_index _from_string_loop(const char *name, std::size_t index = 0); constexpr static _optional_index _from_string_nocase_loop(const char *name, std::size_t index = 0); friend struct ::better_enums::_initialize_at_program_start<WeaponType>; }; namespace better_enums_data_WeaponType { static ::better_enums::_initialize_at_program_start<WeaponType> _force_initialization; enum _PutNamesInThisScopeAlso { Gauss_Rifle = 0, Gauss_Rifle_Jim_Raynor = 1, C_10_Canister_Rifle = 2, C_10_Canister_Rifle_Sarah_Kerrigan = 3, Fragmentation_Grenade = 4, Fragmentation_Grenade_Jim_Raynor = 5, Spider_Mines = 6, Twin_Autocannons = 7, Hellfire_Missile_Pack = 8, Twin_Autocannons_Alan_Schezar = 9, Hellfire_Missile_Pack_Alan_Schezar = 10, Arclite_Cannon = 11, Arclite_Cannon_Edmund_Duke = 12, Fusion_Cutter = 13, Gemini_Missiles = 15, Burst_Lasers = 16, Gemini_Missiles_Tom_Kazansky = 17, Burst_Lasers_Tom_Kazansky = 18, ATS_Laser_Battery = 19, ATA_Laser_Battery = 20, ATS_Laser_Battery_Hero = 21, ATA_Laser_Battery_Hero = 22, ATS_Laser_Battery_Hyperion = 23, ATA_Laser_Battery_Hyperion = 24, Flame_Thrower = 25, Flame_Thrower_Gui_Montag = 26, Arclite_Shock_Cannon = 27, Arclite_Shock_Cannon_Edmund_Duke = 28, Longbolt_Missile = 29, Yamato_Gun = 30, Nuclear_Strike = 31, Lockdown = 32, EMP_Shockwave = 33, Irradiate = 34, Claws = 35, Claws_Devouring_One = 36, Claws_Infested_Kerrigan = 37, Needle_Spines = 38, Needle_Spines_Hunter_Killer = 39, Kaiser_Blades = 40, Kaiser_Blades_Torrasque = 41, Toxic_Spores = 42, Spines = 43, Acid_Spore = 46, Acid_Spore_Kukulza = 47, Glave_Wurm = 48, Glave_Wurm_Kukulza = 49, Seeker_Spores = 52, Subterranean_Tentacle = 53, Suicide_Infested_Terran = 54, Suicide_Scourge = 55, Parasite = 56, Spawn_Broodlings = 57, Ensnare = 58, Dark_Swarm = 59, Plague = 60, Consume = 61, Particle_Beam = 62, Psi_Blades = 64, Psi_Blades_Fenix = 65, Phase_Disruptor = 66, Phase_Disruptor_Fenix = 67, Psi_Assault = 69, Psionic_Shockwave = 70, Psionic_Shockwave_TZ_Archon = 71, Dual_Photon_Blasters = 73, Anti_Matter_Missiles = 74, Dual_Photon_Blasters_Mojo = 75, Anti_Matter_Missiles_Mojo = 76, Phase_Disruptor_Cannon = 77, Phase_Disruptor_Cannon_Danimoth = 78, Pulse_Cannon = 79, STS_Photon_Cannon = 80, STA_Photon_Cannon = 81, Scarab = 82, Stasis_Field = 83, Psionic_Storm = 84, Warp_Blades_Zeratul = 85, Warp_Blades_Hero = 86, Platform_Laser_Battery = 92, Independant_Laser_Battery = 93, Twin_Autocannons_Floor_Trap = 96, Hellfire_Missile_Pack_Wall_Trap = 97, Flame_Thrower_Wall_Trap = 98, Hellfire_Missile_Pack_Floor_Trap = 99, Neutron_Flare = 100, Disruption_Web = 101, Restoration = 102, Halo_Rockets = 103, Corrosive_Acid = 104, Mind_Control = 105, Feedback = 106, Optical_Flare = 107, Maelstrom = 108, Subterranean_Spines = 109, Warp_Blades = 111, C_10_Canister_Rifle_Samir_Duran = 112, C_10_Canister_Rifle_Infested_Duran = 113, Dual_Photon_Blasters_Artanis = 114, Anti_Matter_Missiles_Artanis = 115, C_10_Canister_Rifle_Alexei_Stukov = 116, None = 130, Unknown, MAX }; constexpr const WeaponType _value_array[] = { ((::better_enums::_eat_assign<WeaponType>)WeaponType::Gauss_Rifle = 0), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Gauss_Rifle_Jim_Raynor = 1), ((::better_enums::_eat_assign<WeaponType>)WeaponType::C_10_Canister_Rifle = 2), ((::better_enums::_eat_assign<WeaponType>)WeaponType::C_10_Canister_Rifle_Sarah_Kerrigan = 3), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Fragmentation_Grenade = 4), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Fragmentation_Grenade_Jim_Raynor = 5), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Spider_Mines = 6), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Twin_Autocannons = 7), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Hellfire_Missile_Pack = 8), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Twin_Autocannons_Alan_Schezar = 9), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Hellfire_Missile_Pack_Alan_Schezar = 10), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Arclite_Cannon = 11), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Arclite_Cannon_Edmund_Duke = 12), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Fusion_Cutter = 13), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Gemini_Missiles = 15), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Burst_Lasers = 16), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Gemini_Missiles_Tom_Kazansky = 17), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Burst_Lasers_Tom_Kazansky = 18), ((::better_enums::_eat_assign<WeaponType>)WeaponType::ATS_Laser_Battery = 19), ((::better_enums::_eat_assign<WeaponType>)WeaponType::ATA_Laser_Battery = 20), ((::better_enums::_eat_assign<WeaponType>)WeaponType::ATS_Laser_Battery_Hero = 21), ((::better_enums::_eat_assign<WeaponType>)WeaponType::ATA_Laser_Battery_Hero = 22), ((::better_enums::_eat_assign<WeaponType>)WeaponType::ATS_Laser_Battery_Hyperion = 23), ((::better_enums::_eat_assign<WeaponType>)WeaponType::ATA_Laser_Battery_Hyperion = 24), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Flame_Thrower = 25), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Flame_Thrower_Gui_Montag = 26), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Arclite_Shock_Cannon = 27), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Arclite_Shock_Cannon_Edmund_Duke = 28), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Longbolt_Missile = 29), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Yamato_Gun = 30), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Nuclear_Strike = 31), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Lockdown = 32), ((::better_enums::_eat_assign<WeaponType>)WeaponType::EMP_Shockwave = 33), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Irradiate = 34), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Claws = 35), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Claws_Devouring_One = 36), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Claws_Infested_Kerrigan = 37), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Needle_Spines = 38), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Needle_Spines_Hunter_Killer = 39), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Kaiser_Blades = 40), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Kaiser_Blades_Torrasque = 41), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Toxic_Spores = 42), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Spines = 43), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Acid_Spore = 46), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Acid_Spore_Kukulza = 47), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Glave_Wurm = 48), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Glave_Wurm_Kukulza = 49), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Seeker_Spores = 52), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Subterranean_Tentacle = 53), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Suicide_Infested_Terran = 54), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Suicide_Scourge = 55), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Parasite = 56), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Spawn_Broodlings = 57), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Ensnare = 58), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Dark_Swarm = 59), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Plague = 60), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Consume = 61), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Particle_Beam = 62), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Psi_Blades = 64), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Psi_Blades_Fenix = 65), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Phase_Disruptor = 66), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Phase_Disruptor_Fenix = 67), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Psi_Assault = 69), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Psionic_Shockwave = 70), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Psionic_Shockwave_TZ_Archon = 71), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Dual_Photon_Blasters = 73), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Anti_Matter_Missiles = 74), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Dual_Photon_Blasters_Mojo = 75), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Anti_Matter_Missiles_Mojo = 76), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Phase_Disruptor_Cannon = 77), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Phase_Disruptor_Cannon_Danimoth = 78), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Pulse_Cannon = 79), ((::better_enums::_eat_assign<WeaponType>)WeaponType::STS_Photon_Cannon = 80), ((::better_enums::_eat_assign<WeaponType>)WeaponType::STA_Photon_Cannon = 81), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Scarab = 82), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Stasis_Field = 83), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Psionic_Storm = 84), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Warp_Blades_Zeratul = 85), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Warp_Blades_Hero = 86), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Platform_Laser_Battery = 92), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Independant_Laser_Battery = 93), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Twin_Autocannons_Floor_Trap = 96), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Hellfire_Missile_Pack_Wall_Trap = 97), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Flame_Thrower_Wall_Trap = 98), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Hellfire_Missile_Pack_Floor_Trap = 99), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Neutron_Flare = 100), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Disruption_Web = 101), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Restoration = 102), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Halo_Rockets = 103), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Corrosive_Acid = 104), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Mind_Control = 105), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Feedback = 106), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Optical_Flare = 107), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Maelstrom = 108), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Subterranean_Spines = 109), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Warp_Blades = 111), ((::better_enums::_eat_assign<WeaponType>)WeaponType::C_10_Canister_Rifle_Samir_Duran = 112), ((::better_enums::_eat_assign<WeaponType>)WeaponType::C_10_Canister_Rifle_Infested_Duran = 113), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Dual_Photon_Blasters_Artanis = 114), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Anti_Matter_Missiles_Artanis = 115), ((::better_enums::_eat_assign<WeaponType>)WeaponType::C_10_Canister_Rifle_Alexei_Stukov = 116), ((::better_enums::_eat_assign<WeaponType>)WeaponType::None = 130), ((::better_enums::_eat_assign<WeaponType>)WeaponType::Unknown), ((::better_enums::_eat_assign<WeaponType>)WeaponType::MAX), }; constexpr const char *_the_raw_names[] = { "Gauss_Rifle = 0", "Gauss_Rifle_Jim_Raynor = 1", "C_10_Canister_Rifle = 2", "C_10_Canister_Rifle_Sarah_Kerrigan = 3", "Fragmentation_Grenade = 4", "Fragmentation_Grenade_Jim_Raynor = 5", "Spider_Mines = 6", "Twin_Autocannons = 7", "Hellfire_Missile_Pack = 8", "Twin_Autocannons_Alan_Schezar = 9", "Hellfire_Missile_Pack_Alan_Schezar = 10", "Arclite_Cannon = 11", "Arclite_Cannon_Edmund_Duke = 12", "Fusion_Cutter = 13", "Gemini_Missiles = 15", "Burst_Lasers = 16", "Gemini_Missiles_Tom_Kazansky = 17", "Burst_Lasers_Tom_Kazansky = 18", "ATS_Laser_Battery = 19", "ATA_Laser_Battery = 20", "ATS_Laser_Battery_Hero = 21", "ATA_Laser_Battery_Hero = 22", "ATS_Laser_Battery_Hyperion = 23", "ATA_Laser_Battery_Hyperion = 24", "Flame_Thrower = 25", "Flame_Thrower_Gui_Montag = 26", "Arclite_Shock_Cannon = 27", "Arclite_Shock_Cannon_Edmund_Duke = 28", "Longbolt_Missile = 29", "Yamato_Gun = 30", "Nuclear_Strike = 31", "Lockdown = 32", "EMP_Shockwave = 33", "Irradiate = 34", "Claws = 35", "Claws_Devouring_One = 36", "Claws_Infested_Kerrigan = 37", "Needle_Spines = 38", "Needle_Spines_Hunter_Killer = 39", "Kaiser_Blades = 40", "Kaiser_Blades_Torrasque = 41", "Toxic_Spores = 42", "Spines = 43", "Acid_Spore = 46", "Acid_Spore_Kukulza = 47", "Glave_Wurm = 48", "Glave_Wurm_Kukulza = 49", "Seeker_Spores = 52", "Subterranean_Tentacle = 53", "Suicide_Infested_Terran = 54", "Suicide_Scourge = 55", "Parasite = 56", "Spawn_Broodlings = 57", "Ensnare = 58", "Dark_Swarm = 59", "Plague = 60", "Consume = 61", "Particle_Beam = 62", "Psi_Blades = 64", "Psi_Blades_Fenix = 65", "Phase_Disruptor = 66", "Phase_Disruptor_Fenix = 67", "Psi_Assault = 69", "Psionic_Shockwave = 70", "Psionic_Shockwave_TZ_Archon = 71", "Dual_Photon_Blasters = 73", "Anti_Matter_Missiles = 74", "Dual_Photon_Blasters_Mojo = 75", "Anti_Matter_Missiles_Mojo = 76", "Phase_Disruptor_Cannon = 77", "Phase_Disruptor_Cannon_Danimoth = 78", "Pulse_Cannon = 79", "STS_Photon_Cannon = 80", "STA_Photon_Cannon = 81", "Scarab = 82", "Stasis_Field = 83", "Psionic_Storm = 84", "Warp_Blades_Zeratul = 85", "Warp_Blades_Hero = 86", "Platform_Laser_Battery = 92", "Independant_Laser_Battery = 93", "Twin_Autocannons_Floor_Trap = 96", "Hellfire_Missile_Pack_Wall_Trap = 97", "Flame_Thrower_Wall_Trap = 98", "Hellfire_Missile_Pack_Floor_Trap = 99", "Neutron_Flare = 100", "Disruption_Web = 101", "Restoration = 102", "Halo_Rockets = 103", "Corrosive_Acid = 104", "Mind_Control = 105", "Feedback = 106", "Optical_Flare = 107", "Maelstrom = 108", "Subterranean_Spines = 109", "Warp_Blades = 111", "C_10_Canister_Rifle_Samir_Duran = 112", "C_10_Canister_Rifle_Infested_Duran = 113", "Dual_Photon_Blasters_Artanis = 114", "Anti_Matter_Missiles_Artanis = 115", "C_10_Canister_Rifle_Alexei_Stukov = 116", "None = 130", "Unknown", "MAX", }; constexpr const char * const * _raw_names() { return _the_raw_names; } inline char* _name_storage() { static char storage[] = "Gauss_Rifle = 0" "," "Gauss_Rifle_Jim_Raynor = 1" "," "C_10_Canister_Rifle = 2" "," "C_10_Canister_Rifle_Sarah_Kerrigan = 3" "," "Fragmentation_Grenade = 4" "," "Fragmentation_Grenade_Jim_Raynor = 5" "," "Spider_Mines = 6" "," "Twin_Autocannons = 7" "," "Hellfire_Missile_Pack = 8" "," "Twin_Autocannons_Alan_Schezar = 9" "," "Hellfire_Missile_Pack_Alan_Schezar = 10" "," "Arclite_Cannon = 11" "," "Arclite_Cannon_Edmund_Duke = 12" "," "Fusion_Cutter = 13" "," "Gemini_Missiles = 15" "," "Burst_Lasers = 16" "," "Gemini_Missiles_Tom_Kazansky = 17" "," "Burst_Lasers_Tom_Kazansky = 18" "," "ATS_Laser_Battery = 19" "," "ATA_Laser_Battery = 20" "," "ATS_Laser_Battery_Hero = 21" "," "ATA_Laser_Battery_Hero = 22" "," "ATS_Laser_Battery_Hyperion = 23" "," "ATA_Laser_Battery_Hyperion = 24" "," "Flame_Thrower = 25" "," "Flame_Thrower_Gui_Montag = 26" "," "Arclite_Shock_Cannon = 27" "," "Arclite_Shock_Cannon_Edmund_Duke = 28" "," "Longbolt_Missile = 29" "," "Yamato_Gun = 30" "," "Nuclear_Strike = 31" "," "Lockdown = 32" "," "EMP_Shockwave = 33" "," "Irradiate = 34" "," "Claws = 35" "," "Claws_Devouring_One = 36" "," "Claws_Infested_Kerrigan = 37" "," "Needle_Spines = 38" "," "Needle_Spines_Hunter_Killer = 39" "," "Kaiser_Blades = 40" "," "Kaiser_Blades_Torrasque = 41" "," "Toxic_Spores = 42" "," "Spines = 43" "," "Acid_Spore = 46" "," "Acid_Spore_Kukulza = 47" "," "Glave_Wurm = 48" "," "Glave_Wurm_Kukulza = 49" "," "Seeker_Spores = 52" "," "Subterranean_Tentacle = 53" "," "Suicide_Infested_Terran = 54" "," "Suicide_Scourge = 55" "," "Parasite = 56" "," "Spawn_Broodlings = 57" "," "Ensnare = 58" "," "Dark_Swarm = 59" "," "Plague = 60" "," "Consume = 61" "," "Particle_Beam = 62" "," "Psi_Blades = 64" "," "Psi_Blades_Fenix = 65" "," "Phase_Disruptor = 66" "," "Phase_Disruptor_Fenix = 67" "," "Psi_Assault = 69" "," "Psionic_Shockwave = 70" "," "Psionic_Shockwave_TZ_Archon = 71" "," "Dual_Photon_Blasters = 73" "," "Anti_Matter_Missiles = 74" "," "Dual_Photon_Blasters_Mojo = 75" "," "Anti_Matter_Missiles_Mojo = 76" "," "Phase_Disruptor_Cannon = 77" "," "Phase_Disruptor_Cannon_Danimoth = 78" "," "Pulse_Cannon = 79" "," "STS_Photon_Cannon = 80" "," "STA_Photon_Cannon = 81" "," "Scarab = 82" "," "Stasis_Field = 83" "," "Psionic_Storm = 84" "," "Warp_Blades_Zeratul = 85" "," "Warp_Blades_Hero = 86" "," "Platform_Laser_Battery = 92" "," "Independant_Laser_Battery = 93" "," "Twin_Autocannons_Floor_Trap = 96" "," "Hellfire_Missile_Pack_Wall_Trap = 97" "," "Flame_Thrower_Wall_Trap = 98" "," "Hellfire_Missile_Pack_Floor_Trap = 99" "," "Neutron_Flare = 100" "," "Disruption_Web = 101" "," "Restoration = 102" "," "Halo_Rockets = 103" "," "Corrosive_Acid = 104" "," "Mind_Control = 105" "," "Feedback = 106" "," "Optical_Flare = 107" "," "Maelstrom = 108" "," "Subterranean_Spines = 109" "," "Warp_Blades = 111" "," "C_10_Canister_Rifle_Samir_Duran = 112" "," "C_10_Canister_Rifle_Infested_Duran = 113" "," "Dual_Photon_Blasters_Artanis = 114" "," "Anti_Matter_Missiles_Artanis = 115" "," "C_10_Canister_Rifle_Alexei_Stukov = 116" "," "None = 130" "," "Unknown" "," "MAX" ","; return storage; } inline const char** _name_array() { static const char *value[WeaponType::_size_constant]; return value; } inline bool& _initialized() { static bool value = false; return value; } } constexpr inline const WeaponType operator +(WeaponType::_enumerated enumerated) { return static_cast<WeaponType>(enumerated); } constexpr inline WeaponType::_optional_index WeaponType::_from_value_loop(WeaponType::_integral value, std::size_t index) { return index == _size() ? _optional_index() : better_enums_data_WeaponType::_value_array[index]._value == value ? _optional_index(index) : _from_value_loop(value, index + 1); } constexpr inline WeaponType::_optional_index WeaponType::_from_string_loop(const char *name, std::size_t index) { return index == _size() ? _optional_index() : ::better_enums::_names_match(better_enums_data_WeaponType::_raw_names()[index], name) ? _optional_index(index) : _from_string_loop(name, index + 1); } constexpr inline WeaponType::_optional_index WeaponType::_from_string_nocase_loop(const char *name, std::size_t index) { return index == _size() ? _optional_index() : ::better_enums::_names_match_nocase(better_enums_data_WeaponType::_raw_names()[index], name) ? _optional_index(index) : _from_string_nocase_loop(name, index + 1); } constexpr inline WeaponType::_integral WeaponType::_to_integral() const { return _integral(_value); } constexpr inline WeaponType WeaponType::_from_integral_unchecked(_integral value) { return static_cast<_enumerated>(value); } constexpr inline WeaponType::_optional WeaponType::_from_integral_nothrow(_integral value) { return ::better_enums::_map_index<WeaponType>(better_enums_data_WeaponType::_value_array, _from_value_loop(value)); } constexpr inline WeaponType WeaponType::_from_integral(_integral value) { return ::better_enums::_or_throw(_from_integral_nothrow(value), "WeaponType" "::_from_integral: invalid argument"); } inline const char* WeaponType::_to_string() const { return ::better_enums::_or_null(::better_enums::_map_index<const char*>(better_enums_data_WeaponType::_name_array(), _from_value_loop(::better_enums::continue_with(initialize(), _value)))); } constexpr inline WeaponType::_optional WeaponType::_from_string_nothrow(const char *name) { return ::better_enums::_map_index<WeaponType>(better_enums_data_WeaponType::_value_array, _from_string_loop(name)); } constexpr inline WeaponType WeaponType::_from_string(const char *name) { return ::better_enums::_or_throw(_from_string_nothrow(name), "WeaponType" "::_from_string: invalid argument"); } constexpr inline WeaponType::_optional WeaponType::_from_string_nocase_nothrow(const char *name) { return ::better_enums::_map_index<WeaponType>(better_enums_data_WeaponType::_value_array, _from_string_nocase_loop(name)); } constexpr inline WeaponType WeaponType::_from_string_nocase(const char *name) { return ::better_enums::_or_throw(_from_string_nocase_nothrow(name), "WeaponType" "::_from_string_nocase: invalid argument"); } constexpr inline bool WeaponType::_is_valid(_integral value) { return _from_value_loop(value); } constexpr inline bool WeaponType::_is_valid(const char *name) { return _from_string_loop(name); } constexpr inline bool WeaponType::_is_valid_nocase(const char *name) { return _from_string_nocase_loop(name); } constexpr inline const char* WeaponType::_name() { return "WeaponType"; } constexpr inline WeaponType::_value_iterable WeaponType::_values() { return _value_iterable(better_enums_data_WeaponType::_value_array, _size()); } inline WeaponType::_name_iterable WeaponType::_names() { return _name_iterable(better_enums_data_WeaponType::_name_array(), ::better_enums::continue_with(initialize(), _size())); } inline int WeaponType::initialize() { if (better_enums_data_WeaponType::_initialized()) return 0; ::better_enums::_trim_names(better_enums_data_WeaponType::_raw_names(), better_enums_data_WeaponType::_name_array(), better_enums_data_WeaponType::_name_storage(), _size()); better_enums_data_WeaponType::_initialized() = true; return 0; } constexpr inline bool operator ==(const WeaponType &a, const WeaponType &b) { return a._to_integral() == b._to_integral(); } constexpr inline bool operator !=(const WeaponType &a, const WeaponType &b) { return a._to_integral() != b._to_integral(); } constexpr inline bool operator <(const WeaponType &a, const WeaponType &b) { return a._to_integral() < b._to_integral(); } constexpr inline bool operator <=(const WeaponType &a, const WeaponType &b) { return a._to_integral() <= b._to_integral(); } constexpr inline bool operator >(const WeaponType &a, const WeaponType &b) { return a._to_integral() > b._to_integral(); } constexpr inline bool operator >=(const WeaponType &a, const WeaponType &b) { return a._to_integral() >= b._to_integral(); } template <typename Char, typename Traits> std::basic_ostream<Char, Traits>& operator <<(std::basic_ostream<Char, Traits>& stream, const WeaponType &value) { return stream << value._to_string(); } template <typename Char, typename Traits> std::basic_istream<Char, Traits>& operator >>(std::basic_istream<Char, Traits>& stream, WeaponType &value) { std::basic_string<Char, Traits> buffer; stream >> buffer; ::better_enums::optional<WeaponType> converted = WeaponType::_from_string_nothrow(buffer.c_str()); if (converted) value = *converted; else stream.setstate(std::basic_istream<Char, Traits>::failbit); return stream; }
776 #endif // TC_EXPAND_LARGE_ENUMS
777 
779  UnitSize,
780  int,
781  // corresponds to BWAPI::UnitSizeTypes::Enum
782  Independent = 0,
783  Small = 1,
784  Medium = 2,
785  Large = 3)
786 
788  DamageType,
789  int,
790  // corresponds to BWAPI::DamageTypes::Enum
791  Independent = 0,
792  Explosive = 1,
793  Concussive = 2,
794  Normal = 3,
795  Ignore_Armor = 4,
796  None = 5)
797 
799  Race,
800  int,
801  // corresponds to BWAPI::Races::Enum
802  Zerg = 0,
803  Terran = 1,
804  Protoss = 2,
805  Other = 3,
806  Unused = 4,
807  Select = 5,
808  Random = 6,
809  None = 7,
810  Unknown = 8,
811  MAX)
812 
814  Color,
815  int,
816  Black = 0,
817  Brown = 19,
818  Grey = 74,
819  Red = 111,
820  Green = 117,
821  Cyan = 128,
822  Yellow = 135,
823  Teal = 159,
824  Purple = 164,
825  Blue = 165,
826  Orange = -179,
827  White = 255)
828 
829 constexpr int XYPixelsPerWalktile = 8;
830 constexpr int XYPixelsPerBuildtile = 32;
831 constexpr int XYWalktilesPerBuildtile =
832  XYPixelsPerBuildtile / XYPixelsPerWalktile;
833 constexpr double HitProbRangedUphillDoodad = 0.53125;
834 constexpr double HitProbRanged = 0.99609375;
835 
836 inline bool isBuilding(UnitType id) {
837  return (
838  id >= +UnitType::Terran_Command_Center &&
839  id <= +UnitType::Protoss_Shield_Battery);
840 }
841 
842 inline bool isWorker(UnitType id) {
843  switch (id) {
844  case UnitType::Protoss_Probe:
845  case UnitType::Terran_SCV:
846  case UnitType::Zerg_Drone:
847  return true;
848  default:
849  break;
850  }
851  return false;
852 }
853 
854 inline bool isMineralField(UnitType id) {
855  switch (id) {
856  case UnitType::Resource_Mineral_Field:
857  case UnitType::Resource_Mineral_Field_Type_2:
858  case UnitType::Resource_Mineral_Field_Type_3:
859  return true;
860  default:
861  break;
862  }
863  return false;
864 }
865 
866 inline bool isGasGeyser(UnitType id) {
867  switch (id) {
868  case UnitType::Resource_Vespene_Geyser:
869  case UnitType::Protoss_Assimilator:
870  case UnitType::Terran_Refinery:
871  case UnitType::Zerg_Extractor:
872  return true;
873  default:
874  break;
875  }
876  return false;
877 }
878 
879 std::vector<UnitType> unitProductions(UnitType id);
880 bool unitProduces(UnitType id, UnitType product);
881 std::vector<Order> commandToOrders(UnitCommandType id);
882 
883 // Defined in constants_static.cpp
884 namespace data {
885 
886 // Indexed by UnitType value
887 extern bool CanAttack[];
888 extern int DimensionRight[];
889 extern int Height[];
890 extern bool IsMineralField[];
891 extern bool CanProduce[];
892 extern bool IsRefinery[];
893 extern bool IsResourceDepot[];
894 extern bool RegeneratesHP[];
895 extern bool IsCloakable[];
896 extern bool IsTwoUnitsInOneEgg[];
897 extern bool IsSpellcaster[];
898 extern int SupplyRequired[];
899 extern std::string AirWeapon[];
900 extern int BuildScore[];
901 extern int MaxAirHits[];
902 extern bool IsPowerup[];
903 extern bool IsBeacon[];
904 extern int MineralPrice[];
905 extern bool IsInvincible[];
906 extern std::string RequiredTech[];
907 extern int DimensionDown[];
908 extern bool CanBuildAddon[];
909 extern int DimensionLeft[];
910 extern bool ProducesLarva[];
911 extern int Armor[];
912 extern bool IsMechanical[];
913 extern bool IsBuilding[];
914 extern int SupplyProvided[];
915 extern int SightRange[];
916 extern int GasPrice[];
917 extern int MaxHitPoints[];
918 extern int Width[];
919 extern int TileWidth[];
920 extern bool IsHero[];
921 extern int SeekRange[];
922 extern int BuildTime[];
923 extern bool IsCritter[];
924 extern bool RequiresPsi[];
925 extern bool IsSpecialBuilding[];
926 extern std::string GroundWeapon[];
927 extern bool IsFlyer[];
928 extern std::string Size[];
929 extern bool IsNeutral[];
930 extern int MaxShields[];
931 extern bool HasPermanentCloak[];
932 extern double TopSpeed[];
933 extern int TileHeight[];
934 extern bool IsRobotic[];
935 extern int DimensionUp[];
936 extern int DestroyScore[];
937 extern int SpaceProvided[];
938 extern std::string TileSize[];
939 extern int HaltDistance[];
940 extern bool IsAddon[];
941 extern bool CanMove[];
942 extern bool IsFlyingBuilding[];
943 extern int MaxEnergy[];
944 extern bool IsDetector[];
945 extern bool IsOrganic[];
946 extern int SpaceRequired[];
947 extern bool IsFlagBeacon[];
948 extern bool IsWorker[];
949 extern bool IsBurrowable[];
950 extern std::string CloakingTech[];
951 extern bool IsResourceContainer[];
952 extern int Acceleration[];
953 extern bool IsSpell[];
954 extern bool RequiresCreep[];
955 extern std::string ArmorUpgrade[];
956 extern int MaxGroundHits[];
957 extern int TurnRadius[];
958 extern std::string GetRace[];
959 
960 extern std::unordered_map<UnitType, int> TotalMineralPrice;
961 extern std::unordered_map<UnitType, int> TotalGasPrice;
962 void init();
963 
964 } // namespace data
965 
966 inline bool isResourceDepot(UnitType id) {
967  return data::IsResourceDepot[id];
968 }
969 
970 
971 } // namespace BW
972 } // namespace torchcraft
973 
974 // Specialized hash functions for enums declared above
975 namespace std {
976 template <>
977 struct hash<torchcraft::BW::UnitType> {
978  typedef torchcraft::BW::UnitType argument_type;
979  typedef std::size_t result_type;
980  result_type operator()(argument_type const& s) const {
981  return std::hash<torchcraft::BW::UnitType::_integral>{}(s._to_integral());
982  }
983 };
984 } // namespace std
std::string ArmorUpgrade[]
Copyright (c) 2015-present, Facebook, Inc.
Definition: openbwprocess.h:17
std::string AirWeapon[]
SetPlayerUpgradeLevel
Definition: constants.h:95
std::string TileSize[]
SetPlayerGas
Definition: constants.h:98
constexpr double HitProbRanged
Definition: constants.h:834
torchcraft::BW::UnitType argument_type
Definition: constants.h:978
STL namespace.
OPENBW_COMMAND_END
Definition: constants.h:103
Definition: frame.h:54
std::unordered_map< UnitType, int > TotalMineralPrice
bool isBuilding(UnitType id)
Definition: constants.h:836
bool isResourceDepot(UnitType id)
Definition: constants.h:966
SetPlayerMinerals
Definition: constants.h:97
std::vector< UnitType > unitProductions(UnitType id)
std::string CloakingTech[]
SetUnitEnergy
Definition: constants.h:101
std::string RequiredTech[]
replayer::Order Order
Definition: state.h:37
std::vector< Order > commandToOrders(UnitCommandType id)
bool unitProduces(UnitType id, UnitType product)
bool isWorker(UnitType id)
Definition: constants.h:842
std::string GroundWeapon[]
std::unordered_map< UnitType, int > TotalGasPrice
SetUnitShield
Definition: constants.h:100
std::size_t result_type
Definition: constants.h:979
SpawnUnit
Definition: constants.h:94
KillUnit
Definition: constants.h:92
std::string Size[]
bool isGasGeyser(UnitType id)
Definition: constants.h:866
bool isMineralField(UnitType id)
Definition: constants.h:854
result_type operator()(argument_type const &s) const
Definition: constants.h:980
SetUnitHealth
Definition: constants.h:99
std::string GetRace[]
SetPlayerResearched
Definition: constants.h:96
constexpr int XYWalktilesPerBuildtile
Definition: constants.h:831
constexpr int XYPixelsPerBuildtile
Definition: constants.h:830
void init()
Definition: cherrypi.cpp:317
BETTER_ENUM(Command, int, Quit=0, Restart=1, MapHack=2, RequestImage=3, ExitProcess=4, Noop=5, SetSpeed=6, SetLog=7, SetGui=8, SetFrameskip=9, SetCmdOptim=10, SetCombineFrames=11, SetMap=12, SetMulti=13, SetBlocking=14, SetMaxFrameTimeMs=15, CommandUnit=16, CommandUnitProtected=17, CommandUser=18, CommandOpenbw=19, DrawLine=20, DrawUnitLine=21, DrawUnitPosLine=22, DrawCircle=23, DrawUnitCircle=24, DrawText=25, DrawTextScreen=26, MAX) BETTER_ENUM(OpenBWCommandType
constexpr double HitProbRangedUphillDoodad
Definition: constants.h:833