diff --git a/python-api-src/library.cpp b/python-api-src/library.cpp index 50ec422acb00f0f77d3aa241b671a3fdd45b89fa..c1c0dc0192e86f89ec678649b35aa3822e5cd6f4 100644 --- a/python-api-src/library.cpp +++ b/python-api-src/library.cpp @@ -63,22 +63,25 @@ PYBIND11_MODULE(library, m) .def(py::init()); // IDABot is a specialization of Agent - py::class_<IDABot, PyIDABot, sc2::Agent>(m, "IDABot") - .def(py::init()) - .def("on_game_start", &IDABot::OnGameStart) - .def("on_step", &IDABot::OnStep) - .def("get_all_units", &IDABot::GetAllUnits, "Returns a list of all units") - .def("get_my_units", &IDABot::GetMyUnits, "Returns a list of all units beloning to the player") - .def("get_player_race", &IDABot::GetPlayerRace) - .def_property_readonly("base_location_manager", &IDABot::Bases) - .def_property_readonly("tech_tree", &IDABot::GetTechTree) - .def_property_readonly("map_tools", &IDABot::Map) - .def_property_readonly("building_placer", &IDABot::GetBuildingPlacer) - .def_property_readonly("start_location", &IDABot::GetStartLocation, "CCPosition representing the start location") - .def_property_readonly("minerals", &IDABot::GetMinerals, "How much minerals we currently have") - .def_property_readonly("current_supply", &IDABot::GetCurrentSupply, "How much supply we are currently using") - .def_property_readonly("max_supply", &IDABot::GetMaxSupply, "How much supply we can currently use") - .def_property_readonly("gas", &IDABot::GetGas, "How much gas we currently have"); + py::class_<IDABot, PyIDABot, sc2::Agent>(m, "IDABot") + .def(py::init()) + .def("on_game_start", &IDABot::OnGameStart) + .def("on_step", &IDABot::OnStep) + .def("get_all_units", &IDABot::GetAllUnits, "Returns a list of all units") + .def("get_my_units", &IDABot::GetMyUnits, "Returns a list of all units beloning to the player") + .def("get_player_race", &IDABot::GetPlayerRace) + .def_property_readonly("base_location_manager", &IDABot::Bases) + .def_property_readonly("tech_tree", &IDABot::GetTechTree) + .def_property_readonly("map_tools", &IDABot::Map) + .def_property_readonly("building_placer", &IDABot::GetBuildingPlacer) + .def_property_readonly("start_location", &IDABot::GetStartLocation, "CCPosition representing the start location") + .def_property_readonly("minerals", &IDABot::GetMinerals, "How much minerals we currently have") + .def_property_readonly("current_supply", &IDABot::GetCurrentSupply, "How much supply we are currently using") + .def_property_readonly("max_supply", &IDABot::GetMaxSupply, "How much supply we can currently use") + .def_property_readonly("gas", &IDABot::GetGas, "How much gas we currently have") + .def("use_ability", &IDABot::CallUnitCommand, "Use an ability with the given unit") + .def("use_ability", &IDABot::CallUnitCommandWithPoint, "Use ability at point with the given unit") + .def("use_ability", &IDABot::CallUnitCommandWithTarget, "Use ability at target with the given unit"); py::class_<sc2::PlayerSetup>(m, "PlayerSetup"); diff --git a/src/IDABot.cpp b/src/IDABot.cpp index f61dc8329e06685f6078df8c859dd01619207af1..5a7b4dd305309e1422956bb7169e8d4c6abb90df 100644 --- a/src/IDABot.cpp +++ b/src/IDABot.cpp @@ -219,3 +219,17 @@ const TypeData & IDABot::Data(const MetaType & type) const return m_techTree.getData(type); } +void IDABot::CallUnitCommand(const Unit* unit, sc2::AbilityID ability) +{ + Actions()->UnitCommand(unit->getUnitPtr(), ability, false); +} + +void IDABot::CallUnitCommandWithPoint(const Unit* unit, sc2::AbilityID ability, const sc2::Point2D& point) +{ + Actions()->UnitCommand(unit->getUnitPtr(), ability, point, false); +} + +void IDABot::CallUnitCommandWithTarget(const Unit* unit, sc2::AbilityID ability, const Unit* target) +{ + Actions()->UnitCommand(unit->getUnitPtr(), ability, target->getUnitPtr(), false); +} diff --git a/src/IDABot.h b/src/IDABot.h index eca954f01a1857bf31747ae128a239b86dc19e88..7578bef16c572f42da1fc98b204f11eb1e77a3ae 100644 --- a/src/IDABot.h +++ b/src/IDABot.h @@ -62,4 +62,9 @@ public: const TypeData & Data(const CCUpgrade & type) const; const TypeData & Data(const MetaType & type) const; const TypeData & Data(const Unit & unit) const; + + // Used for giving "raw" commands to units + void CallUnitCommand(const Unit* unit, sc2::AbilityID ability); + void CallUnitCommandWithPoint(const Unit* unit, sc2::AbilityID ability, const sc2::Point2D& point); + void CallUnitCommandWithTarget(const Unit* unit, sc2::AbilityID ability, const Unit* target); };