Michael 2 years ago
parent
commit
7bfbfeb48f
1 changed files with 28 additions and 61 deletions
  1. 28 61
      client/lobby/OptionsTab.cpp

+ 28 - 61
client/lobby/OptionsTab.cpp

@@ -478,63 +478,14 @@ void OptionsTab::SelectionWindow::apply()
 
 void OptionsTab::SelectionWindow::setSelection()
 {
-	// fraction
-	int selectedFractionPos = -1;
-	for(int i = 0; i<factions.size(); i++)
-		if(factions[i] == selectedFraction)
-			selectedFractionPos = i;
-
-	int initialFractionPos = -1;
-	for(int i = 0; i<factions.size(); i++)
-		if(factions[i] == initialFraction)
-			initialFractionPos = i;
-
-	int deltaFraction = selectedFractionPos - initialFractionPos;
-
-	if(deltaFraction != 0)
-		for(int i = 0; i<abs(deltaFraction); i++)
-			CSH->setPlayerOption(LobbyChangePlayerOption::TOWN, deltaFraction > 0 ? 1 : -1, color);
-	else
-	{
-		if(type == SelType::TOWN)
-		{
-			CSH->setPlayerOption(LobbyChangePlayerOption::TOWN, 1, color);
-			CSH->setPlayerOption(LobbyChangePlayerOption::TOWN, -1, color);
-		}
-	}
-
-	// hero
-	int selectedHeroPos = -1;
-	for(int i = 0; i<heroes.size(); i++)
-		if(heroes[i] == selectedHero)
-			selectedHeroPos = i;
-
-	int initialHeroPos = -1;
-	if(deltaFraction == 0)
-		for(int i = 0; i<heroes.size(); i++)
-			if(heroes[i] == initialHero)
-				initialHeroPos = i;
-
-	int deltaHero = selectedHeroPos - initialHeroPos;
-
-	if(deltaHero != 0)
-		for(int i = 0; i<abs(deltaHero); i++)
-			CSH->setPlayerOption(LobbyChangePlayerOption::HERO, deltaHero > 0 ? 1 : -1, color);
+	if(selectedFraction != initialFraction)
+		CSH->setPlayerOption(LobbyChangePlayerOption::TOWN_ID, selectedFraction, color);
 
-	// bonus
-	int deltaBonus = selectedBonus - initialBonus;
+	if(selectedHero != initialHero)
+		CSH->setPlayerOption(LobbyChangePlayerOption::HERO_ID, selectedHero, color);
 
-	if(initialHero < -1 && ((selectedBonus > 0 && initialBonus < 0) || (selectedBonus < 0 && initialBonus > 0))) // no artifact
-	{
-		if(deltaBonus > 0)
-			deltaBonus--;
-		else if(deltaBonus < 0)
-			deltaBonus++;
-	}
-
-	if(deltaBonus != 0)
-		for(int i = 0; i<abs(deltaBonus); i++)
-			CSH->setPlayerOption(LobbyChangePlayerOption::BONUS, deltaBonus > 0 ? 1 : -1, color);
+	if(selectedBonus != initialBonus)
+		CSH->setPlayerOption(LobbyChangePlayerOption::BONUS_ID, selectedBonus, color);
 }
 
 void OptionsTab::SelectionWindow::recreate()
@@ -763,9 +714,17 @@ void OptionsTab::SelectionWindow::showPopupWindow(const Point & cursorPosition)
 	PlayerSettings set = PlayerSettings();
 	if(type == SelType::TOWN)
 	{
-		if(elem >= factions.size())
-			return;
-		set.castle = factions[elem];
+		if(elem > 0)
+		{
+			elem--;
+			if(elem >= factions.size())
+				return;
+			set.castle = factions[elem];
+		}
+		else
+		{
+			set.castle = -1;
+		}
 		if(set.castle != -2)
 		{
 			CPlayerSettingsHelper helper = CPlayerSettingsHelper(set, SelType::TOWN);
@@ -774,9 +733,17 @@ void OptionsTab::SelectionWindow::showPopupWindow(const Point & cursorPosition)
 	}
 	if(type == SelType::HERO)
 	{
-		if(elem >= heroes.size())
-			return;
-		set.hero = heroes[elem];
+		if(elem > 0)
+		{
+			elem--;
+			if(elem >= heroes.size())
+				return;
+			set.hero = heroes[elem];
+		}
+		else
+		{
+			set.hero = -1;
+		}
 		if(set.hero != -2)
 		{
 			CPlayerSettingsHelper helper = CPlayerSettingsHelper(set, SelType::HERO);