コード例 #1
0
ファイル: ResourceManager.cpp プロジェクト: rarosu/FnulAI
bool ResourceManager::hasResources(UpgradeType type)
{
	int nMinerals = type.mineralPrice();
	int nGas = type.gasPrice();

	return hasResources(nMinerals, nGas);
}
コード例 #2
0
ファイル: UnitShared.cpp プロジェクト: oenayet/bwapi
 //--------------------------------------------- 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);
 }
コード例 #3
0
//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;
}
コード例 #4
0
//----------------------------------------------------------------------------------------------
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;
}
コード例 #5
0
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;
}
コード例 #6
0
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;
}
コード例 #7
0
ファイル: UpgradeWindow.cpp プロジェクト: DeejStar/Jack-Claw
	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);
	}
コード例 #8
0
ファイル: UpgradeWindow.cpp プロジェクト: DeejStar/Jack-Claw
	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));
		}
	}
コード例 #9
0
//----------------------------------------------------------------------------------------------
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;;
        }
    }
}
コード例 #10
0
ファイル: UpgradeType.cpp プロジェクト: tinco/bwapi
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;
}
}
コード例 #11
0
ファイル: Producer.cpp プロジェクト: AIUR-group/BroodwarBotQ
/*** 
 * 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());
}
コード例 #12
0
ファイル: PlayerShared.cpp プロジェクト: oenayet/bwapi
 //------------------------------------------------ AVAILABILITY --------------------------------------------
 int PlayerImpl::getMaxUpgradeLevel(UpgradeType upgrade) const
 {
   return upgrade.isValid() ? self->maxUpgradeLevel[upgrade] : 0;
 }
コード例 #13
0
ファイル: PlayerShared.cpp プロジェクト: oenayet/bwapi
 //--------------------------------------------- IS UPGRADING -----------------------------------------------
 bool PlayerImpl::isUpgrading(UpgradeType upgrade) const
 {
   return upgrade.isValid() ? self->isUpgrading[upgrade] : false;
 }