diff --git a/python-api-src/lib_unit.cpp b/python-api-src/lib_unit.cpp index fd39b5d47cb03704926e0493c7f573c2e7d97873..cb99e65615ae22a661ef9a954f2640f316e1dbb5 100644 --- a/python-api-src/lib_unit.cpp +++ b/python-api-src/lib_unit.cpp @@ -30,6 +30,13 @@ void define_unit(py::module & m) .def_property_readonly("target", &Unit::getTarget) .def_property_readonly("has_target", &Unit::hasTarget) .def_property_readonly("max_hit_points", &Unit::getMaxHitPoints) + .def_property_readonly("progress", &Unit::getProgress) + .def_property_readonly("current_ability_id", &Unit::getCurrentAbilityID, "The AbilityID of currently used ability") + .def_property_readonly("facing", &Unit::getFacing) + .def_property_readonly("radius", &Unit::getRadius) + .def("hold_position", &Unit::holdPosition) + .def("patrol", py::overload_cast<const CCPosition &>(&Unit::patrol, py::const_)) + .def("stop_dance", &Unit::stopDance) .def("stop", &Unit::stop) .def("attack_unit", &Unit::attackUnit) .def("attack_move", &Unit::attackMove) diff --git a/python-api-src/lib_unittype.cpp b/python-api-src/lib_unittype.cpp index 0946c514cea674458340ac6f0c6163c7176c4f2b..a5dcc01544e89c9ff41d95e27ab9193a7ee0837a 100644 --- a/python-api-src/lib_unittype.cpp +++ b/python-api-src/lib_unittype.cpp @@ -11,6 +11,8 @@ void define_unittype(py::module & m) .def_property_readonly("name", &UnitType::getName) .def_property_readonly("race", &UnitType::getRace) .def_property_readonly("movement_speed", &UnitType::getMovementSpeed) + .def_property_readonly("sight_range", &UnitType::getSightRange) + .def_property_readonly("required_structure", &UnitType::getRequiredStructure) .def_property_readonly("is_valid", &UnitType::isValid) .def_property_readonly("is_building", &UnitType::isBuilding) .def_property_readonly("is_combat_unit", &UnitType::isCombatUnit, "The unit is not any of the following: worker, supply provider, building, larva, egg") diff --git a/src/Unit.cpp b/src/Unit.cpp index b75c051fe0f44cbd945aa70210e4aa8f01db1e16..0380eb7cb30f0e3346eb50da6e8a8e7ad954d648 100644 --- a/src/Unit.cpp +++ b/src/Unit.cpp @@ -370,3 +370,57 @@ CCHealth Unit::getMaxHitPoints() const BOT_ASSERT(isValid(), "Unit is not valid"); return m_unit->health_max; } + +float Unit::getFacing() const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + return m_unit->facing; +} + +float Unit::getRadius() const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + return m_unit->radius; +} + +float Unit::getProgress() const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + + // If unit has order, return progress of first order + if (getUnitPtr()->orders.size() > 0) { + return getUnitPtr()->orders[0].progress; + } + + return -1; +} + +sc2::AbilityID Unit::getCurrentAbilityID() const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + + // If unit has order, return AbilityID of first order + if (getUnitPtr()->orders.size() > 0) { + return getUnitPtr()->orders[0].ability_id; + } + // return invalid AbilityID + return sc2::ABILITY_ID::INVALID; +} + +void Unit::holdPosition() const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::HOLDPOSITION); +} + +void Unit::patrol(const CCPosition & targetPosition) const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::PATROL, targetPosition); +} + +void Unit::stopDance() const +{ + BOT_ASSERT(isValid(), "Unit is not valid"); + m_bot->Actions()->UnitCommand(m_unit, sc2::ABILITY_ID::STOP_DANCE); +} diff --git a/src/Unit.h b/src/Unit.h index 70c1aa8ed15bc72b6ba09caef68048237915c56e..3d5017726eb16b1b6ccc9ede69c6e1b9cc30571d 100644 --- a/src/Unit.h +++ b/src/Unit.h @@ -52,6 +52,13 @@ public: bool hasTarget() const; Unit getTarget() const; CCHealth getMaxHitPoints() const; + float getProgress() const; + sc2::AbilityID getCurrentAbilityID() const; + void holdPosition() const; + void patrol(const CCPosition & targetPosition) const; + void stopDance() const; + float getFacing() const; + float getRadius() const; void stop () const; void attackUnit (const Unit & target) const; diff --git a/src/UnitType.cpp b/src/UnitType.cpp index 2ace51fcb02044edfcb3c3209d94787526e3962b..b1124c174f33816c16c86a001240d558f313dd79 100644 --- a/src/UnitType.cpp +++ b/src/UnitType.cpp @@ -377,3 +377,13 @@ int UnitType::getMovementSpeed() const { return m_bot->Observation()->GetUnitTypeData()[m_type].movement_speed; } + +int UnitType::getSightRange() const +{ + return m_bot->Observation()->GetUnitTypeData()[m_type].sight_range; +} + +sc2::UnitTypeID UnitType::getRequiredStructure() const +{ + return m_bot->Observation()->GetUnitTypeData()[m_type].tech_requirement; +} diff --git a/src/UnitType.h b/src/UnitType.h index 6c8d04347c8ea5a8d9de52a851aa3c419ad0bbc9..72ea02820e92dca208e52e3b72cb0dd087962474 100644 --- a/src/UnitType.h +++ b/src/UnitType.h @@ -24,6 +24,8 @@ public: CCRace getRace() const; int getMovementSpeed() const; + int getSightRange() const; + sc2::UnitTypeID getRequiredStructure() const; bool isValid() const; bool isBuilding() const;