diff --git a/python-api-src/lib_map_tools.cpp b/python-api-src/lib_map_tools.cpp new file mode 100644 index 0000000000000000000000000000000000000000..daa00f26ff39f460c2a603b05fac74e2a42d043c --- /dev/null +++ b/python-api-src/lib_map_tools.cpp @@ -0,0 +1,52 @@ +#include "library.h" + +namespace py = pybind11; + +void define_map_tools(py::module & m) +{ + const CCColor white{ 255, 255, 255 }; + py::class_<MapTools>(m, "MapTools") + .def_property_readonly("width", &MapTools::width) + .def_property_readonly("height", &MapTools::height) + //.def("terrainHeight", &MapTools::terrainHeight, py::const_) + .def("draw_line", py::overload_cast<const CCPosition &, const CCPosition &, const CCColor &>(&MapTools::drawLine, py::const_), py::arg("start"), py::arg("stop"), py::arg("color")) + //.def("draw_line", py::overload_cast<CCPositionType, CCPositionType, CCPositionType, CCPositionType, const CCColor &>(&MapTools::drawLine, py::const_)); // TODO: Default argument?? + .def("draw_box", py::overload_cast<const CCPosition &, const CCPosition &, const CCColor &>(&MapTools::drawBox, py::const_), py::arg("top_left"), py::arg("bottom_right"), py::arg("color")) + .def("draw_circle", py::overload_cast<const CCPosition &, CCPositionType, const CCColor &>(&MapTools::drawCircle, py::const_), py::arg("center"), py::arg("radius"), py::arg("color")) + .def("draw_text", &MapTools::drawText) + .def("draw_text_screen", &MapTools::drawTextScreen); + + /* + TODO: Left to implement + drawBox(CCPositionType x1, CCPositionType y1, CCPositionType x2, CCPositionType y2, const CCColor & color = CCColor(255, 255, 255)) const; + drawCircle(CCPositionType x1, CCPositionType x2, CCPositionType radius, const CCColor & color = CCColor(255, 255, 255)) const; + + isValidTile(int tileX, int tileY) const; + isValidTile(const CCTilePosition & tile) const; + isValidPosition(const CCPosition & pos) const; + isPowered(int tileX, int tileY) const; + isExplored(int tileX, int tileY) const; + isExplored(const CCPosition & pos) const; + isExplored(const CCTilePosition & pos) const; + isVisible(int tileX, int tileY) const; + canBuildTypeAtPosition(int tileX, int tileY, const UnitType & type) const; + + getDistanceMap(const CCTilePosition & tile) const; + getDistanceMap(const CCPosition & tile) const; + getGroundDistance(const CCPosition & src, const CCPosition & dest) const; + isConnected(int x1, int y1, int x2, int y2) const; + isConnected(const CCTilePosition & from, const CCTilePosition & to) const; + isConnected(const CCPosition & from, const CCPosition & to) const; + isWalkable(int tileX, int tileY) const; + isWalkable(const CCTilePosition & tile) const; + + isBuildable(int tileX, int tileY) const; + isBuildable(const CCTilePosition & tile) const; + isDepotBuildableTile(int tileX, int tileY) const; + + getLeastRecentlySeenTile() const; + + // returns a list of all tiles on the map, sorted by 4-direcitonal walk distance from the given position + const std::vector<CCTilePosition> & getClosestTilesTo(const CCTilePosition & pos) const; + */ +} \ No newline at end of file diff --git a/python-api-src/library.cpp b/python-api-src/library.cpp index 8f3bfceebb32cdc90604d7a37d8eee5ed08f3e86..ec324f9b7e62f026fb874ba414f93ad37899ccf7 100644 --- a/python-api-src/library.cpp +++ b/python-api-src/library.cpp @@ -13,6 +13,7 @@ PYBIND11_MODULE(library, m) define_point(m); define_base_location(m); define_tech_tree(m); + define_map_tools(m); py::class_<Coordinator>(m, "Coordinator") .def(py::init()) @@ -64,6 +65,7 @@ PYBIND11_MODULE(library, m) .def("get_player_race", &IDABot::GetPlayerRace) .def_property_readonly("base_location_manager", &IDABot::Bases) .def_property_readonly("tech_tree", &IDABot::TechTree) + .def_property_readonly("map_tools", &IDABot::Map) .def_property_readonly("start_location", &IDABot::GetStartLocation) .def_property_readonly("minerals", &IDABot::GetMinerals) .def_property_readonly("current_supply", &IDABot::GetCurrentSupply) @@ -84,6 +86,24 @@ PYBIND11_MODULE(library, m) .value("CheatMoney", sc2::Difficulty::CheatMoney) .value("CheatInsane", sc2::Difficulty::CheatInsane); + py::class_<sc2::Color>(m, "Color") + .def(py::init<>()) + .def(py::init<int, int, int>()) + .def_readwrite("r", &sc2::Color::r) + .def_readwrite("g", &sc2::Color::g) + .def_readwrite("b", &sc2::Color::b); + + py::module colors = m.def_submodule("Colors", "Constants for common colors"); + colors.attr("White") = sc2::Colors::White; + colors.attr("Red") = sc2::Colors::Red; + colors.attr("Green") = sc2::Colors::Green; + colors.attr("Yellow") = sc2::Colors::Yellow; + colors.attr("Blue") = sc2::Colors::Blue; + colors.attr("Teal") = sc2::Colors::Teal; + colors.attr("Purple") = sc2::Colors::Purple; + colors.attr("Black") = sc2::Colors::Black; + colors.attr("Gray") = sc2::Colors::Gray; + m.def("create_participants", &sc2::CreateParticipant, "Create participant from agent"); m.def("create_computer", &sc2::CreateComputer, "Create participant from built-in Starcraft computer"); } diff --git a/python-api-src/library.h b/python-api-src/library.h index 0bdb906e38f56f2565068dc8d71b06655488261b..f59ca94f0721525e027d83886a054341c4f40143 100644 --- a/python-api-src/library.h +++ b/python-api-src/library.h @@ -58,4 +58,5 @@ void define_unittype(pybind11::module &m); void define_util(pybind11::module &m); void define_point(pybind11::module &m); void define_base_location(pybind11::module & m); -void define_tech_tree(pybind11::module & m); \ No newline at end of file +void define_tech_tree(pybind11::module & m); +void define_map_tools(pybind11::module & m); \ No newline at end of file