Michael 2 роки тому
батько
коміт
876dc28e48
2 змінених файлів з 50 додано та 31 видалено
  1. 42 24
      client/lobby/OptionsTab.cpp
  2. 8 7
      client/lobby/OptionsTab.h

+ 42 - 24
client/lobby/OptionsTab.cpp

@@ -415,26 +415,46 @@ void OptionsTab::CPlayerOptionTooltipBox::genBonusWindow()
 	textBonusDescription = std::make_shared<CTextBox>(getDescription(), Rect(10, 100, pos.w - 20, 70), 0, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE);
 }
 
-OptionsTab::SelectionWindow::SelectionWindow(PlayerSettings settings, PlayerInfo playerInfo)
+OptionsTab::SelectionWindow::SelectionWindow(int color)
 	: CWindowObject(BORDERED)
 {
 	addUsedEvents(LCLICK | SHOW_POPUP);
 
 	OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
 
+	color = color;
+
 	pos = Rect(0, 0, (ELEMENTS_PER_LINE * 2 + 5) * 58, 700);
 
 	backgroundTexture = std::make_shared<CFilledTexture>("DIBOXBCK", pos);
 	updateShadow();
 
 	genContentTitle();
-	genContentCastles(settings, playerInfo);
-	genContentHeroes(settings, playerInfo);
-	genContentBonus(settings, playerInfo);
+	genContentCastles();
+	genContentHeroes();
+	genContentBonus();
 
 	center();
 }
 
+void OptionsTab::SelectionWindow::apply()
+{
+	if(GH.windows().isTopWindow(this))
+	{
+		close();
+	}
+}
+
+void OptionsTab::SelectionWindow::redraw()
+{
+	components.clear();
+
+	genContentTitle();
+	genContentCastles();
+	genContentHeroes();
+	genContentBonus();
+}
+
 void OptionsTab::SelectionWindow::genContentTitle()
 {
 	components.push_back(std::make_shared<CLabel>((ELEMENTS_PER_LINE - 1) * 58, 40, FONT_BIG, ETextAlignment::CENTER, Colors::YELLOW, "Town"));
@@ -442,7 +462,7 @@ void OptionsTab::SelectionWindow::genContentTitle()
 	components.push_back(std::make_shared<CLabel>((ELEMENTS_PER_LINE * 2 + 3) * 58 + 29, 40, FONT_BIG, ETextAlignment::CENTER, Colors::YELLOW, "Bonus"));
 }
 
-void OptionsTab::SelectionWindow::genContentCastles(PlayerSettings settings, PlayerInfo playerInfo)
+void OptionsTab::SelectionWindow::genContentCastles()
 {
 	factions.clear();
 
@@ -451,8 +471,10 @@ void OptionsTab::SelectionWindow::genContentCastles(PlayerSettings settings, Pla
 	CPlayerSettingsHelper helper = CPlayerSettingsHelper(set, SelType::TOWN);
 	components.push_back(std::make_shared<CAnimImage>(helper.getImageName(), helper.getImageIndex(), 0, (ELEMENTS_PER_LINE / 2) * 58 + 34, 32 / 2 + 64));
 
+
+
 	int i = 0;
-	for(auto & elem : playerInfo.allowedFactions)
+	for(auto & elem : SEL->getPlayerInfo(0).allowedFactions)
 	{
 		int x = i % ELEMENTS_PER_LINE + 1;
 		int y = i / ELEMENTS_PER_LINE + 2;
@@ -469,7 +491,7 @@ void OptionsTab::SelectionWindow::genContentCastles(PlayerSettings settings, Pla
 	}
 }
 
-void OptionsTab::SelectionWindow::genContentHeroes(PlayerSettings settings, PlayerInfo playerInfo)
+void OptionsTab::SelectionWindow::genContentHeroes()
 {
 	heroes.clear();
 
@@ -490,7 +512,7 @@ void OptionsTab::SelectionWindow::genContentHeroes(PlayerSettings settings, Play
 	{
 		CHero * type = VLC->heroh->objects[elem];
 
-		if(type->heroClass->faction == settings.castle)
+		if(type->heroClass->faction == SEL->getStartInfo()->playerInfos.find(PlayerColor(color))->second.castle)
 		{
 
 			int x = (i % ELEMENTS_PER_LINE) + ELEMENTS_PER_LINE + 2;
@@ -509,7 +531,7 @@ void OptionsTab::SelectionWindow::genContentHeroes(PlayerSettings settings, Play
 	}
 }
 
-void OptionsTab::SelectionWindow::genContentBonus(PlayerSettings settings, PlayerInfo playerInfo)
+void OptionsTab::SelectionWindow::genContentBonus()
 {
 	PlayerSettings set = PlayerSettings();
 
@@ -527,14 +549,6 @@ void OptionsTab::SelectionWindow::genContentBonus(PlayerSettings settings, Playe
 	}
 }
 
-void OptionsTab::SelectionWindow::apply()
-{
-	if(GH.windows().isTopWindow(this))
-	{
-		close();
-	}
-}
-
 FactionID OptionsTab::SelectionWindow::getElementCastle(const Point & cursorPosition)
 {
 	Point loc = getElement(cursorPosition, 0);
@@ -605,8 +619,13 @@ void OptionsTab::SelectionWindow::clickReleased(const Point & cursorPosition) {
 
 	if(set.castle != -2)
 	{
+		//SEL->getStartInfo()->playerInfos.find(PlayerColor(color))->second.castle = faction;
+
+		CSH->setPlayerOption(LobbyChangePlayerOption::TOWN, 1, PlayerColor(color));
+
+		redraw();
 		//CPlayerSettingsHelper helper = CPlayerSettingsHelper(set, SelType::TOWN);
-		apply();
+		
 	}
 	else if(set.hero != -2)
 	{
@@ -648,10 +667,9 @@ void OptionsTab::SelectionWindow::showPopupWindow(const Point & cursorPosition)
 	}
 }
 
-OptionsTab::SelectedBox::SelectedBox(Point position, PlayerSettings & settings, PlayerInfo & playerInfo, SelType type)
+OptionsTab::SelectedBox::SelectedBox(Point position, PlayerSettings & settings, SelType type)
 	: Scrollable(LCLICK | SHOW_POPUP, position, Orientation::HORIZONTAL)
 	, CPlayerSettingsHelper(settings, type)
-	, playerInfo(playerInfo)
 {
 	OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
 
@@ -682,7 +700,7 @@ void OptionsTab::SelectedBox::showPopupWindow(const Point & cursorPosition)
 
 void OptionsTab::SelectedBox::clickReleased(const Point & cursorPosition)
 {
-	GH.windows().createAndPushWindow<SelectionWindow>(settings, playerInfo);
+	GH.windows().createAndPushWindow<SelectionWindow>(settings.color.getNum());
 }
 
 void OptionsTab::SelectedBox::scrollBy(int distance)
@@ -778,9 +796,9 @@ OptionsTab::PlayerOptionsEntry::PlayerOptionsEntry(const PlayerSettings & S, con
 	else
 		flag = nullptr;
 
-	town = std::make_shared<SelectedBox>(Point(119, 2), *s, *pi, TOWN);
-	hero = std::make_shared<SelectedBox>(Point(195, 2), *s, *pi, HERO);
-	bonus = std::make_shared<SelectedBox>(Point(271, 2), *s, *pi, BONUS);
+	town = std::make_shared<SelectedBox>(Point(119, 2), *s, TOWN);
+	hero = std::make_shared<SelectedBox>(Point(195, 2), *s, HERO);
+	bonus = std::make_shared<SelectedBox>(Point(271, 2), *s, BONUS);
 }
 
 void OptionsTab::onSetPlayerClicked(const PlayerSettings & ps) const

+ 8 - 7
client/lobby/OptionsTab.h

@@ -99,6 +99,8 @@ public:
 	{
 		const int ELEMENTS_PER_LINE = 4;
 
+		ui8 color;
+
 		std::shared_ptr<CFilledTexture> backgroundTexture;
 		std::vector<std::shared_ptr<CIntObject>> components;
 
@@ -106,11 +108,12 @@ public:
 		std::vector<HeroTypeID> heroes;
 
 		void genContentTitle();
-		void genContentCastles(PlayerSettings settings, PlayerInfo playerInfo);
-		void genContentHeroes(PlayerSettings settings, PlayerInfo playerInfo);
-		void genContentBonus(PlayerSettings settings, PlayerInfo playerInfo);
+		void genContentCastles();
+		void genContentHeroes();
+		void genContentBonus();
 
 		void apply();
+		void redraw();
 		FactionID getElementCastle(const Point & cursorPosition);
 		HeroTypeID getElementHero(const Point & cursorPosition);
 		int getElementBonus(const Point & cursorPosition);
@@ -120,18 +123,16 @@ public:
 		void showPopupWindow(const Point & cursorPosition) override;
 
 	public:
-		SelectionWindow(PlayerSettings settings, PlayerInfo playerInfo);
+		SelectionWindow(int color);
 	};
 
 	/// Image with current town/hero/bonus
 	struct SelectedBox : public Scrollable, public CPlayerSettingsHelper
 	{
-		const PlayerInfo & playerInfo;
-
 		std::shared_ptr<CAnimImage> image;
 		std::shared_ptr<CLabel> subtitle;
 
-		SelectedBox(Point position, PlayerSettings & settings, PlayerInfo & playerInfo, SelType type);
+		SelectedBox(Point position, PlayerSettings & settings, SelType type);
 		void showPopupWindow(const Point & cursorPosition) override;
 		void clickReleased(const Point & cursorPosition) override;
 		void scrollBy(int distance) override;