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

Make morphing abilities a separate entry

parent 85976252
No related branches found
No related tags found
No related merge requests found
...@@ -48,10 +48,15 @@ void TechTree::onStart() ...@@ -48,10 +48,15 @@ void TechTree::onStart()
data.requiredUnits.clear(); data.requiredUnits.clear();
data.requiredUpgrades.clear(); data.requiredUpgrades.clear();
updated.insert(description.result_type); updated.insert(description.result_type);
data.buildAbility = sc2::ABILITY_ID::INVALID;
} }
data.whatBuilds.push_back(UnitType(description.producer_type, m_bot)); data.whatBuilds.push_back(UnitType(description.producer_type, m_bot));
if (description.build_ability != sc2::ABILITY_ID::INVALID) data.buildAbility = description.build_ability;
if (description.morph_ability != sc2::ABILITY_ID::INVALID) data.morphAbility = description.morph_ability;
for (sc2::UNIT_TYPEID unit_typeid : description.buildings_needed) for (sc2::UNIT_TYPEID unit_typeid : description.buildings_needed)
{ {
data.requiredUnits.push_back(UnitType(unit_typeid, m_bot)); data.requiredUnits.push_back(UnitType(unit_typeid, m_bot));
......
...@@ -26,6 +26,7 @@ struct TypeData ...@@ -26,6 +26,7 @@ struct TypeData
std::vector<UnitType> requiredUnits; // owning ONE of these is required to make std::vector<UnitType> requiredUnits; // owning ONE of these is required to make
std::vector<sc2::UPGRADE_ID> requiredUpgrades; // having ALL of these is required to make std::vector<sc2::UPGRADE_ID> requiredUpgrades; // having ALL of these is required to make
std::vector<UnitType> requiredAddons; // a unit of this type must be present next to the producer std::vector<UnitType> requiredAddons; // a unit of this type must be present next to the producer
sc2::AbilityID morphAbility = 0; // the ability which morphes the producer into this type
}; };
class TechTree class TechTree
......
...@@ -115,7 +115,7 @@ void add_requirement(BuildDescription & description, json & requirement) ...@@ -115,7 +115,7 @@ void add_requirement(BuildDescription & description, json & requirement)
void parse_build_description(BuildDescription & description, json & build_item) void parse_build_description(BuildDescription & description, json & build_item)
{ {
description.result_type = static_cast<sc2::UNIT_TYPEID>(build_item["unit"]); description.result_type = static_cast<sc2::UNIT_TYPEID>(build_item["unit"]);
description.ability_used = static_cast<sc2::ABILITY_ID>(build_item["ability"]); description.build_ability = static_cast<sc2::ABILITY_ID>(build_item["ability"]);
if (build_item.find("requires") != build_item.end()) if (build_item.find("requires") != build_item.end())
{ {
...@@ -197,7 +197,7 @@ void TechTreeImproved::parse_unit(json::iterator it) ...@@ -197,7 +197,7 @@ void TechTreeImproved::parse_unit(json::iterator it)
{ {
BuildDescription description; BuildDescription description;
description.producer_type = producer_id; description.producer_type = producer_id;
description.ability_used = static_cast<sc2::ABILITY_ID>(morph_item["ability"]); description.morph_ability = static_cast<sc2::ABILITY_ID>(morph_item["ability"]);
description.result_type = static_cast<sc2::UNIT_TYPEID>(morph_item["unit"]); description.result_type = static_cast<sc2::UNIT_TYPEID>(morph_item["unit"]);
if (morph_item.find("requires") != morph_item.end()) if (morph_item.find("requires") != morph_item.end())
......
...@@ -12,7 +12,8 @@ struct BuildDescription ...@@ -12,7 +12,8 @@ struct BuildDescription
{ {
sc2::UNIT_TYPEID producer_type; sc2::UNIT_TYPEID producer_type;
sc2::UNIT_TYPEID result_type; sc2::UNIT_TYPEID result_type;
sc2::AbilityID ability_used; sc2::AbilityID build_ability;
sc2::AbilityID morph_ability;
std::vector<sc2::UNIT_TYPEID> buildings_needed; std::vector<sc2::UNIT_TYPEID> buildings_needed;
std::vector<sc2::UNIT_TYPEID> addons_needed; std::vector<sc2::UNIT_TYPEID> addons_needed;
......
...@@ -271,31 +271,19 @@ void Unit::build(const UnitType & buildingType, CCTilePosition pos) const ...@@ -271,31 +271,19 @@ void Unit::build(const UnitType & buildingType, CCTilePosition pos) const
void Unit::buildTarget(const UnitType & buildingType, const Unit & target) const void Unit::buildTarget(const UnitType & buildingType, const Unit & target) const
{ {
BOT_ASSERT(isValid(), "Unit is not valid"); BOT_ASSERT(isValid(), "Unit is not valid");
#ifdef SC2API
m_bot->Actions()->UnitCommand(m_unit, m_bot->Data(buildingType).buildAbility, target.getUnitPtr()); m_bot->Actions()->UnitCommand(m_unit, m_bot->Data(buildingType).buildAbility, target.getUnitPtr());
#else
BOT_ASSERT(false, "buildTarget shouldn't be called for BWAPI bots");
#endif
} }
void Unit::train(const UnitType & type) const void Unit::train(const UnitType & type) const
{ {
BOT_ASSERT(isValid(), "Unit is not valid"); BOT_ASSERT(isValid(), "Unit is not valid");
#ifdef SC2API
m_bot->Actions()->UnitCommand(m_unit, m_bot->Data(type).buildAbility); m_bot->Actions()->UnitCommand(m_unit, m_bot->Data(type).buildAbility);
#else
m_unit->train(type.getAPIUnitType());
#endif
} }
void Unit::morph(const UnitType & type) const void Unit::morph(const UnitType & type) const
{ {
BOT_ASSERT(isValid(), "Unit is not valid"); BOT_ASSERT(isValid(), "Unit is not valid");
#ifdef SC2API m_bot->Actions()->UnitCommand(m_unit, m_bot->Data(type).morphAbility);
m_bot->Actions()->UnitCommand(m_unit, m_bot->Data(type).buildAbility);
#else
m_unit->morph(type.getAPIUnitType());
#endif
} }
void Unit::research(sc2::UpgradeID upgrade) const void Unit::research(sc2::UpgradeID upgrade) 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