diff --git a/python-api-src/lib_unit.cpp b/python-api-src/lib_unit.cpp index 51026485aecca7d226050e89c003c40ad559ead1..f04d5cb87c4d445074c12016c9fc3f60ba1d54b5 100644 --- a/python-api-src/lib_unit.cpp +++ b/python-api-src/lib_unit.cpp @@ -29,6 +29,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("ability_id", &Unit::getAbilityID, "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 35313deacf2f308b88347d6c789d200b3ab5f333..1dc74370cf10c6c036cd4258ccda0501c25bbfac 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("tech_requirement", &UnitType::getTechRequirement) .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 15277c8cb352e78a630186c39e66581aa6535660..cac0e306973004a80db77c0d00b75489f5752715 100644 --- a/src/Unit.cpp +++ b/src/Unit.cpp @@ -343,5 +343,65 @@ bool Unit::isBlip() const CCHealth Unit::getMaxHitPoints() const { BOT_ASSERT(isValid(), "Unit is not valid"); + return m_unit->health_max; -} \ No newline at end of file +} + +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::getAbilityID() 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].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 f9c51a711658f49ed53787aba5e4832c3236bc7d..d10e52e8e68bec9c7e1754ea5787cc4717dd7586 100644 --- a/src/Unit.h +++ b/src/Unit.h @@ -51,6 +51,13 @@ public: bool hasTarget() const; Unit getTarget() const; CCHealth getMaxHitPoints() const; + float getProgress() const; + sc2::AbilityID getAbilityID() 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..154654f115c40176e663d673e18744fd5da8cdc9 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; +} + +UnitType UnitType::getTechRequirement() const +{ + return m_bot->Observation()->GetUnitTypeData()[m_type].tech_requirement; +} diff --git a/src/UnitType.h b/src/UnitType.h index 8f9d9755a634e6058bff62eca9cf0cbd0679ec7b..8568f4a16d4b0303307ed57fc343ebf95649b800 100644 --- a/src/UnitType.h +++ b/src/UnitType.h @@ -24,6 +24,8 @@ public: CCRace getRace() const; int getMovementSpeed() const; + int getSightRange() const; + UnitType getTechRequirement() const; bool isValid() const; bool isBuilding() const;