From 615faf47d53094254a2c1875d23a12d6d7f70b22 Mon Sep 17 00:00:00 2001 From: Anton Andell <antan048@student.liu.se> Date: Tue, 4 Dec 2018 12:59:32 +0100 Subject: [PATCH] ability, ability at target and buffs --- python-api-src/lib_unit.cpp | 3 +++ python-api-src/library.cpp | 7 +++++++ src/Common.h | 1 + src/Unit.cpp | 22 ++++++++++++++++++++++ src/Unit.h | 3 +++ 5 files changed, 36 insertions(+) diff --git a/python-api-src/lib_unit.cpp b/python-api-src/lib_unit.cpp index 58cd79158..90aedec40 100644 --- a/python-api-src/lib_unit.cpp +++ b/python-api-src/lib_unit.cpp @@ -19,6 +19,7 @@ void define_unit(py::module & m) .def_property_readonly("is_being_constructed", &Unit::isBeingConstructed) .def_property_readonly("is_cloaked", &Unit::isCloaked) .def_property_readonly("is_flying", &Unit::isFlying) + .def_property_readonly("buffs", &Unit::buffs) .def_property_readonly("is_alive", &Unit::isAlive) .def_property_readonly("is_powered", &Unit::isPowered) .def_property_readonly("is_idle", &Unit::isIdle) @@ -28,6 +29,8 @@ void define_unit(py::module & m) .def("stop", &Unit::stop) .def("attack_unit", &Unit::attackUnit) .def("attack_move", &Unit::attackMove) + .def("ability", &Unit::ability) + .def("ability_at_target", &Unit::ability_at_target) .def("move", py::overload_cast<const CCPosition &>(&Unit::move, py::const_)) .def("move", py::overload_cast<const CCTilePosition &>(&Unit::move, py::const_)) .def("right_click", &Unit::rightClick, "Same as right-clicking in the game, for example making workers mine minerals") diff --git a/python-api-src/library.cpp b/python-api-src/library.cpp index 50ec422ac..026e7d7f8 100644 --- a/python-api-src/library.cpp +++ b/python-api-src/library.cpp @@ -43,11 +43,18 @@ PYBIND11_MODULE(library, m) TODO: BuffID is not defined, defined as following by Blizzard: typedef SC2Type<BUFF_ID> BuffID; */ + py::class_<sc2::BuffID>(m, "BuffID") + .def(py::init<sc2::BUFF_ID>()); + + py::implicitly_convertible<sc2::BUFF_ID, sc2::BuffID>(); + + py::class_<sc2::UnitTypeID>(m, "UnitTypeID") .def(py::init<sc2::UNIT_TYPEID>()); py::implicitly_convertible<sc2::UNIT_TYPEID, sc2::UnitTypeID>(); + py::class_<sc2::UpgradeID>(m, "UpgradeID") .def(py::init<sc2::UPGRADE_ID>()); diff --git a/src/Common.h b/src/Common.h index fa45feb4e..a8538c47b 100644 --- a/src/Common.h +++ b/src/Common.h @@ -24,6 +24,7 @@ typedef sc2::Tag CCUnitID; typedef sc2::Race CCRace; typedef float CCHealth; typedef float CCPositionType; +typedef sc2::BuffID CCBuff; typedef size_t CCPlayer; diff --git a/src/Unit.cpp b/src/Unit.cpp index a18995967..1590442fc 100644 --- a/src/Unit.cpp +++ b/src/Unit.cpp @@ -146,6 +146,16 @@ bool Unit::isFlying() const #endif } +std::vector< CCBuff > Unit::buffs() const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); +#ifdef SC2API + return m_unit->buffs; +#else + return m_unit->buffs(); +#endif +} + bool Unit::isAlive() const { BOT_ASSERT(isValid(), "Unit is not valid"); @@ -285,6 +295,18 @@ void Unit::morph(const UnitType & type) const BOT_ASSERT(isValid(), "Unit is not valid"); m_bot->Actions()->UnitCommand(m_unit, m_bot->Data(type).morphAbility); } +void Unit::ability(sc2::AbilityID & ability) const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + m_bot->Actions()->UnitCommand(m_unit, ability); +} + +void Unit::ability_at_target(sc2::AbilityID & ability, const Unit & target) const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + m_bot->Actions()->UnitCommand(m_unit, ability, target.getUnitPtr()); +} + void Unit::research(sc2::UpgradeID upgrade) const { diff --git a/src/Unit.h b/src/Unit.h index 5770bd80b..74b2b50a2 100644 --- a/src/Unit.h +++ b/src/Unit.h @@ -33,6 +33,7 @@ public: CCHealth getEnergy() const; CCPlayer getPlayer() const; CCUnitID getID() const; + std::vector< CCBuff > buffs() const; float getBuildPercentage() const; int getWeaponCooldown() const; bool isCompleted() const; @@ -51,6 +52,8 @@ public: void attackUnit (const Unit & target) const; void attackMove (const CCPosition & targetPosition) const; void move (const CCPosition & targetPosition) const; + void ability (sc2::AbilityID & ability) const; + void ability_at_target (sc2::AbilityID & ability, const Unit & target) const; void move (const CCTilePosition & targetTilePosition) const; void rightClick (const Unit & target) const; void repair (const Unit & target) const; -- GitLab