Skip to content
Snippets Groups Projects
lib_unittype.cpp 4.95 KiB
Newer Older
#include "library.h"

namespace py = pybind11;

void define_unittype(py::module & m)
{
    py::class_<UnitType>(m, "UnitType")
		.def(py::init([](const sc2::UnitTypeID & type, IDABot & bot) {
			return UnitType(type, bot, bot);
		}))
        .def_property_readonly("unit_typeid", [](UnitType & unit_type) { return static_cast<sc2::UNIT_TYPEID>(unit_type.getAPIUnitType()); })
        .def_property_readonly("name", &UnitType::getName, "The name of the unit as a sting.")
        .def_property_readonly("race", &UnitType::getRace, "The race the unit belongs to.")
        .def_property_readonly("movement_speed", &UnitType::getMovementSpeed, "Movement speed of unit type.")
        .def_property_readonly("sight_range", &UnitType::getSightRange, "Range the unit reveals vision.")
        .def_property_readonly("required_structure", &UnitType::getRequiredStructure, "Structure required to build this unit. (Or any with the same tech_alias)")
        .def_property_readonly("is_valid", &UnitType::isValid, "Its a valid unit type")
        .def_property_readonly("is_building", &UnitType::isBuilding, "Is this unit type a building or not")
David Warnquist's avatar
David Warnquist committed
        .def_property_readonly("is_combat_unit", &UnitType::isCombatUnit, "The unit is not any of the following, worker, supply provider, building, larva, egg")
        .def_property_readonly("is_supply_provider", &UnitType::isSupplyProvider, "The unit provides supply")
David Warnquist's avatar
David Warnquist committed
        .def_property_readonly("is_resource_depot", &UnitType::isResourceDepot, "The unit is one of the following, hatchery, lair, hive, commandcenter, orbialtcommand, planetaryfortress, nexus")
        .def_property_readonly("is_refinery", &UnitType::isRefinery, "The unit is one of the following (depending on race), refinery, assimilator, extractor")
        .def_property_readonly("is_detector", &UnitType::isDetector, "Is this a unit type which is a detector unit")
        .def_property_readonly("is_geyser", &UnitType::isGeyser, "Is the unit type a geyser")
        .def_property_readonly("is_mineral", &UnitType::isMineral, "Is the unit type a mineralfield")
        .def_property_readonly("is_worker", &UnitType::isWorker, "Is the unit type a unit which is a worker")
        .def_property_readonly("is_morphed_building", &UnitType::isMorphedBuilding, "Has this building been mophed")
        // Not implemented in CommandCenter
        //.def_property_readonly("can_attack", &UnitType::canAttack)
        //.def_property_readonly("can_Move", &UnitType::canMove)
        .def_property_readonly("is_addon", &UnitType::isAddon, "Is this unit type a addon")
		.def_property_readonly("can_attack_ground", &UnitType::canAttackGound, "True if this unit can attack ground units")
		.def_property_readonly("can_attack_air", &UnitType::canAttackAir, "True if this unit can attack air units")
        .def_property_readonly("attack_range", &UnitType::getAttackRange, "Returns the attack range of the unit type")
		.def_property_readonly("attack_damage", &UnitType::getAttackDamage, "Returns the base attack damage of the unit type")
        .def_property_readonly("tile_width", &UnitType::tileWidth, "Returns the width of the unit type")
        .def_property_readonly("tile_height", &UnitType::tileHeight, "Returns the height of the unit type")
        .def_property_readonly("supply_provided", &UnitType::supplyProvided, "Amount of supply provided by the unit type")
        .def_property_readonly("supply_required", &UnitType::supplyRequired, "Amount of supply required for the unit type")
        .def_property_readonly("mineral_price", &UnitType::mineralPrice, "Mineral price of the unit type")
        .def_property_readonly("gas_price", &UnitType::gasPrice, "Gas price of the unit type")
        .def_property_readonly("is_overlord", &UnitType::isOverlord, "Is this a ZERG_OVERLORD")
        .def_property_readonly("is_larva", &UnitType::isLarva, "is this a ZERG_LARVA")
        .def_property_readonly("is_egg", &UnitType::isEgg, "is this a ZERG_EGG")
        .def_property_readonly("is_queen", &UnitType::isQueen, "is this a ZERG_QUEEN")
        .def_property_readonly("is_tank", &UnitType::isTank, "is this a TERRAN_SIEGETANK or TERRAN_SIEGETANKSIEGED")
		.def_property_readonly("get_equivalent_units", &UnitType::getEquivalentUnits, "Units this is equivalent to in terms of satisfying tech requirements.")
		.def_property_readonly("required_attached", &UnitType::requiredAttached, "Whether tech_requirement is an add-on.")
		.def_property_readonly("build_time", &UnitType::getBuildTime, "How long the unit takes to build.")
        .def("__hash__", [](const UnitType & unit_type) { return std::hash<CCUnitID>{}(unit_type.getAPIUnitType()); })
        .def(py::self == py::self)
David Warnquist's avatar
David Warnquist committed
        .def("__repr__", [](const UnitType & unit_type) { return "<UnitType: '" + unit_type.getName() + "'>"; })
        .doc() = R"(
            Wrapper for :class:`library.UNIT_TYPEID`. Represents a type of unit in the game.
        )";

        // Not implemented in CommandCenter
        //.def("whatBuilds", &UnitType::whatBuilds);
David Bergström's avatar
David Bergström committed
}