bool ResourceManager::hasResources(UpgradeType type) { int nMinerals = type.mineralPrice(); int nGas = type.gasPrice(); return hasResources(nMinerals, nGas); }
//--------------------------------------------- GET UPGRADE LEVEL ------------------------------------------ int UnitImpl::getUpgradeLevel(UpgradeType upgrade) const { if ( !getPlayer() || getPlayer()->getUpgradeLevel(upgrade) == 0 || upgrade.whatUses().find(getType()) == upgrade.whatUses().end() ) return 0; return getPlayer()->getUpgradeLevel(upgrade); }
//reserves resources for this upgrade type pair<int, BuildOrderManager::Resources> BuildOrderManager::reserveResources(MetaUnit* techUnit, UpgradeType upgradeType) { int t=Broodwar->getFrameCount(); if (techUnit) t=nextFreeTime(techUnit); pair<int, Resources> ret; ret.first=t; ret.second.minerals=upgradeType.mineralPrice(this->upgradeManager->getPlannedLevel(upgradeType)); ret.second.gas=upgradeType.gasPrice(this->upgradeManager->getPlannedLevel(upgradeType)); reserveResources(ret); return ret; }
//---------------------------------------------------------------------------------------------- EntityClassType StarCraftTechTree::SourceEntity(int p_typeOrResearchId) const { TName ident; TID id; UpgradeType upgrade; TechType tech; BWAPI::UnitType unitType; BWAPI::UnitType sourceType; if (BELONG(ResearchType, p_typeOrResearchId)) { // Is Tech if ((int)p_typeOrResearchId >= ((int)(RESEARCH_START + TechIdOffset))) { id = g_Database.TechMapping.GetBySecond((ResearchType)p_typeOrResearchId); ident = g_Database.TechIdentMapping.GetByFirst(id); tech = TechType::getType(ident); sourceType = tech.whatResearches(); return g_Database.EntityMapping.GetByFirst(sourceType.getID()); } // Is Upgrade else { id = g_Database.UpgradeMapping.GetBySecond((ResearchType)p_typeOrResearchId); ident = g_Database.UpgradeIdentMapping.GetByFirst(id); upgrade = UpgradeType::getType(ident); sourceType = upgrade.whatUpgrades(); return g_Database.EntityMapping.GetByFirst(sourceType.getID()); } } else if(BELONG(EntityClassType, p_typeOrResearchId)) { id = g_Database.EntityMapping.GetBySecond((EntityClassType)p_typeOrResearchId); ident = g_Database.EntityIdentMapping.GetByFirst(id); unitType = UnitType::getType(ident); sourceType = unitType.whatBuilds().first; return g_Database.EntityMapping.GetByFirst(sourceType.getID()); } return ECLASS_END; }
int BuildOrderManager::nextFreeTime(const MetaUnit* unit, UpgradeType t) { int time=nextFreeTime(unit); if (!Broodwar->self()->isUpgrading(t)) return time; for(std::set<MetaUnit*>::iterator i=this->MetaUnitPointers.begin();i!=this->MetaUnitPointers.end();i++) { if ((*i)->getType()!=t.whatUpgrades()) continue; if ((*i)->isUpgrading() && (*i)->getUpgrade()==t) { time=max(time,nextFreeTime(*i)); } } return time; }
bool UpgradesPlanner::canUpgrade(UpgradeType type, Unit* unit) { //1. Check if unit is idle if (!unit->isIdle()) { return false; } //2. Check if unit can do this upgrade if (!Broodwar->canUpgrade(unit, type)) { return false; } //3. Check if we have enough resources if (!ResourceManager::getInstance()->hasResources(type)) { return false; } //4. Check if unit is being constructed if (unit->isBeingConstructed()) { return false; } //5. Check if some other building is already doing this upgrade vector<BaseAgent*> agents = AgentManager::getInstance()->getAgents(); for (int i = 0; i < (int)agents.size(); i++) { if (agents.at(i)->getUnit()->getUpgrade().getID() == type.getID()) { return false; } } //6. Check if we are currently upgrading it if (Broodwar->self()->isUpgrading(type)) { return false; } //All clear. Can do the upgrade. return true; }
UpgradeWindow::UpgradeWindow(Ogui *ogui, game::Game *game, game::Unit *unit) { //this->selectionNumber = -1; this->game = game; this->ogui = ogui; this->unit = unit; this->visible = 1; highlightedWeaponSlot = -1; highlightedUpgradeSlot = -1; highlightedUpgradeId = -1; highlightOn = false; this->upgradesPending = new LinkedList(); this->upgradesPendingCost = 0; assert(unit != NULL); const char *l1Image = getLocaleGuiString("gui_upgrades_window_effect_layer1_image"); const char *l2Image = getLocaleGuiString("gui_upgrades_window_effect_layer2_image"); const char *l3Image = getLocaleGuiString("gui_upgrades_window_effect_layer3_image"); this->effectWindow = new GUIEffectWindow(ogui, l1Image, l2Image, l3Image); // create window { int x = getLocaleGuiInt("gui_upgrades_window_position_x", 0); int y = getLocaleGuiInt("gui_upgrades_window_position_y", 0); int sizex = getLocaleGuiInt("gui_upgrades_window_size_x", UPGRADE_WINDOW_DEFAULT_SIZE_X); int sizey = getLocaleGuiInt("gui_upgrades_window_size_y", UPGRADE_WINDOW_DEFAULT_SIZE_Y); //const char *bgimage = getLocaleGuiString("gui_upgrades_window_background_image"); win = ogui->CreateSimpleWindow(x, y, sizex, sizey, NULL); } win->StartEffect(OGUI_WINDOW_EFFECT_FADEIN, FADE_IN_TIME); win->SetEffectListener(this); effectWindow->fadeIn(FADE_IN_TIME); // title { int x = getLocaleGuiInt("gui_upgrades_title_position_x", 0); int y = getLocaleGuiInt("gui_upgrades_title_position_y", 0); int sizex = getLocaleGuiInt("gui_upgrades_title_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_title_size_y", 0); const char *label = getLocaleGuiString("gui_upgrades_title"); const char *image = getLocaleGuiString("gui_upgrades_title_image"); titleButton = ogui->CreateSimpleTextButton(win, x, y, sizex, sizey, image, NULL, NULL, label, 0); titleButton->SetReactMask(0); titleButton->SetFont(ui::defaultIngameFont); } // parts available icon { int x = getLocaleGuiInt("gui_upgrades_parts_icon_position_x", 0); int y = getLocaleGuiInt("gui_upgrades_parts_icon_position_y", 0); int sizex = getLocaleGuiInt("gui_upgrades_parts_icon_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_parts_icon_size_y", 0); const char *image = getLocaleGuiString("gui_upgrades_parts_icon_image"); upgradePartsIcon = ogui->CreateSimpleImageButton(win, x, y, sizex, sizey, NULL, NULL, NULL, image, 0); upgradePartsIcon->SetDisabled(true); } // parts available text { int x = getLocaleGuiInt("gui_upgrades_parts_text_position_x", 0); int y = getLocaleGuiInt("gui_upgrades_parts_text_position_y", 0); int sizex = getLocaleGuiInt("gui_upgrades_parts_text_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_parts_text_size_y", 0); upgradePartsText = ogui->CreateTextLabel(win, x, y, sizex, sizey, ""); upgradePartsText->SetFont(ui::defaultIngameFont); } // some misc images { const char *tmp; tmp = getLocaleGuiString("gui_upgrades_slot_background_image"); upgradeBGImage = ogui->LoadOguiImage(tmp); tmp = getLocaleGuiString("gui_upgrades_slot_background_disabled_image"); upgradeBGDisabledImage = ogui->LoadOguiImage(tmp); tmp = getLocaleGuiString("gui_upgrades_weapon_highlight_image"); weaponHighlightImage = ogui->LoadOguiImage(tmp); tmp = getLocaleGuiString("gui_upgrades_upgrade_highlight_image"); upgradeHighlightImage = ogui->LoadOguiImage(tmp); tmp = getLocaleGuiString("gui_upgrades_upgrade_selected_image"); upgradeSelectedImage = ogui->LoadOguiImage(tmp); } //selectionImage = ogui->LoadOguiImage("Data/GUI/Buttons/Upgrade/selectedweapon.tga"); //selection = NULL; // first init weapon and upgrade buttons to null... { for (int i = 0; i < UPGRADEWINDOW_MAX_WEAPONS; i++) { weaponImages[i] = NULL; weaponInfoImages[i] = NULL; weaponButtons[i] = NULL; slotBGs[i] = NULL; for (int j = 0; j < UPGRADEWINDOW_MAX_UPGRADES_PER_WEAPON; j++) { upgradeImages[i][j] = NULL; //upgradeDisabledImages[i][j] = NULL; upgradeButtons[i][j] = NULL; upgradeSelections[i][j] = NULL; } } } // then create weapon and upgrade buttons... { for (int i = 0; i < UPGRADEWINDOW_MAX_WEAPONS; i++) { // NOTE: this is actually not an ok part type id! // (thus, should not use this value like this) int partTypeId = -1; partTypeId = PlayerWeaponry::getWeaponIdByUINumber(unit, i); int wnum = -1; if (partTypeId != -1) { wnum = unit->getWeaponByWeaponType(partTypeId); } // weapon image/button int wx = 0; int wy = 0; getWeaponPosition(i, &wx, &wy); { int sizex = getLocaleGuiInt("gui_upgrades_slot_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_slot_size_y", 0); slotBGs[i] = ogui->CreateSimpleImageButton(win, wx, wy, sizex, sizey, NULL, NULL, NULL, NULL); slotBGs[i]->SetReactMask(0); slotBGs[i]->SetDisabled(true); if (wnum != -1) { slotBGs[i]->SetDisabledImage(upgradeBGImage); } else { slotBGs[i]->SetDisabledImage(upgradeBGDisabledImage); } //slotBGs[i]->SetListener(this); } if (wnum != -1) { { char buf[256]; strcpy(buf, "Data/GUI/Buttons/Upgrade/weapon_"); buf[strlen(buf) + 1] = '\0'; buf[strlen(buf)] = '0' + i; strcat(buf, ".tga"); weaponImages[i] = ogui->LoadOguiImage(buf); strcpy(buf, "Data/GUI/Buttons/Upgrade/weapon_"); buf[strlen(buf) + 1] = '\0'; buf[strlen(buf)] = '0' + i; strcat(buf, "_info.tga"); weaponInfoImages[i] = ogui->LoadOguiImage(buf); { int sizex = getLocaleGuiInt("gui_upgrades_slot_weapon_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_slot_weapon_size_y", 0); int woffx = getLocaleGuiInt("gui_upgrades_slot_weapon_offset_x", 0); int id = UPGRADEW_WEAPONBUT_FIRST + i; weaponButtons[i] = ogui->CreateSimpleImageButton(win, wx + woffx, wy, sizex, sizey, NULL, NULL, NULL, NULL, id, (void *)partTypeId); weaponButtons[i]->SetReactMask(0); weaponButtons[i]->SetDisabled(false); weaponButtons[i]->SetImage(weaponImages[i]); weaponButtons[i]->SetListener(this); weaponButtons[i]->SetEventMask(OGUI_EMASK_CLICK | OGUI_EMASK_OVER | OGUI_EMASK_LEAVE); } } // upgrades for that weapon { const char *weapName = NULL; Weapon *w = unit->getWeaponType(wnum); if (w != NULL) { weapName = w->getPartTypeIdString(); } std::vector<int> upgIds; game->upgradeManager->getUpgradesForPart(weapName, upgIds); if (upgIds.size() > UPGRADEWINDOW_MAX_UPGRADES_PER_WEAPON) { Logger::getInstance()->error("UpgradeWindow - Weapon has too many upgrades."); Logger::getInstance()->debug(weapName); } for (int j = 0; j < (int)upgIds.size(); j++) { UpgradeType *upgType = game->upgradeManager->getUpgradeTypeById(upgIds[j]); const char *upgScript = upgType->getScript(); char buf[256]; strcpy(buf, "Data/GUI/Buttons/Upgrade/"); if (strlen(upgScript) < 64) strcat(buf, upgScript); strcat(buf, ".tga"); upgradeImages[i][j] = ogui->LoadOguiImage(buf); //strcpy(buf, "Data/GUI/Buttons/Upgrade/"); //if (strlen(upgScript) < 64) // strcat(buf, upgScript); //strcat(buf, "_disabled.tga"); //upgradeDisabledImages[i][j] = ogui->LoadOguiImage(buf); int x = 0; int y = 0; getWeaponPosition(i, &x, &y); int woffx = getLocaleGuiInt("gui_upgrades_slot_weapon_offset_x", 0); x += woffx; //y += UPGRADE_WEAPON_SELECTION_SIZE_Y; //x += j * (UPGRADE_SLOT_SIZE_X+UPGRADE_SLOT_PADDING); int firstpadx = getLocaleGuiInt("gui_upgrades_slot_upgrade_start_offset_x", 0); int padx = getLocaleGuiInt("gui_upgrades_slot_upgrade_offset_x", 0); int sizex = getLocaleGuiInt("gui_upgrades_slot_upgrade_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_slot_upgrade_size_y", 0); x += firstpadx + j * padx; upgradeSelections[i][j] = ogui->CreateSimpleImageButton(win, x, y, sizex, sizey, NULL, NULL, NULL, NULL, NULL, NULL); upgradeSelections[i][j]->SetReactMask(0); upgradeSelections[i][j]->SetDisabled(true); int id = UPGRADEW_UPGRADEBUT_FIRST + i*UPGRADEWINDOW_MAX_UPGRADES_PER_WEAPON+j; assert(id >= UPGRADEW_UPGRADEBUT_FIRST && id <= UPGRADEW_UPGRADEBUT_LAST); int upgid = upgIds[j]; upgradeButtons[i][j] = ogui->CreateSimpleImageButton(win, x, y, sizex, sizey, NULL, NULL, NULL, NULL, id, (void *)upgid); upgradeButtons[i][j]->SetReactMask(0); upgradeButtons[i][j]->SetImage(upgradeImages[i][j]); //upgradeButtons[i][j]->SetDisabledImage(upgradeDisabledImages[i][j]); upgradeButtons[i][j]->SetListener(this); upgradeButtons[i][j]->SetEventMask(OGUI_EMASK_CLICK | OGUI_EMASK_OVER | OGUI_EMASK_LEAVE); int tmp = this->upgradesPendingCost; //if (game->upgradeManager->canUpgrade(unit, upgIds[j], &tmp)) //{ upgradeButtons[i][j]->SetDisabled(false); //} else { // upgradeButtons[i][j]->SetDisabled(true); //} } } } else { weaponImages[i] = NULL; weaponButtons[i] = NULL; } } } // info picture and text { // background int x = getLocaleGuiInt("gui_upgrades_info_position_x", 0); int y = getLocaleGuiInt("gui_upgrades_info_position_y", 0); int bgsizex = getLocaleGuiInt("gui_upgrades_info_size_x", 0); int bgsizey = getLocaleGuiInt("gui_upgrades_info_size_y", 0); const char *image = getLocaleGuiString("gui_upgrades_info_background_image"); infoBackground = ogui->CreateSimpleImageButton(win, x, y, bgsizex, bgsizey, NULL, NULL, NULL, image, 0, NULL); //infoBackground->SetListener(this); infoBackground->SetDisabled(true); // picture { int offx = getLocaleGuiInt("gui_upgrades_info_picture_offset_x", 0); int offy = getLocaleGuiInt("gui_upgrades_info_picture_offset_y", 0); int sizex = getLocaleGuiInt("gui_upgrades_info_picture_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_info_picture_size_y", 0); infoIcon = ogui->CreateSimpleImageButton(win, x + offx, y + offy, sizex, sizey, NULL, NULL, NULL, NULL, 0, NULL); infoIcon->SetDisabled(true); } // text { int offx = getLocaleGuiInt("gui_upgrades_info_textarea_offset_x", 0); int offy = getLocaleGuiInt("gui_upgrades_info_textarea_offset_y", 0); int sizex = getLocaleGuiInt("gui_upgrades_info_textarea_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_info_textarea_size_y", 0); infoText = new OguiFormattedText( win, ogui, x + offx, y + offy, sizex, sizey ); // infoText = ogui->CreateTextArea(win, x + offx, y + offy, sizex, sizey, ""); // infoText->SetFont(ui::defaultIngameFont); std::string name; name = "gui_upgrades_info_textarea"; fonts.push_back( ogui->LoadFont( getLocaleGuiString( ( name + "_font_default" ).c_str() ) ) ); fonts.push_back( ogui->LoadFont( getLocaleGuiString( ( name + "_font_bold" ).c_str() ) ) ); fonts.push_back( ogui->LoadFont( getLocaleGuiString( ( name + "_font_italic" ).c_str() ) ) ); fonts.push_back( ogui->LoadFont( getLocaleGuiString( ( name + "_font_underline" ).c_str() ) ) ); fonts.push_back( ogui->LoadFont( getLocaleGuiString( ( name + "_font_h1" ).c_str() ) ) ); fonts.push_back( ogui->LoadFont( getLocaleGuiString( ( name + "_font_page" ).c_str() ) ) ); infoText->setFont( fonts[ 0 ] ); infoText->registerFont( "b", fonts[ 1 ] ); infoText->registerFont( "i", fonts[ 2 ] ); infoText->registerFont( "u", fonts[ 3 ] ); infoText->registerFont( "h1", fonts[ 4 ] ); } } // finally undo button { int x = getLocaleGuiInt("gui_upgrades_undo_position_x", 0); int y = getLocaleGuiInt("gui_upgrades_undo_position_y", 0); int sizex = getLocaleGuiInt("gui_upgrades_undo_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_undo_size_y", 0); const char *image = getLocaleGuiString("gui_upgrades_undo_image"); const char *imageDown = getLocaleGuiString("gui_upgrades_undo_down_image"); const char *imageHighlight = getLocaleGuiString("gui_upgrades_undo_highlight_image"); undoButton = ogui->CreateSimpleTextButton(win, x, y, sizex, sizey, image, imageDown, imageHighlight, "", UPGRADEW_UNDOBUT); undoButton->SetListener(this); undoButton->SetFont(ui::defaultIngameFont); } // and close button { int x = getLocaleGuiInt("gui_upgrades_close_position_x", 0); int y = getLocaleGuiInt("gui_upgrades_close_position_y", 0); int sizex = getLocaleGuiInt("gui_upgrades_close_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_close_size_y", 0); const char *label = getLocaleGuiString("gui_upgrades_close"); const char *image = getLocaleGuiString("gui_upgrades_close_image"); const char *imageDown = getLocaleGuiString("gui_upgrades_close_down_image"); const char *imageHighlight = getLocaleGuiString("gui_upgrades_close_highlight_image"); closeButton = ogui->CreateSimpleTextButton(win, x, y, sizex, sizey, image, imageDown, imageHighlight, label, UPGRADEW_CLOSEBUT); closeButton->SetListener(this); closeButton->SetFont(ui::defaultIngameFont); } // highlight for upgrades { int sizex = getLocaleGuiInt("gui_upgrades_slot_upgrade_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_slot_upgrade_size_y", 0); upgradeHighlight = ogui->CreateSimpleTextButton(win, 0, 0, sizex, sizey, NULL, NULL, NULL, NULL); upgradeHighlight->SetDisabled(true); } // highlight for weapons { int sizex = getLocaleGuiInt("gui_upgrades_slot_weapon_size_x", 0); int sizey = getLocaleGuiInt("gui_upgrades_slot_weapon_size_y", 0); weaponHighlight = ogui->CreateSimpleTextButton(win, 0, 0, sizex, sizey, NULL, NULL, NULL, NULL); weaponHighlight->SetDisabled(true); } update(); //game->gameUI->setGUIVisibility(game->singlePlayerNumber, false); }
void UpgradeWindow::update() { /* int selectionNumber = -1; // currently selected weapon... // solve current weapon ui-number... int curWeap = -1; int selnum = unit->getSelectedWeapon(); Weapon *wtype = NULL; if (selnum != -1) wtype = unit->getWeaponType(selnum); if (wtype != NULL) { curWeap = PlayerWeaponry::getUINumberByWeaponId(unit, wtype->getPartTypeId()); } selectionNumber = curWeap; // set selection marker to that weapon... assert(selectionNumber >= -1 && selectionNumber < UPGRADEWINDOW_MAX_WEAPONS); if (selectionNumber == -1) { if (selection != NULL) { delete selection; selection = NULL; } } else { if (weaponButtons[selectionNumber] != NULL) { if (selection == NULL) { selection = ogui->CreateSimpleImageButton(win, 0, 0, UPGRADE_WEAPON_SELECTION_SIZE_X, UPGRADE_WEAPON_SELECTION_SIZE_Y, NULL, NULL, NULL); selection->SetReactMask(0); selection->SetDisabled(true); selection->SetDisabledImage(selectionImage); } int x = 0; int y = 0; getWeaponPosition(selectionNumber, &x, &y); selection->Move(x, y); } } */ // upgrades available... for (int i = 0; i < UPGRADEWINDOW_MAX_WEAPONS; i++) { for (int j = 0; j < UPGRADEWINDOW_MAX_UPGRADES_PER_WEAPON; j++) { if (upgradeButtons[i][j] != NULL) { int upgid = (int)upgradeButtons[i][j]->GetArgument(); int tmp = this->upgradesPendingCost; //if (game->upgradeManager->canUpgrade(unit, upgid, &tmp)) //{ upgradeButtons[i][j]->SetDisabled(false); //} else { // upgradeButtons[i][j]->SetDisabled(true); //} bool alreadyUpgraded = false; if (game->upgradeManager->isUpgraded(unit, upgid)) { alreadyUpgraded = true; } bool pending = false; LinkedListIterator iter(this->upgradesPending); while (iter.iterateAvailable()) { // WARNING: void * -> int cast int other = (int)iter.iterateNext(); if (other == upgid) { pending = true; break; } } if (pending || alreadyUpgraded) { upgradeSelections[i][j]->SetDisabledImage(upgradeSelectedImage); } else { upgradeSelections[i][j]->SetDisabledImage(NULL); } } } } if (this->upgradesPendingCost > 0) { undoButton->SetDisabled(false); const char *label = getLocaleGuiString("gui_upgrades_undo"); undoButton->SetText(label); } else { undoButton->SetDisabled(true); undoButton->SetText(""); } if (highlightOn && highlightedWeaponSlot != -1 && highlightedUpgradeSlot == -1) { weaponHighlight->SetDisabledImage(weaponHighlightImage); int wx = 0; int wy = 0; getWeaponPosition(highlightedWeaponSlot, &wx, &wy); int woffx = getLocaleGuiInt("gui_upgrades_slot_weapon_offset_x", 0); wx += woffx; weaponHighlight->Move(wx,wy); } else { weaponHighlight->SetDisabledImage(NULL); } if (highlightedWeaponSlot != -1) { if (highlightOn && highlightedUpgradeSlot != -1) { upgradeHighlight->SetDisabledImage(upgradeHighlightImage); int wx = 0; int wy = 0; getWeaponPosition(highlightedWeaponSlot, &wx, &wy); int woffx = getLocaleGuiInt("gui_upgrades_slot_weapon_offset_x", 0); wx += woffx; int x = wx; int y = wy; int firstpadx = getLocaleGuiInt("gui_upgrades_slot_upgrade_start_offset_x", 0); int padx = getLocaleGuiInt("gui_upgrades_slot_upgrade_offset_x", 0); x += firstpadx + highlightedUpgradeSlot * padx; upgradeHighlight->Move(x,y); } else { upgradeHighlight->SetDisabledImage(NULL); } } else { upgradeHighlight->SetDisabledImage(NULL); } // info image & text if (highlightedWeaponSlot != -1) { infoIcon->SetDisabledImage(weaponInfoImages[highlightedWeaponSlot]); if (highlightedUpgradeSlot != -1) { fb_assert(highlightedUpgradeId != -1); int upgid = highlightedUpgradeId; UpgradeType *upgType = game->upgradeManager->getUpgradeTypeById(upgid); const char *upgScript = upgType->getScript(); char buf[128]; strcpy(buf, "upgrade_desc_"); strcat(buf, upgScript); infoText->setText(getLocaleGuiString(buf)); } else { char buf[128]; strcpy(buf, "upgrade_weapon_desc_weapon_"); strcat(buf, int2str(highlightedWeaponSlot)); infoText->setText(getLocaleGuiString(buf)); } } { int tmp = game->upgradeManager->getUpgradePartsAmount(this->unit) - this->upgradesPendingCost; upgradePartsText->SetText(int2str(tmp)); } }
//---------------------------------------------------------------------------------------------- void StarCraftTechTree::GetRequirements(int p_typeOrResearchId, vector<ResearchType>& p_researches, map<EntityClassType, unsigned>& p_buildings) { TName ident; TID id; UpgradeType bwapiUpgrade; TechType bwapiTech; BWAPI::UnitType bwapiUnitType; BWAPI::UnitType bwapiSourceType; BWAPI::UnitType bwapiRequiredType; BWAPI::UnitType bwapiRequiredUnit; TechType bwapiRequiredTech; EntityClassType requiredEntity; ResearchType requiredResearch; if (BELONG(ResearchType, p_typeOrResearchId)) { // Is Tech if ((int)p_typeOrResearchId >= ((int)(RESEARCH_START + TechIdOffset))) { /*id = g_Database.TechMapping.GetBySecond((ResearchType)p_typeOrResearchId); ident = g_Database.TechIdentMapping.GetByFirst(id); bwapiTech = TechType::getType(ident); bwapiSourceType = bwapiTech.whatResearches(); requiredEntity = g_Database.EntityMapping.GetByFirst(bwapiSourceType.getID()); p_buildings.push_back(requiredEntity);*/ } // Is Upgrade else { id = g_Database.UpgradeMapping.GetBySecond((ResearchType)p_typeOrResearchId); ident = g_Database.UpgradeIdentMapping.GetByFirst(id); bwapiUpgrade = UpgradeType::getType(ident); /*bwapiSourceType = bwapiUpgrade.whatUpgrades(); requiredEntity = g_Database.EntityMapping.GetByFirst(bwapiSourceType.getID()); p_buildings.push_back(requiredEntity);*/ bwapiRequiredType = bwapiUpgrade.whatsRequired(); if (bwapiRequiredType.getID() != UnitTypes::None.getID()) { requiredEntity = g_Database.EntityMapping.GetByFirst(bwapiRequiredType.getID()); p_buildings[requiredEntity] = 1; } } } else if(BELONG(EntityClassType, p_typeOrResearchId)) { id = g_Database.EntityMapping.GetBySecond((EntityClassType)p_typeOrResearchId); ident = g_Database.EntityIdentMapping.GetByFirst(id); bwapiUnitType = UnitType::getType(ident); /*bwapiSourceType = bwapiUnitType.whatBuilds().first; requiredEntity = g_Database.EntityMapping.GetByFirst(bwapiSourceType.getID()); p_buildings.push_back(requiredEntity);*/ bwapiRequiredTech = bwapiUnitType.requiredTech(); if (bwapiRequiredTech.getID() != TechTypes::None.getID()) { requiredResearch = g_Database.TechMapping.GetByFirst(bwapiRequiredTech.getID()); p_researches.push_back(requiredResearch); } const map<BWAPI::UnitType, int> &bwapiUnits = bwapiUnitType.requiredUnits(); for (map<BWAPI::UnitType, int>::const_iterator itr = bwapiUnits.begin(); itr != bwapiUnits.end(); ++itr) { bwapiRequiredUnit = itr->first; requiredEntity = g_Database.EntityMapping.GetByFirst(bwapiRequiredUnit.getID()); p_buildings[requiredEntity] = itr->second;; } } }
namespace UpgradeTypes { const UpgradeType Terran_Infantry_Armor(0); const UpgradeType Terran_Vehicle_Plating(1); const UpgradeType Terran_Ship_Plating(2); const UpgradeType Zerg_Carapace(3); const UpgradeType Zerg_Flyer_Carapace(4); const UpgradeType Protoss_Armor(5); const UpgradeType Protoss_Plating(6); const UpgradeType Terran_Infantry_Weapons(7); const UpgradeType Terran_Vehicle_Weapons(8); const UpgradeType Terran_Ship_Weapons(9); const UpgradeType Zerg_Melee_Attacks(10); const UpgradeType Zerg_Missile_Attacks(11); const UpgradeType Zerg_Flyer_Attacks(12); const UpgradeType Protoss_Ground_Weapons(13); const UpgradeType Protoss_Air_Weapons(14); const UpgradeType Protoss_Plasma_Shields(15); const UpgradeType U_238_Shells(16); const UpgradeType Ion_Thrusters(17); const UpgradeType Titan_Reactor(19); const UpgradeType Ocular_Implants(20); const UpgradeType Moebius_Reactor(21); const UpgradeType Apollo_Reactor(22); const UpgradeType Colossus_Reactor(23); const UpgradeType Ventral_Sacs(24); const UpgradeType Antennae(25); const UpgradeType Pneumatized_Carapace(26); const UpgradeType Metabolic_Boost(27); const UpgradeType Adrenal_Glands(28); const UpgradeType Muscular_Augments(29); const UpgradeType Grooved_Spines(30); const UpgradeType Gamete_Meiosis(31); const UpgradeType Metasynaptic_Node(32); const UpgradeType Singularity_Charge(33); const UpgradeType Leg_Enhancements(34); const UpgradeType Scarab_Damage(35); const UpgradeType Reaver_Capacity(36); const UpgradeType Gravitic_Drive(37); const UpgradeType Sensor_Array(38); const UpgradeType Gravitic_Boosters(39); const UpgradeType Khaydarin_Amulet(40); const UpgradeType Apial_Sensors(41); const UpgradeType Gravitic_Thrusters(42); const UpgradeType Carrier_Capacity(43); const UpgradeType Khaydarin_Core(44); const UpgradeType Argus_Jewel(47); const UpgradeType Argus_Talisman(49); const UpgradeType Caduceus_Reactor(51); const UpgradeType Chitinous_Plating(52); const UpgradeType Anabolic_Synthesis(53); const UpgradeType Charon_Booster(54); const UpgradeType None(61); const UpgradeType Unknown(62); void init() { upgradeTypeData[Terran_Infantry_Armor.getID()].set("Terran Infantry Armor", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Terran_Engineering_Bay), Races::Terran, &(UnitTypes::None), 3); upgradeTypeData[Terran_Vehicle_Plating.getID()].set("Terran Vehicle Plating", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Terran_Armory), Races::Terran, &(UnitTypes::None), 3); upgradeTypeData[Terran_Ship_Plating.getID()].set("Terran Ship Plating", 150, 75, 150, 75, 4000, 480, &(UnitTypes::Terran_Armory), Races::Terran, &(UnitTypes::None), 3); upgradeTypeData[Zerg_Carapace.getID()].set("Zerg Carapace", 150, 75, 150, 75, 4000, 480, &(UnitTypes::Zerg_Evolution_Chamber), Races::Zerg, &(UnitTypes::None), 3); upgradeTypeData[Zerg_Flyer_Carapace.getID()].set("Zerg Flyer Carapace", 150, 75, 150, 75, 4000, 480, &(UnitTypes::Zerg_Spire), Races::Zerg, &(UnitTypes::None), 3); upgradeTypeData[Protoss_Armor.getID()].set("Protoss Armor", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Protoss_Forge), Races::Protoss, &(UnitTypes::None), 3); upgradeTypeData[Protoss_Plating.getID()].set("Protoss Plating", 150, 75, 150, 75, 4000, 480, &(UnitTypes::Protoss_Cybernetics_Core), Races::Protoss, &(UnitTypes::None), 3); upgradeTypeData[Terran_Infantry_Weapons.getID()].set("Terran Infantry Weapons", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Terran_Engineering_Bay), Races::Terran, &(UnitTypes::None), 3); upgradeTypeData[Terran_Vehicle_Weapons.getID()].set("Terran Vehicle Weapons", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Terran_Armory), Races::Terran, &(UnitTypes::None), 3); upgradeTypeData[Terran_Ship_Weapons.getID()].set("Terran Ship Weapons", 100, 50, 100, 50, 4000, 480, &(UnitTypes::Terran_Armory), Races::Terran, &(UnitTypes::None), 3); upgradeTypeData[Zerg_Melee_Attacks.getID()].set("Zerg Melee Attacks", 100, 50, 100, 50, 4000, 480, &(UnitTypes::Zerg_Evolution_Chamber), Races::Zerg, &(UnitTypes::None), 3); upgradeTypeData[Zerg_Missile_Attacks.getID()].set("Zerg Missile Attacks", 100, 50, 100, 50, 4000, 480, &(UnitTypes::Zerg_Evolution_Chamber), Races::Zerg, &(UnitTypes::None), 3); upgradeTypeData[Zerg_Flyer_Attacks.getID()].set("Zerg Flyer Attacks", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Zerg_Spire), Races::Zerg, &(UnitTypes::None), 3); upgradeTypeData[Protoss_Ground_Weapons.getID()].set("Protoss Ground Weapons", 100, 50, 100, 50, 4000, 480, &(UnitTypes::Protoss_Forge), Races::Protoss, &(UnitTypes::None), 3); upgradeTypeData[Protoss_Air_Weapons.getID()].set("Protoss Air Weapons", 100, 75, 100, 75, 4000, 480, &(UnitTypes::Protoss_Cybernetics_Core), Races::Protoss, &(UnitTypes::None), 3); upgradeTypeData[Protoss_Plasma_Shields.getID()].set("Protoss Plasma Shields", 200, 100, 200, 100, 4000, 480, &(UnitTypes::Protoss_Forge), Races::Protoss, &(UnitTypes::None), 3); upgradeTypeData[U_238_Shells.getID()].set("U-238 Shells", 150, 0, 150, 0, 1500, 0, &(UnitTypes::Terran_Academy), Races::Terran, &(UnitTypes::Terran_Marine), 1); upgradeTypeData[Ion_Thrusters.getID()].set("Ion Thrusters", 100, 0, 100, 0, 1500, 0, &(UnitTypes::Terran_Machine_Shop), Races::Terran, &(UnitTypes::Terran_Vulture), 1); upgradeTypeData[Titan_Reactor.getID()].set("Titan Reactor", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Terran_Science_Facility), Races::Terran, &(UnitTypes::Terran_Science_Vessel), 1); upgradeTypeData[Ocular_Implants.getID()].set("Ocular Implants", 100, 0, 100, 0, 2500, 0, &(UnitTypes::Terran_Covert_Ops), Races::Terran, &(UnitTypes::Terran_Ghost), 1); upgradeTypeData[Moebius_Reactor.getID()].set("Moebius Reactor", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Terran_Covert_Ops), Races::Terran, &(UnitTypes::Terran_Ghost), 1); upgradeTypeData[Apollo_Reactor.getID()].set("Apollo Reactor", 200, 0, 200, 0, 2500, 0, &(UnitTypes::Terran_Control_Tower), Races::Terran, &(UnitTypes::Terran_Wraith), 1); upgradeTypeData[Colossus_Reactor.getID()].set("Colossus Reactor", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Terran_Physics_Lab), Races::Terran, &(UnitTypes::Terran_Battlecruiser), 1); upgradeTypeData[Ventral_Sacs.getID()].set("Ventral Sacs", 200, 0, 200, 0, 2400, 0, &(UnitTypes::Zerg_Lair), Races::Zerg, &(UnitTypes::Zerg_Overlord), 1); upgradeTypeData[Antennae.getID()].set("Antennae", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Zerg_Lair), Races::Zerg, &(UnitTypes::Zerg_Overlord), 1); upgradeTypeData[Pneumatized_Carapace.getID()].set("Pneumatized Carapace", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Zerg_Lair), Races::Zerg, &(UnitTypes::Zerg_Overlord), 1); upgradeTypeData[Metabolic_Boost.getID()].set("Metabolic Boost", 100, 0, 100, 0, 1500, 0, &(UnitTypes::Zerg_Spawning_Pool), Races::Zerg, &(UnitTypes::Zerg_Zergling), 1); upgradeTypeData[Adrenal_Glands.getID()].set("Adrenal Glands", 200, 0, 200, 0, 1500, 0, &(UnitTypes::Zerg_Spawning_Pool), Races::Zerg, &(UnitTypes::Zerg_Zergling), 1); upgradeTypeData[Muscular_Augments.getID()].set("Muscular Augments", 150, 0, 150, 0, 1500, 0, &(UnitTypes::Zerg_Hydralisk_Den), Races::Zerg, &(UnitTypes::Zerg_Hydralisk), 1); upgradeTypeData[Grooved_Spines.getID()].set("Grooved Spines", 150, 0, 150, 0, 1500, 0, &(UnitTypes::Zerg_Hydralisk_Den), Races::Zerg, &(UnitTypes::Zerg_Hydralisk), 1); upgradeTypeData[Gamete_Meiosis.getID()].set("Gamete Meiosis", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Zerg_Queens_Nest), Races::Zerg, &(UnitTypes::Zerg_Queen), 1); upgradeTypeData[Metasynaptic_Node.getID()].set("Metasynaptic Node", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Zerg_Defiler_Mound), Races::Zerg, &(UnitTypes::Zerg_Defiler), 1); upgradeTypeData[Singularity_Charge.getID()].set("Singularity Charge", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Protoss_Cybernetics_Core), Races::Protoss, &(UnitTypes::Protoss_Dragoon), 1); upgradeTypeData[Leg_Enhancements.getID()].set("Leg Enhancements", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Protoss_Citadel_of_Adun), Races::Protoss, &(UnitTypes::Protoss_Zealot), 1); upgradeTypeData[Scarab_Damage.getID()].set("Scarab Damage", 200, 0, 200, 0, 2500, 0, &(UnitTypes::Protoss_Robotics_Support_Bay), Races::Protoss, &(UnitTypes::Protoss_Scarab), 1); upgradeTypeData[Reaver_Capacity.getID()].set("Reaver Capacity", 200, 0, 200, 0, 2500, 0, &(UnitTypes::Protoss_Robotics_Support_Bay), Races::Protoss, &(UnitTypes::Protoss_Reaver), 1); upgradeTypeData[Gravitic_Drive.getID()].set("Gravitic Drive", 200, 0, 200, 0, 2500, 0, &(UnitTypes::Protoss_Robotics_Support_Bay), Races::Protoss, &(UnitTypes::Protoss_Shuttle), 1); upgradeTypeData[Sensor_Array.getID()].set("Sensor Array", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Protoss_Observatory), Races::Protoss, &(UnitTypes::Protoss_Observer), 1); upgradeTypeData[Gravitic_Boosters.getID()].set("Gravitic Boosters", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Protoss_Observatory), Races::Protoss, &(UnitTypes::Protoss_Observer), 1); upgradeTypeData[Khaydarin_Amulet.getID()].set("Khaydarin Amulet", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Protoss_Templar_Archives), Races::Protoss, &(UnitTypes::Protoss_High_Templar), 1); upgradeTypeData[Apial_Sensors.getID()].set("Apial Sensors", 100, 0, 100, 0, 2500, 0, &(UnitTypes::Protoss_Templar_Archives), Races::Protoss, &(UnitTypes::Protoss_Scout), 1); upgradeTypeData[Gravitic_Thrusters.getID()].set("Gravitic Thrusters", 200, 0, 200, 0, 2500, 0, &(UnitTypes::Protoss_Fleet_Beacon), Races::Protoss, &(UnitTypes::Protoss_Scout), 1); upgradeTypeData[Carrier_Capacity.getID()].set("Carrier Capacity", 100, 0, 100, 0, 1500, 0, &(UnitTypes::Protoss_Fleet_Beacon), Races::Protoss, &(UnitTypes::Protoss_Carrier), 1); upgradeTypeData[Khaydarin_Core.getID()].set("Khaydarin Core", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Protoss_Arbiter_Tribunal), Races::Protoss, &(UnitTypes::Protoss_Arbiter), 1); upgradeTypeData[Argus_Jewel.getID()].set("Argus Jewel", 100, 0, 100, 0, 2500, 0, &(UnitTypes::Protoss_Fleet_Beacon), Races::Protoss, &(UnitTypes::Protoss_Corsair), 1); upgradeTypeData[Argus_Talisman.getID()].set("Argus Talisman", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Protoss_Templar_Archives), Races::Protoss, &(UnitTypes::Protoss_Dark_Archon), 1); upgradeTypeData[Caduceus_Reactor.getID()].set("Caduceus Reactor", 150, 0, 150, 0, 2500, 0, &(UnitTypes::Terran_Academy), Races::Terran, &(UnitTypes::Terran_Medic), 1); upgradeTypeData[Chitinous_Plating.getID()].set("Chitinous Plating", 150, 0, 150, 0, 2000, 0, &(UnitTypes::Zerg_Ultralisk_Cavern), Races::Zerg, &(UnitTypes::Zerg_Ultralisk), 1); upgradeTypeData[Anabolic_Synthesis.getID()].set("Anabolic Synthesis", 200, 0, 200, 0, 2000, 0, &(UnitTypes::Zerg_Ultralisk_Cavern), Races::Zerg, &(UnitTypes::Zerg_Ultralisk), 1); upgradeTypeData[Charon_Booster.getID()].set("Charon Booster", 100, 0, 100, 0, 2000, 0, &(UnitTypes::Terran_Machine_Shop), Races::Terran, &(UnitTypes::Terran_Goliath), 1); upgradeTypeData[None.getID()].set("None", 0, 0, 0, 0, 0, 0, &(UnitTypes::None), Races::None, &(UnitTypes::None), 0); upgradeTypeData[Unknown.getID()].set("Unknown", 0, 0, 0, 0, 0, 0, &(UnitTypes::None), Races::Unknown, &(UnitTypes::None), 0); upgradeTypeData[Terran_Infantry_Armor.getID()].whatUses.insert(&(UnitTypes::Terran_Firebat)); upgradeTypeData[Terran_Infantry_Armor.getID()].whatUses.insert(&(UnitTypes::Terran_Ghost)); upgradeTypeData[Terran_Infantry_Armor.getID()].whatUses.insert(&(UnitTypes::Terran_Marine)); upgradeTypeData[Terran_Infantry_Armor.getID()].whatUses.insert(&(UnitTypes::Terran_Medic)); upgradeTypeData[Terran_Infantry_Armor.getID()].whatUses.insert(&(UnitTypes::Terran_SCV)); upgradeTypeData[Terran_Vehicle_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Goliath)); upgradeTypeData[Terran_Vehicle_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Siege_Tank_Siege_Mode)); upgradeTypeData[Terran_Vehicle_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Siege_Tank_Tank_Mode)); upgradeTypeData[Terran_Vehicle_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Vulture)); upgradeTypeData[Terran_Ship_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Battlecruiser)); upgradeTypeData[Terran_Ship_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Dropship)); upgradeTypeData[Terran_Ship_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Science_Vessel)); upgradeTypeData[Terran_Ship_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Valkyrie)); upgradeTypeData[Terran_Ship_Plating.getID()].whatUses.insert(&(UnitTypes::Terran_Wraith)); upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Broodling)); upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Defiler)); upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Drone)); upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Hydralisk)); upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Infested_Terran)); upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Larva)); upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Lurker)); upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Ultralisk)); upgradeTypeData[Zerg_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Zergling)); upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Devourer)); upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Guardian)); upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Mutalisk)); upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Overlord)); upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Queen)); upgradeTypeData[Zerg_Flyer_Carapace.getID()].whatUses.insert(&(UnitTypes::Zerg_Scourge)); upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Archon)); upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Dark_Archon)); upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Dark_Templar)); upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Dragoon)); upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_High_Templar)); upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Probe)); upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Reaver)); upgradeTypeData[Protoss_Armor.getID()].whatUses.insert(&(UnitTypes::Protoss_Zealot)); upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Arbiter)); upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Carrier)); upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Corsair)); upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Interceptor)); upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Observer)); upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Scout)); upgradeTypeData[Protoss_Plating.getID()].whatUses.insert(&(UnitTypes::Protoss_Shuttle)); upgradeTypeData[Terran_Infantry_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Firebat)); upgradeTypeData[Terran_Infantry_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Ghost)); upgradeTypeData[Terran_Infantry_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Marine)); upgradeTypeData[Terran_Vehicle_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Goliath)); upgradeTypeData[Terran_Vehicle_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Siege_Tank_Siege_Mode)); upgradeTypeData[Terran_Vehicle_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Siege_Tank_Tank_Mode)); upgradeTypeData[Terran_Vehicle_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Vulture)); upgradeTypeData[Terran_Ship_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Battlecruiser)); upgradeTypeData[Terran_Ship_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Valkyrie)); upgradeTypeData[Terran_Ship_Weapons.getID()].whatUses.insert(&(UnitTypes::Terran_Wraith)); upgradeTypeData[Zerg_Melee_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Broodling)); upgradeTypeData[Zerg_Melee_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Ultralisk)); upgradeTypeData[Zerg_Melee_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Zergling)); upgradeTypeData[Zerg_Missile_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Hydralisk)); upgradeTypeData[Zerg_Missile_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Lurker)); upgradeTypeData[Zerg_Flyer_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Devourer)); upgradeTypeData[Zerg_Flyer_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Guardian)); upgradeTypeData[Zerg_Flyer_Attacks.getID()].whatUses.insert(&(UnitTypes::Zerg_Mutalisk)); upgradeTypeData[Protoss_Ground_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Dark_Templar)); upgradeTypeData[Protoss_Ground_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Dragoon)); upgradeTypeData[Protoss_Ground_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Zealot)); upgradeTypeData[Protoss_Air_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Arbiter)); upgradeTypeData[Protoss_Air_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Corsair)); upgradeTypeData[Protoss_Air_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Interceptor)); upgradeTypeData[Protoss_Air_Weapons.getID()].whatUses.insert(&(UnitTypes::Protoss_Scout)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Arbiter)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Arbiter_Tribunal)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Archon)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Assimilator)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Carrier)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Citadel_of_Adun)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Corsair)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Cybernetics_Core)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Dark_Archon)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Dark_Templar)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Dragoon)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Fleet_Beacon)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Forge)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Gateway)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_High_Templar)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Interceptor)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Nexus)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Observatory)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Observer)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Photon_Cannon)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Probe)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Pylon)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Reaver)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Robotics_Facility)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Robotics_Support_Bay)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Scarab)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Scout)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Shield_Battery)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Shuttle)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Stargate)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Templar_Archives)); upgradeTypeData[Protoss_Plasma_Shields.getID()].whatUses.insert(&(UnitTypes::Protoss_Zealot)); upgradeTypeSet.insert(Terran_Infantry_Armor); upgradeTypeSet.insert(Terran_Vehicle_Plating); upgradeTypeSet.insert(Terran_Ship_Plating); upgradeTypeSet.insert(Zerg_Carapace); upgradeTypeSet.insert(Zerg_Flyer_Carapace); upgradeTypeSet.insert(Protoss_Armor); upgradeTypeSet.insert(Protoss_Plating); upgradeTypeSet.insert(Terran_Infantry_Weapons); upgradeTypeSet.insert(Terran_Vehicle_Weapons); upgradeTypeSet.insert(Terran_Ship_Weapons); upgradeTypeSet.insert(Zerg_Melee_Attacks); upgradeTypeSet.insert(Zerg_Missile_Attacks); upgradeTypeSet.insert(Zerg_Flyer_Attacks); upgradeTypeSet.insert(Protoss_Ground_Weapons); upgradeTypeSet.insert(Protoss_Air_Weapons); upgradeTypeSet.insert(Protoss_Plasma_Shields); upgradeTypeSet.insert(U_238_Shells); upgradeTypeSet.insert(Ion_Thrusters); upgradeTypeSet.insert(Titan_Reactor); upgradeTypeSet.insert(Ocular_Implants); upgradeTypeSet.insert(Moebius_Reactor); upgradeTypeSet.insert(Apollo_Reactor); upgradeTypeSet.insert(Colossus_Reactor); upgradeTypeSet.insert(Ventral_Sacs); upgradeTypeSet.insert(Antennae); upgradeTypeSet.insert(Pneumatized_Carapace); upgradeTypeSet.insert(Metabolic_Boost); upgradeTypeSet.insert(Adrenal_Glands); upgradeTypeSet.insert(Muscular_Augments); upgradeTypeSet.insert(Grooved_Spines); upgradeTypeSet.insert(Gamete_Meiosis); upgradeTypeSet.insert(Metasynaptic_Node); upgradeTypeSet.insert(Singularity_Charge); upgradeTypeSet.insert(Leg_Enhancements); upgradeTypeSet.insert(Scarab_Damage); upgradeTypeSet.insert(Reaver_Capacity); upgradeTypeSet.insert(Gravitic_Drive); upgradeTypeSet.insert(Sensor_Array); upgradeTypeSet.insert(Gravitic_Boosters); upgradeTypeSet.insert(Khaydarin_Amulet); upgradeTypeSet.insert(Apial_Sensors); upgradeTypeSet.insert(Gravitic_Thrusters); upgradeTypeSet.insert(Carrier_Capacity); upgradeTypeSet.insert(Khaydarin_Core); upgradeTypeSet.insert(Argus_Jewel); upgradeTypeSet.insert(Argus_Talisman); upgradeTypeSet.insert(Caduceus_Reactor); upgradeTypeSet.insert(Chitinous_Plating); upgradeTypeSet.insert(Anabolic_Synthesis); upgradeTypeSet.insert(Charon_Booster); upgradeTypeSet.insert(None); upgradeTypeSet.insert(Unknown); for(std::set<UpgradeType>::iterator i = upgradeTypeSet.begin(); i != upgradeTypeSet.end(); i++) { upgradeTypeMap.insert(std::make_pair((*i).getName(), *i)); } initializingUpgradeType = false; } }
/*** * Check if we can research the given UpgradeType w.r.t. tech structures * !!! Ask TheBuilder to build them otherwise. !!! */ bool Producer::checkCanUpgrade(UpgradeType t) { return checkHaveTech(t.whatsRequired()) && checkHaveTech(t.whatUpgrades()); }
//------------------------------------------------ AVAILABILITY -------------------------------------------- int PlayerImpl::getMaxUpgradeLevel(UpgradeType upgrade) const { return upgrade.isValid() ? self->maxUpgradeLevel[upgrade] : 0; }
//--------------------------------------------- IS UPGRADING ----------------------------------------------- bool PlayerImpl::isUpgrading(UpgradeType upgrade) const { return upgrade.isValid() ? self->isUpgrading[upgrade] : false; }