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)
add_subdirectory(lib/pybind11)
add_subdirectory(lib/s2client-api)
add_subdirectory(src)
add_subdirectory(python-api-src)
# Hack to make compile, these flags are otherwise set to give errors on warnings
set_target_properties(sc2api PROPERTIES COMPILE_FLAGS "/W4")
......@@ -25,26 +26,3 @@ set_target_properties(sc2utils PROPERTIES COMPILE_FLAGS "/W3")
set_target_properties(sc2protocol PROPERTIES COMPILE_FLAGS "/W0")
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 @@
#include <pybind11/pybind11.h>
#include <sc2api/sc2_api.h>
#include "src/IDABot.h"
#include "../src/IDABot.h"
#include <iostream>
#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
{
public:
......@@ -16,4 +17,7 @@ public:
int argc = sizeof(argv) / sizeof(char*) - 1;
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