|
|
@@ -80,7 +80,7 @@ void OptionsTab::recreate()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-size_t OptionsTab::CPlayerSettingsHelper::getImageIndex()
|
|
|
+size_t OptionsTab::CPlayerSettingsHelper::getImageIndex(bool big)
|
|
|
{
|
|
|
enum EBonusSelection //frames of bonuses file
|
|
|
{
|
|
|
@@ -104,7 +104,7 @@ size_t OptionsTab::CPlayerSettingsHelper::getImageIndex()
|
|
|
case PlayerSettings::RANDOM:
|
|
|
return TOWN_RANDOM;
|
|
|
default:
|
|
|
- return (*CGI->townh)[factionIndex]->town->clientInfo.icons[true][false] + 2;
|
|
|
+ return (*CGI->townh)[factionIndex]->town->clientInfo.icons[true][false] + (big ? 0 : 2);
|
|
|
}
|
|
|
case HERO:
|
|
|
switch(settings.hero)
|
|
|
@@ -161,14 +161,14 @@ size_t OptionsTab::CPlayerSettingsHelper::getImageIndex()
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-std::string OptionsTab::CPlayerSettingsHelper::getImageName()
|
|
|
+std::string OptionsTab::CPlayerSettingsHelper::getImageName(bool big)
|
|
|
{
|
|
|
switch(type)
|
|
|
{
|
|
|
case OptionsTab::TOWN:
|
|
|
- return "ITPA";
|
|
|
+ return big ? "ITPt": "ITPA";
|
|
|
case OptionsTab::HERO:
|
|
|
- return "PortraitsSmall";
|
|
|
+ return big ? "PortraitsLarge": "PortraitsSmall";
|
|
|
case OptionsTab::BONUS:
|
|
|
return "SCNRSTAR";
|
|
|
}
|
|
|
@@ -422,7 +422,7 @@ OptionsTab::SelectionWindow::SelectionWindow(PlayerSettings settings, PlayerInfo
|
|
|
|
|
|
OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
|
|
|
|
|
|
- pos = Rect(0, 0, 400, 400);
|
|
|
+ pos = Rect(0, 0, 700, 700);
|
|
|
|
|
|
backgroundTexture = std::make_shared<CFilledTexture>("DIBOXBCK", pos);
|
|
|
updateShadow();
|
|
|
@@ -438,20 +438,20 @@ void OptionsTab::SelectionWindow::genContentCastles(PlayerSettings settings, Pla
|
|
|
PlayerSettings set = PlayerSettings();
|
|
|
set.castle = set.RANDOM;
|
|
|
CPlayerSettingsHelper helper = CPlayerSettingsHelper(set, SelType::TOWN);
|
|
|
- components.push_back(std::make_shared<CAnimImage>(helper.getImageName(), helper.getImageIndex(), 0, 0, 0));
|
|
|
+ components.push_back(std::make_shared<CAnimImage>(helper.getImageName(), helper.getImageIndex(), 0, (ELEMENTS_PER_LINE / 2) * 58 + (58 - 48) / 2, (64 - 32) / 2));
|
|
|
|
|
|
int i = 0;
|
|
|
for(auto & elem : playerInfo.allowedFactions)
|
|
|
{
|
|
|
- int x = i%3;
|
|
|
- int y = i/3+1;
|
|
|
+ int x = i % ELEMENTS_PER_LINE;
|
|
|
+ int y = i / ELEMENTS_PER_LINE + 1;
|
|
|
|
|
|
PlayerSettings set = PlayerSettings();
|
|
|
set.castle = elem;
|
|
|
|
|
|
CPlayerSettingsHelper helper = CPlayerSettingsHelper(set, SelType::TOWN);
|
|
|
|
|
|
- components.push_back(std::make_shared<CAnimImage>(helper.getImageName(), helper.getImageIndex(), 0, x * 48, y * 32));
|
|
|
+ components.push_back(std::make_shared<CAnimImage>(helper.getImageName(true), helper.getImageIndex(true), 0, x * 58, y * 64));
|
|
|
factions.push_back(elem);
|
|
|
|
|
|
i++;
|
|
|
@@ -460,7 +460,29 @@ void OptionsTab::SelectionWindow::genContentCastles(PlayerSettings settings, Pla
|
|
|
|
|
|
void OptionsTab::SelectionWindow::genContentHeroes(PlayerSettings settings, PlayerInfo playerInfo)
|
|
|
{
|
|
|
+ std::vector<bool> allowedHeroesFlag = SEL->getMapInfo()->mapHeader->allowedHeroes;
|
|
|
|
|
|
+ std::set<HeroTypeID> allowedHeroes;
|
|
|
+ for(int i = 0; i < allowedHeroesFlag.size(); i++)
|
|
|
+ if(allowedHeroesFlag[i])
|
|
|
+ allowedHeroes.insert(HeroTypeID(i));
|
|
|
+
|
|
|
+ int i = 0;
|
|
|
+ for(auto & elem : allowedHeroes)
|
|
|
+ {
|
|
|
+ int x = (i % ELEMENTS_PER_LINE) + (ELEMENTS_PER_LINE + 1);
|
|
|
+ int y = i / ELEMENTS_PER_LINE + 1;
|
|
|
+
|
|
|
+ PlayerSettings set = PlayerSettings();
|
|
|
+ set.hero = elem;
|
|
|
+
|
|
|
+ CPlayerSettingsHelper helper = CPlayerSettingsHelper(set, SelType::HERO);
|
|
|
+
|
|
|
+ components.push_back(std::make_shared<CAnimImage>(helper.getImageName(true), helper.getImageIndex(true), 0, x * 58, y * 64));
|
|
|
+ heroes.push_back(elem);
|
|
|
+
|
|
|
+ i++;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void OptionsTab::SelectionWindow::apply()
|
|
|
@@ -477,13 +499,13 @@ FactionID OptionsTab::SelectionWindow::getElementCastle(const Point & cursorPosi
|
|
|
|
|
|
FactionID faction;
|
|
|
faction = PlayerSettings().NONE;
|
|
|
- if (loc.x == 0 && loc.y == 0)
|
|
|
+ if (loc.x == ELEMENTS_PER_LINE / 2 && loc.y == 0)
|
|
|
faction = PlayerSettings().RANDOM;
|
|
|
- else if(loc.y > 0 && loc.x < 3)
|
|
|
+ else if(loc.y > 0 && loc.x < ELEMENTS_PER_LINE)
|
|
|
{
|
|
|
- int index = loc.x + (loc.y - 1) * 3;
|
|
|
+ int index = loc.x + (loc.y - 1) * ELEMENTS_PER_LINE;
|
|
|
if (index < factions.size())
|
|
|
- faction = factions[loc.x + (loc.y - 1) * 3];
|
|
|
+ faction = factions[loc.x + (loc.y - 1) * ELEMENTS_PER_LINE];
|
|
|
}
|
|
|
|
|
|
return faction;
|
|
|
@@ -501,8 +523,8 @@ int OptionsTab::SelectionWindow::getElementBonus(const Point & cursorPosition)
|
|
|
|
|
|
Point OptionsTab::SelectionWindow::getElement(const Point & cursorPosition)
|
|
|
{
|
|
|
- int x = (cursorPosition.x - pos.x) / 48;
|
|
|
- int y = (cursorPosition.y - pos.y) / 32;
|
|
|
+ int x = (cursorPosition.x - pos.x) / 58;
|
|
|
+ int y = (cursorPosition.y - pos.y) / 64;
|
|
|
|
|
|
return Point(x, y);
|
|
|
}
|