Skip to content
Snippets Groups Projects
Commit a85e38fc authored by David Bergström's avatar David Bergström
Browse files

Merge branch 'antan048/pycommandcenter-master'

Feature branch allowing for using abilities directly and viewing current buffs on units.
parents a514d03d 615faf47
No related branches found
No related tags found
No related merge requests found
......@@ -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")
......
......@@ -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>());
......
......@@ -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;
......
......@@ -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");
......@@ -286,6 +296,18 @@ void Unit::morph(const UnitType & type) const
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
{
BOT_ASSERT(isValid(), "Unit is not valid");
......@@ -296,4 +318,4 @@ bool Unit::isConstructing(const UnitType & type) const
{
sc2::AbilityID buildAbility = m_bot->Data(type).buildAbility;
return (getUnitPtr()->orders.size() > 0) && (getUnitPtr()->orders[0].ability_id == buildAbility);
}
\ No newline at end of file
}
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment