Skip to content
Snippets Groups Projects
Commit cf5c520a authored by David Bergström's avatar David Bergström
Browse files

Move Python library files to separate directory and add enums

parent 7903b9b3
No related branches found
No related tags found
No related merge requests found
...@@ -16,6 +16,7 @@ set(BUILD_API_TESTS OFF CACHE INTERNAL "" FORCE) ...@@ -16,6 +16,7 @@ set(BUILD_API_TESTS OFF CACHE INTERNAL "" FORCE)
add_subdirectory(lib/pybind11) add_subdirectory(lib/pybind11)
add_subdirectory(lib/s2client-api) add_subdirectory(lib/s2client-api)
add_subdirectory(src) add_subdirectory(src)
add_subdirectory(python-api-src)
# Hack to make compile, these flags are otherwise set to give errors on warnings # Hack to make compile, these flags are otherwise set to give errors on warnings
set_target_properties(sc2api PROPERTIES COMPILE_FLAGS "/W4") set_target_properties(sc2api PROPERTIES COMPILE_FLAGS "/W4")
...@@ -25,26 +26,3 @@ set_target_properties(sc2utils PROPERTIES COMPILE_FLAGS "/W3") ...@@ -25,26 +26,3 @@ set_target_properties(sc2utils PROPERTIES COMPILE_FLAGS "/W3")
set_target_properties(sc2protocol PROPERTIES COMPILE_FLAGS "/W0") set_target_properties(sc2protocol PROPERTIES COMPILE_FLAGS "/W0")
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT CommandCenter) set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT CommandCenter)
# TODO: Move everything below this line to a separate directory
include_directories(SYSTEM
${PROJECT_SOURCE_DIR}/lib/s2client-api/include
${PROJECT_SOURCE_DIR}/lib/s2client-api/contrib/protobuf/src
${PROJECT_BINARY_DIR}/lib/s2client-api/generated
)
# All the source files for the bot.
file(GLOB BOT_SOURCES "src/*.cpp" "src/*.h" "src/*.hpp")
link_directories(${PROJECT_BINARY_DIR}/s2client-api/bin)
# Enable compilation of the SC2 version of the bot code
# TODO: Remove all remaining BW code
add_definitions(-DSC2API)
# Create the executable.
pybind11_add_module(library library.cpp library.h ${BOT_SOURCES})
target_link_libraries(library PRIVATE
sc2api sc2lib sc2utils sc2protocol libprotobuf
)
#include "library.h"
namespace py = pybind11;
PYBIND11_MODULE(library, m)
{
m.doc() = "pybind11 example plugin";
py::class_<Coordinator>(m, "Coordinator")
.def(py::init())
.def("SetParticipants", &sc2::Coordinator::SetParticipants)
.def("LaunchStarcraft", &sc2::Coordinator::LaunchStarcraft)
.def("StartGame", &sc2::Coordinator::StartGame)
.def("Update", &sc2::Coordinator::Update);
py::enum_<sc2::Race>(m, "Race")
.value("Terran", sc2::Race::Terran)
.value("Zerg", sc2::Race::Zerg)
.value("Protoss", sc2::Race::Protoss)
.value("Random", sc2::Race::Random);
py::class_<sc2::Agent>(m, "Agent")
.def(py::init());
// IDABot is a specialization of Agent
py::class_<IDABot, sc2::Agent>(m, "IDABot")
.def(py::init());
py::class_<sc2::PlayerSetup>(m, "PlayerSetup");
py::enum_<sc2::Difficulty>(m, "Difficulty")
.value("VeryEasy", sc2::Difficulty::VeryEasy)
.value("Easy", sc2::Difficulty::Easy)
.value("Medium", sc2::Difficulty::Medium)
.value("MediumHard", sc2::Difficulty::MediumHard)
.value("Hard", sc2::Difficulty::Hard)
.value("HardVeryHard", sc2::Difficulty::HardVeryHard)
.value("VeryHard", sc2::Difficulty::VeryHard)
.value("CheatVision", sc2::Difficulty::CheatVision)
.value("CheatMoney", sc2::Difficulty::CheatMoney)
.value("CheatInsane", sc2::Difficulty::CheatInsane);
m.def("CreateParticipant", &sc2::CreateParticipant, "Create participant from agent");
py::enum_<sc2::UNIT_TYPEID>(m, "UNIT_TYPEID")
.value("INVALID", sc2::UNIT_TYPEID::INVALID)
.value("TERRAN_ARMORY", sc2::UNIT_TYPEID::TERRAN_ARMORY)
.value("TERRAN_AUTOTURRET", sc2::UNIT_TYPEID::TERRAN_AUTOTURRET)
.value("TERRAN_BANSHEE", sc2::UNIT_TYPEID::TERRAN_BANSHEE)
.value("TERRAN_BARRACKS", sc2::UNIT_TYPEID::TERRAN_BARRACKS)
.value("TERRAN_BARRACKSFLYING", sc2::UNIT_TYPEID::TERRAN_BARRACKSFLYING)
.value("TERRAN_BARRACKSREACTOR", sc2::UNIT_TYPEID::TERRAN_BARRACKSREACTOR)
.value("TERRAN_BARRACKSTECHLAB", sc2::UNIT_TYPEID::TERRAN_BARRACKSTECHLAB)
.value("TERRAN_BATTLECRUISER", sc2::UNIT_TYPEID::TERRAN_BATTLECRUISER)
.value("TERRAN_BUNKER", sc2::UNIT_TYPEID::TERRAN_BUNKER)
.value("TERRAN_COMMANDCENTER", sc2::UNIT_TYPEID::TERRAN_COMMANDCENTER)
.value("TERRAN_COMMANDCENTERFLYING", sc2::UNIT_TYPEID::TERRAN_COMMANDCENTERFLYING)
.value("TERRAN_CYCLONE", sc2::UNIT_TYPEID::TERRAN_CYCLONE)
.value("TERRAN_ENGINEERINGBAY", sc2::UNIT_TYPEID::TERRAN_ENGINEERINGBAY)
.value("TERRAN_FACTORY", sc2::UNIT_TYPEID::TERRAN_FACTORY)
.value("TERRAN_FACTORYFLYING", sc2::UNIT_TYPEID::TERRAN_FACTORYFLYING)
.value("TERRAN_FACTORYREACTOR", sc2::UNIT_TYPEID::TERRAN_FACTORYREACTOR)
.value("TERRAN_FACTORYTECHLAB", sc2::UNIT_TYPEID::TERRAN_FACTORYTECHLAB)
.value("TERRAN_FUSIONCORE", sc2::UNIT_TYPEID::TERRAN_FUSIONCORE)
.value("TERRAN_GHOST", sc2::UNIT_TYPEID::TERRAN_GHOST)
.value("TERRAN_GHOSTACADEMY", sc2::UNIT_TYPEID::TERRAN_GHOSTACADEMY)
.value("TERRAN_HELLION", sc2::UNIT_TYPEID::TERRAN_HELLION)
.value("TERRAN_HELLIONTANK", sc2::UNIT_TYPEID::TERRAN_HELLIONTANK)
.value("TERRAN_LIBERATOR", sc2::UNIT_TYPEID::TERRAN_LIBERATOR)
.value("TERRAN_LIBERATORAG", sc2::UNIT_TYPEID::TERRAN_LIBERATORAG)
.value("TERRAN_MARAUDER", sc2::UNIT_TYPEID::TERRAN_MARAUDER)
.value("TERRAN_MARINE", sc2::UNIT_TYPEID::TERRAN_MARINE)
.value("TERRAN_MEDIVAC", sc2::UNIT_TYPEID::TERRAN_MEDIVAC)
.value("TERRAN_MISSILETURRET", sc2::UNIT_TYPEID::TERRAN_MISSILETURRET)
.value("TERRAN_MULE", sc2::UNIT_TYPEID::TERRAN_MULE)
.value("TERRAN_ORBITALCOMMAND", sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMAND)
.value("TERRAN_ORBITALCOMMANDFLYING", sc2::UNIT_TYPEID::TERRAN_ORBITALCOMMANDFLYING)
.value("TERRAN_PLANETARYFORTRESS", sc2::UNIT_TYPEID::TERRAN_PLANETARYFORTRESS)
.value("TERRAN_RAVEN", sc2::UNIT_TYPEID::TERRAN_RAVEN)
.value("TERRAN_REAPER", sc2::UNIT_TYPEID::TERRAN_REAPER)
.value("TERRAN_REFINERY", sc2::UNIT_TYPEID::TERRAN_REFINERY)
.value("TERRAN_SCV", sc2::UNIT_TYPEID::TERRAN_SCV)
.value("TERRAN_SENSORTOWER", sc2::UNIT_TYPEID::TERRAN_SENSORTOWER)
.value("TERRAN_SIEGETANK", sc2::UNIT_TYPEID::TERRAN_SIEGETANK)
.value("TERRAN_SIEGETANKSIEGED", sc2::UNIT_TYPEID::TERRAN_SIEGETANKSIEGED)
.value("TERRAN_STARPORT", sc2::UNIT_TYPEID::TERRAN_STARPORT)
.value("TERRAN_STARPORTFLYING", sc2::UNIT_TYPEID::TERRAN_STARPORTFLYING)
.value("TERRAN_STARPORTREACTOR", sc2::UNIT_TYPEID::TERRAN_STARPORTREACTOR)
.value("TERRAN_STARPORTTECHLAB", sc2::UNIT_TYPEID::TERRAN_STARPORTTECHLAB)
.value("TERRAN_SUPPLYDEPOT", sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOT)
.value("TERRAN_SUPPLYDEPOTLOWERED", sc2::UNIT_TYPEID::TERRAN_SUPPLYDEPOTLOWERED)
.value("TERRAN_THOR", sc2::UNIT_TYPEID::TERRAN_THOR)
.value("TERRAN_THORAP", sc2::UNIT_TYPEID::TERRAN_THORAP)
.value("TERRAN_VIKINGASSAULT", sc2::UNIT_TYPEID::TERRAN_VIKINGASSAULT)
.value("TERRAN_VIKINGFIGHTER", sc2::UNIT_TYPEID::TERRAN_VIKINGFIGHTER)
.value("TERRAN_WIDOWMINE", sc2::UNIT_TYPEID::TERRAN_WIDOWMINE)
.value("TERRAN_WIDOWMINEBURROWED", sc2::UNIT_TYPEID::TERRAN_WIDOWMINEBURROWED)
.value("TERRAN_KD8CHARGE", sc2::UNIT_TYPEID::TERRAN_KD8CHARGE)
.value("TERRAN_NUKE", sc2::UNIT_TYPEID::TERRAN_NUKE)
.value("TERRAN_POINTDEFENSEDRONE", sc2::UNIT_TYPEID::TERRAN_POINTDEFENSEDRONE)
.value("TERRAN_REACTOR", sc2::UNIT_TYPEID::TERRAN_REACTOR)
.value("TERRAN_TECHLAB", sc2::UNIT_TYPEID::TERRAN_TECHLAB)
.value("ZERG_BANELING", sc2::UNIT_TYPEID::ZERG_BANELING)
.value("ZERG_BANELINGBURROWED", sc2::UNIT_TYPEID::ZERG_BANELINGBURROWED)
.value("ZERG_BANELINGCOCOON", sc2::UNIT_TYPEID::ZERG_BANELINGCOCOON)
.value("ZERG_BANELINGNEST", sc2::UNIT_TYPEID::ZERG_BANELINGNEST)
.value("ZERG_BROODLING", sc2::UNIT_TYPEID::ZERG_BROODLING)
.value("ZERG_BROODLORD", sc2::UNIT_TYPEID::ZERG_BROODLORD)
.value("ZERG_BROODLORDCOCOON", sc2::UNIT_TYPEID::ZERG_BROODLORDCOCOON)
.value("ZERG_CHANGELING", sc2::UNIT_TYPEID::ZERG_CHANGELING)
.value("ZERG_CHANGELINGMARINE", sc2::UNIT_TYPEID::ZERG_CHANGELINGMARINE)
.value("ZERG_CHANGELINGMARINESHIELD", sc2::UNIT_TYPEID::ZERG_CHANGELINGMARINESHIELD)
.value("ZERG_CHANGELINGZEALOT", sc2::UNIT_TYPEID::ZERG_CHANGELINGZEALOT)
.value("ZERG_CHANGELINGZERGLING", sc2::UNIT_TYPEID::ZERG_CHANGELINGZERGLING)
.value("ZERG_CHANGELINGZERGLINGWINGS", sc2::UNIT_TYPEID::ZERG_CHANGELINGZERGLINGWINGS)
.value("ZERG_CORRUPTOR", sc2::UNIT_TYPEID::ZERG_CORRUPTOR)
.value("ZERG_CREEPTUMOR", sc2::UNIT_TYPEID::ZERG_CREEPTUMOR)
.value("ZERG_CREEPTUMORBURROWED", sc2::UNIT_TYPEID::ZERG_CREEPTUMORBURROWED)
.value("ZERG_CREEPTUMORQUEEN", sc2::UNIT_TYPEID::ZERG_CREEPTUMORQUEEN)
.value("ZERG_DRONE", sc2::UNIT_TYPEID::ZERG_DRONE)
.value("ZERG_DRONEBURROWED", sc2::UNIT_TYPEID::ZERG_DRONEBURROWED)
.value("ZERG_EGG", sc2::UNIT_TYPEID::ZERG_EGG)
.value("ZERG_EVOLUTIONCHAMBER", sc2::UNIT_TYPEID::ZERG_EVOLUTIONCHAMBER)
.value("ZERG_EXTRACTOR", sc2::UNIT_TYPEID::ZERG_EXTRACTOR)
.value("ZERG_GREATERSPIRE", sc2::UNIT_TYPEID::ZERG_GREATERSPIRE)
.value("ZERG_HATCHERY", sc2::UNIT_TYPEID::ZERG_HATCHERY)
.value("ZERG_HIVE", sc2::UNIT_TYPEID::ZERG_HIVE)
.value("ZERG_HYDRALISK", sc2::UNIT_TYPEID::ZERG_HYDRALISK)
.value("ZERG_HYDRALISKBURROWED", sc2::UNIT_TYPEID::ZERG_HYDRALISKBURROWED)
.value("ZERG_HYDRALISKDEN", sc2::UNIT_TYPEID::ZERG_HYDRALISKDEN)
.value("ZERG_INFESTATIONPIT", sc2::UNIT_TYPEID::ZERG_INFESTATIONPIT)
.value("ZERG_INFESTEDTERRANSEGG", sc2::UNIT_TYPEID::ZERG_INFESTEDTERRANSEGG)
.value("ZERG_INFESTOR", sc2::UNIT_TYPEID::ZERG_INFESTOR)
.value("ZERG_INFESTORBURROWED", sc2::UNIT_TYPEID::ZERG_INFESTORBURROWED)
.value("ZERG_INFESTORTERRAN", sc2::UNIT_TYPEID::ZERG_INFESTORTERRAN)
.value("ZERG_LAIR", sc2::UNIT_TYPEID::ZERG_LAIR)
.value("ZERG_LARVA", sc2::UNIT_TYPEID::ZERG_LARVA)
.value("ZERG_LOCUSTMP", sc2::UNIT_TYPEID::ZERG_LOCUSTMP)
.value("ZERG_LOCUSTMPFLYING", sc2::UNIT_TYPEID::ZERG_LOCUSTMPFLYING)
.value("ZERG_LURKERDENMP", sc2::UNIT_TYPEID::ZERG_LURKERDENMP)
.value("ZERG_LURKERMP", sc2::UNIT_TYPEID::ZERG_LURKERMP)
.value("ZERG_LURKERMPBURROWED", sc2::UNIT_TYPEID::ZERG_LURKERMPBURROWED)
.value("ZERG_LURKERMPEGG", sc2::UNIT_TYPEID::ZERG_LURKERMPEGG)
.value("ZERG_MUTALISK", sc2::UNIT_TYPEID::ZERG_MUTALISK)
.value("ZERG_NYDUSCANAL", sc2::UNIT_TYPEID::ZERG_NYDUSCANAL)
.value("ZERG_NYDUSNETWORK", sc2::UNIT_TYPEID::ZERG_NYDUSNETWORK)
.value("ZERG_OVERLORD", sc2::UNIT_TYPEID::ZERG_OVERLORD)
.value("ZERG_OVERLORDCOCOON", sc2::UNIT_TYPEID::ZERG_OVERLORDCOCOON)
.value("ZERG_OVERLORDTRANSPORT", sc2::UNIT_TYPEID::ZERG_OVERLORDTRANSPORT)
.value("ZERG_OVERSEER", sc2::UNIT_TYPEID::ZERG_OVERSEER)
.value("ZERG_QUEEN", sc2::UNIT_TYPEID::ZERG_QUEEN)
.value("ZERG_QUEENBURROWED", sc2::UNIT_TYPEID::ZERG_QUEENBURROWED)
.value("ZERG_RAVAGER", sc2::UNIT_TYPEID::ZERG_RAVAGER)
.value("ZERG_RAVAGERCOCOON", sc2::UNIT_TYPEID::ZERG_RAVAGERCOCOON)
.value("ZERG_ROACH", sc2::UNIT_TYPEID::ZERG_ROACH)
.value("ZERG_ROACHBURROWED", sc2::UNIT_TYPEID::ZERG_ROACHBURROWED)
.value("ZERG_ROACHWARREN", sc2::UNIT_TYPEID::ZERG_ROACHWARREN)
.value("ZERG_SPAWNINGPOOL", sc2::UNIT_TYPEID::ZERG_SPAWNINGPOOL)
.value("ZERG_SPINECRAWLER", sc2::UNIT_TYPEID::ZERG_SPINECRAWLER)
.value("ZERG_SPINECRAWLERUPROOTED", sc2::UNIT_TYPEID::ZERG_SPINECRAWLERUPROOTED)
.value("ZERG_SPIRE", sc2::UNIT_TYPEID::ZERG_SPIRE)
.value("ZERG_SPORECRAWLER", sc2::UNIT_TYPEID::ZERG_SPORECRAWLER)
.value("ZERG_SPORECRAWLERUPROOTED", sc2::UNIT_TYPEID::ZERG_SPORECRAWLERUPROOTED)
.value("ZERG_SWARMHOSTBURROWEDMP", sc2::UNIT_TYPEID::ZERG_SWARMHOSTBURROWEDMP)
.value("ZERG_SWARMHOSTMP", sc2::UNIT_TYPEID::ZERG_SWARMHOSTMP)
.value("ZERG_TRANSPORTOVERLORDCOCOON", sc2::UNIT_TYPEID::ZERG_TRANSPORTOVERLORDCOCOON)
.value("ZERG_ULTRALISK", sc2::UNIT_TYPEID::ZERG_ULTRALISK)
.value("ZERG_ULTRALISKCAVERN", sc2::UNIT_TYPEID::ZERG_ULTRALISKCAVERN)
.value("ZERG_VIPER", sc2::UNIT_TYPEID::ZERG_VIPER)
.value("ZERG_ZERGLING", sc2::UNIT_TYPEID::ZERG_ZERGLING)
.value("ZERG_ZERGLINGBURROWED", sc2::UNIT_TYPEID::ZERG_ZERGLINGBURROWED)
.value("ZERG_PARASITICBOMBDUMMY", sc2::UNIT_TYPEID::ZERG_PARASITICBOMBDUMMY)
.value("PROTOSS_ADEPT", sc2::UNIT_TYPEID::PROTOSS_ADEPT)
.value("PROTOSS_ADEPTPHASESHIFT", sc2::UNIT_TYPEID::PROTOSS_ADEPTPHASESHIFT)
.value("PROTOSS_ARCHON", sc2::UNIT_TYPEID::PROTOSS_ARCHON)
.value("PROTOSS_ASSIMILATOR", sc2::UNIT_TYPEID::PROTOSS_ASSIMILATOR)
.value("PROTOSS_CARRIER", sc2::UNIT_TYPEID::PROTOSS_CARRIER)
.value("PROTOSS_COLOSSUS", sc2::UNIT_TYPEID::PROTOSS_COLOSSUS)
.value("PROTOSS_CYBERNETICSCORE", sc2::UNIT_TYPEID::PROTOSS_CYBERNETICSCORE)
.value("PROTOSS_DARKSHRINE", sc2::UNIT_TYPEID::PROTOSS_DARKSHRINE)
.value("PROTOSS_DARKTEMPLAR", sc2::UNIT_TYPEID::PROTOSS_DARKTEMPLAR)
.value("PROTOSS_DISRUPTOR", sc2::UNIT_TYPEID::PROTOSS_DISRUPTOR)
.value("PROTOSS_DISRUPTORPHASED", sc2::UNIT_TYPEID::PROTOSS_DISRUPTORPHASED)
.value("PROTOSS_FLEETBEACON", sc2::UNIT_TYPEID::PROTOSS_FLEETBEACON)
.value("PROTOSS_FORGE", sc2::UNIT_TYPEID::PROTOSS_FORGE)
.value("PROTOSS_GATEWAY", sc2::UNIT_TYPEID::PROTOSS_GATEWAY)
.value("PROTOSS_HIGHTEMPLAR", sc2::UNIT_TYPEID::PROTOSS_HIGHTEMPLAR)
.value("PROTOSS_IMMORTAL", sc2::UNIT_TYPEID::PROTOSS_IMMORTAL)
.value("PROTOSS_INTERCEPTOR", sc2::UNIT_TYPEID::PROTOSS_INTERCEPTOR)
.value("PROTOSS_MOTHERSHIP", sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIP)
.value("PROTOSS_MOTHERSHIPCORE", sc2::UNIT_TYPEID::PROTOSS_MOTHERSHIPCORE)
.value("PROTOSS_NEXUS", sc2::UNIT_TYPEID::PROTOSS_NEXUS)
.value("PROTOSS_OBSERVER", sc2::UNIT_TYPEID::PROTOSS_OBSERVER)
.value("PROTOSS_ORACLE", sc2::UNIT_TYPEID::PROTOSS_ORACLE)
.value("PROTOSS_ORACLESTASISTRAP", sc2::UNIT_TYPEID::PROTOSS_ORACLESTASISTRAP)
.value("PROTOSS_PHOENIX", sc2::UNIT_TYPEID::PROTOSS_PHOENIX)
.value("PROTOSS_PHOTONCANNON", sc2::UNIT_TYPEID::PROTOSS_PHOTONCANNON)
.value("PROTOSS_PROBE", sc2::UNIT_TYPEID::PROTOSS_PROBE)
.value("PROTOSS_PYLON", sc2::UNIT_TYPEID::PROTOSS_PYLON)
.value("PROTOSS_PYLONOVERCHARGED", sc2::UNIT_TYPEID::PROTOSS_PYLONOVERCHARGED)
.value("PROTOSS_ROBOTICSBAY", sc2::UNIT_TYPEID::PROTOSS_ROBOTICSBAY)
.value("PROTOSS_ROBOTICSFACILITY", sc2::UNIT_TYPEID::PROTOSS_ROBOTICSFACILITY)
.value("PROTOSS_SENTRY", sc2::UNIT_TYPEID::PROTOSS_SENTRY)
.value("PROTOSS_SHIELDBATTERY", sc2::UNIT_TYPEID::PROTOSS_SHIELDBATTERY)
.value("PROTOSS_STALKER", sc2::UNIT_TYPEID::PROTOSS_STALKER)
.value("PROTOSS_STARGATE", sc2::UNIT_TYPEID::PROTOSS_STARGATE)
.value("PROTOSS_TEMPEST", sc2::UNIT_TYPEID::PROTOSS_TEMPEST)
.value("PROTOSS_TEMPLARARCHIVE", sc2::UNIT_TYPEID::PROTOSS_TEMPLARARCHIVE)
.value("PROTOSS_TWILIGHTCOUNCIL", sc2::UNIT_TYPEID::PROTOSS_TWILIGHTCOUNCIL)
.value("PROTOSS_VOIDRAY", sc2::UNIT_TYPEID::PROTOSS_VOIDRAY)
.value("PROTOSS_WARPGATE", sc2::UNIT_TYPEID::PROTOSS_WARPGATE)
.value("PROTOSS_WARPPRISM", sc2::UNIT_TYPEID::PROTOSS_WARPPRISM)
.value("PROTOSS_WARPPRISMPHASING", sc2::UNIT_TYPEID::PROTOSS_WARPPRISMPHASING)
.value("PROTOSS_ZEALOT", sc2::UNIT_TYPEID::PROTOSS_ZEALOT)
.value("NEUTRAL_BATTLESTATIONMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_BATTLESTATIONMINERALFIELD)
.value("NEUTRAL_BATTLESTATIONMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_BATTLESTATIONMINERALFIELD750)
.value("NEUTRAL_COLLAPSIBLEROCKTOWERDEBRIS", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERDEBRIS)
.value("NEUTRAL_COLLAPSIBLEROCKTOWERDIAGONAL", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERDIAGONAL)
.value("NEUTRAL_COLLAPSIBLEROCKTOWERPUSHUNIT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLEROCKTOWERPUSHUNIT)
.value("NEUTRAL_COLLAPSIBLETERRANTOWERDEBRIS", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERDEBRIS)
.value("NEUTRAL_COLLAPSIBLETERRANTOWERDIAGONAL", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERDIAGONAL)
.value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNIT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNIT)
.value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPLEFT)
.value("NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERPUSHUNITRAMPRIGHT)
.value("NEUTRAL_COLLAPSIBLETERRANTOWERRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERRAMPLEFT)
.value("NEUTRAL_COLLAPSIBLETERRANTOWERRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_COLLAPSIBLETERRANTOWERRAMPRIGHT)
.value("NEUTRAL_DEBRISRAMPLEFT", sc2::UNIT_TYPEID::NEUTRAL_DEBRISRAMPLEFT)
.value("NEUTRAL_DEBRISRAMPRIGHT", sc2::UNIT_TYPEID::NEUTRAL_DEBRISRAMPRIGHT)
.value("NEUTRAL_DESTRUCTIBLEDEBRIS6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRIS6X6)
.value("NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEBLUR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEBLUR)
.value("NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEULBR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEDEBRISRAMPDIAGONALHUGEULBR)
.value("NEUTRAL_DESTRUCTIBLEROCK6X6", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEROCK6X6)
.value("NEUTRAL_DESTRUCTIBLEROCKEX1DIAGONALHUGEBLUR", sc2::UNIT_TYPEID::NEUTRAL_DESTRUCTIBLEROCKEX1DIAGONALHUGEBLUR)
.value("NEUTRAL_FORCEFIELD", sc2::UNIT_TYPEID::NEUTRAL_FORCEFIELD)
.value("NEUTRAL_KARAKFEMALE", sc2::UNIT_TYPEID::NEUTRAL_KARAKFEMALE)
.value("NEUTRAL_LABMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD)
.value("NEUTRAL_LABMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_LABMINERALFIELD750)
.value("NEUTRAL_MINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD)
.value("NEUTRAL_MINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_MINERALFIELD750)
.value("NEUTRAL_PROTOSSVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_PROTOSSVESPENEGEYSER)
.value("NEUTRAL_PURIFIERMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERMINERALFIELD)
.value("NEUTRAL_PURIFIERMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERMINERALFIELD750)
.value("NEUTRAL_PURIFIERRICHMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERRICHMINERALFIELD)
.value("NEUTRAL_PURIFIERRICHMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERRICHMINERALFIELD750)
.value("NEUTRAL_PURIFIERVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_PURIFIERVESPENEGEYSER)
.value("NEUTRAL_RICHMINERALFIELD", sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD)
.value("NEUTRAL_RICHMINERALFIELD750", sc2::UNIT_TYPEID::NEUTRAL_RICHMINERALFIELD750)
.value("NEUTRAL_RICHVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_RICHVESPENEGEYSER)
.value("NEUTRAL_SCANTIPEDE", sc2::UNIT_TYPEID::NEUTRAL_SCANTIPEDE)
.value("NEUTRAL_SHAKURASVESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_SHAKURASVESPENEGEYSER)
.value("NEUTRAL_SPACEPLATFORMGEYSER", sc2::UNIT_TYPEID::NEUTRAL_SPACEPLATFORMGEYSER)
.value("NEUTRAL_UNBUILDABLEBRICKSDESTRUCTIBLE", sc2::UNIT_TYPEID::NEUTRAL_UNBUILDABLEBRICKSDESTRUCTIBLE)
.value("NEUTRAL_UNBUILDABLEPLATESDESTRUCTIBLE", sc2::UNIT_TYPEID::NEUTRAL_UNBUILDABLEPLATESDESTRUCTIBLE)
.value("NEUTRAL_UTILITYBOT", sc2::UNIT_TYPEID::NEUTRAL_UTILITYBOT)
.value("NEUTRAL_VESPENEGEYSER", sc2::UNIT_TYPEID::NEUTRAL_VESPENEGEYSER)
.value("NEUTRAL_XELNAGATOWER", sc2::UNIT_TYPEID::NEUTRAL_XELNAGATOWER);
m.def("CreateComputer", &sc2::CreateComputer, "Create participant from built-in Starcraft computer");
}
include_directories(SYSTEM
${PROJECT_SOURCE_DIR}/lib/s2client-api/include
${PROJECT_SOURCE_DIR}/lib/s2client-api/contrib/protobuf/src
${PROJECT_BINARY_DIR}/lib/s2client-api/generated
)
# All the source files for the bot.
file(GLOB BOT_SOURCES "../src/*.cpp" "../src/*.h" "../src/*.hpp")
file(GLOB LIBRARY_SOURCES "*.cpp" "*.h")
link_directories(${PROJECT_BINARY_DIR}/s2client-api/bin)
# Enable compilation of the SC2 version of the bot code
# TODO: Remove all remaining BW code
add_definitions(-DSC2API)
# Create the executable.
pybind11_add_module(library library.cpp library.h ${BOT_SOURCES} ${LIBRARY_SOURCES})
target_link_libraries(library PRIVATE
sc2api sc2lib sc2utils sc2protocol libprotobuf
)
This diff is collapsed.
#include "library.h"
namespace py = pybind11;
PYBIND11_MODULE(library, m)
{
m.doc() = "pybind11 example plugin";
py::class_<Coordinator>(m, "Coordinator")
.def(py::init())
.def("SetParticipants", &sc2::Coordinator::SetParticipants)
.def("LaunchStarcraft", &sc2::Coordinator::LaunchStarcraft)
.def("StartGame", &sc2::Coordinator::StartGame)
.def("Update", &sc2::Coordinator::Update);
py::enum_<sc2::Race>(m, "Race")
.value("Terran", sc2::Race::Terran)
.value("Zerg", sc2::Race::Zerg)
.value("Protoss", sc2::Race::Protoss)
.value("Random", sc2::Race::Random);
py::class_<sc2::Agent>(m, "Agent")
.def(py::init());
// IDABot is a specialization of Agent
py::class_<IDABot, sc2::Agent>(m, "IDABot")
.def(py::init());
py::class_<sc2::PlayerSetup>(m, "PlayerSetup");
py::enum_<sc2::Difficulty>(m, "Difficulty")
.value("VeryEasy", sc2::Difficulty::VeryEasy)
.value("Easy", sc2::Difficulty::Easy)
.value("Medium", sc2::Difficulty::Medium)
.value("MediumHard", sc2::Difficulty::MediumHard)
.value("Hard", sc2::Difficulty::Hard)
.value("HardVeryHard", sc2::Difficulty::HardVeryHard)
.value("VeryHard", sc2::Difficulty::VeryHard)
.value("CheatVision", sc2::Difficulty::CheatVision)
.value("CheatMoney", sc2::Difficulty::CheatMoney)
.value("CheatInsane", sc2::Difficulty::CheatInsane);
m.def("CreateParticipant", &sc2::CreateParticipant, "Create participant from agent");
m.def("CreateComputer", &sc2::CreateComputer, "Create participant from built-in Starcraft computer");
}
...@@ -2,10 +2,11 @@ ...@@ -2,10 +2,11 @@
#include <pybind11/pybind11.h> #include <pybind11/pybind11.h>
#include <sc2api/sc2_api.h> #include <sc2api/sc2_api.h>
#include "src/IDABot.h" #include "../src/IDABot.h"
#include <iostream> #include <iostream>
#include <pybind11/stl.h> /* Automatic conversion from std::vector to Python lists */ #include <pybind11/stl.h> /* Automatic conversion from std::vector to Python lists */
// Wrapper class since the initialization uses pure argc/argv and these cannot be wrapped into Python correctly
class Coordinator : public sc2::Coordinator class Coordinator : public sc2::Coordinator
{ {
public: public:
...@@ -16,4 +17,7 @@ public: ...@@ -16,4 +17,7 @@ public:
int argc = sizeof(argv) / sizeof(char*) - 1; int argc = sizeof(argv) / sizeof(char*) - 1;
LoadSettings(argc, argv); LoadSettings(argc, argv);
} }
}; };
\ No newline at end of file
// Defined
void define_typeenums(pybind11::module & m);
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment