Example #1
0
void Game::StartGame()
{
	bg.setTexture(graphics.game_boardTexture());
	Dice LeftDice(graphics.GetDiceTexture(), 810.0f, 50.0f);
	Dice RightDice(graphics.GetDiceTexture(), 865.0f, 50.0f);

	CreatePlayersAndPawns();
	fields = CreateList_ptrField(graphics);
	CreateGameTextButtons();
	bool ShownCard = false;
	bool CloseCard = false;
	bool LetDrawStatusCard = false;
	bool ShowInformation = false;

	pair<ButtonSprite, ButtonText> rollDiceButton = make_pair(ButtonSprite(graphics.GetButtonEnable(), graphics.GetButtonDisable(), 936.0f, 55.0f), ButtonText(L"Rzuć kostkami!", graphics.GetMenuFont(), 17, 953.0f, 63.0f, false));
	pair<ButtonSprite, ButtonText> nextPlayerButton = make_pair(ButtonSprite(graphics.GetButtonEnable(), graphics.GetButtonDisable(), 936.0f, 540.0f), ButtonText(L"Następny gracz!", graphics.GetMenuFont(), 17, 945.0f, 548.0f, false));
	pair<ButtonSprite, ButtonText> buyButton = make_pair(ButtonSprite(graphics.GetButtonEnableShort(), graphics.GetButtonDisableShort(), 225.0f, 515.0f), ButtonText(L"KUP", graphics.GetMenuFont(), 20, 268.0f, 522.0f, false));
	pair<ButtonSprite, ButtonText> bidButton = make_pair(ButtonSprite(graphics.GetButtonEnableShort(), graphics.GetButtonDisableShort(), 355.0f, 515.0f, false), ButtonText(L"LICYTUJ", graphics.GetMenuFont(), 20, 381.0f, 522.0f, false)); // Brak opcji
	pair<ButtonSprite, ButtonText> buildButton = make_pair(ButtonSprite(graphics.GetButtonEnableShort(), graphics.GetButtonDisableShort(), 225.0f, 515.0f, false), ButtonText(L"ZBUDUJ", graphics.GetCardFont(), 19, 252.0f, 522.0f, false));
	pair<ButtonSprite, ButtonText> depositButton = make_pair(ButtonSprite(graphics.GetButtonEnableShort(), graphics.GetButtonDisableShort(), 355.0f, 515.0f, false), ButtonText(L"HIPOTEKA", graphics.GetCardFont(), 19, 375.0f, 522.0f, false));
	pair<ButtonSprite, ButtonText> tradeButton = make_pair(ButtonSprite(graphics.GetButtonEnable(), graphics.GetButtonDisable(), 720.0f, 540.0f, false), ButtonText(L"Oferta Wymiany", graphics.GetMenuFont(), 17, 730.0f, 548.0f, false));
	pair<ButtonSprite, ButtonText> bankrupt = make_pair(ButtonSprite(graphics.GetBankcruptTexture(), 300, 160), ButtonText(L"ZBANKRUTOWAŁEŚ!", graphics.GetMenuFont(), 40, 200));
	bankrupt.second.GetText().setStyle(Text::Bold);

	ButtonSprite* hoverImgButton = nullptr;
	MiniCard* hoverStatusCard = nullptr;
	Field* ShowBigCard = nullptr;

	Player* activePlayer = nullptr;
	Field* FindedCard = nullptr;
	
	while (state == GameState::START_GAME)
	{
		Vector2f mouse(Mouse::getPosition(window));
		activePlayer = CheckActivePlayer();
		hoverStatusCard = CheckHoverStatusCard();

		if (activePlayer->IsWinner())
			state = GameState::GAME_OVER;

		ActivateTradeButton(tradeButton.first, activePlayer);

		if (activePlayer->IsActiveField())
		{
			FindedCard = FindField(fields, activePlayer->GetPawn().GetArea()); //activePlayer->GetPawn().GetArea()
			if (!FindedCard)
				activePlayer->SetActiveField(false);
		}
		else
		{
			FindedCard = nullptr;
			activePlayer->SetActiveField(false);
		}

		hoverImgButton = CheckHoverSpriteInGame(
			activePlayer, FindedCard, ShowBigCard, 
			rollDiceButton.first, nextPlayerButton.first,
			bidButton.first, buyButton.first,
			buildButton.first, depositButton.first, tradeButton.first
			);

		ActivateRollAndSkipPlayerButtons(activePlayer, rollDiceButton.first, nextPlayerButton.first);

		Event event;
		while (window.pollEvent(event))
		{
			if (event.type == Event::KeyPressed && event.key.code == Keyboard::Escape)
			{
				state = GameState::END;
				break;
			}
			if (event.type == Event::MouseButtonReleased && event.key.code == Mouse::Left && activePlayer && activePlayer->IsBankrupt())
			{
				if (hoverImgButton != &bankrupt.first)
				{
					ShowInformation = false;
					Player* target = activePlayer;
					GoToNextPlayer(activePlayer, textButtons[1]);
					activePlayer = nullptr;
					vector<Player> tmpPlayers;
					for (auto& finded : player)
					{
						if (&finded != target)
							tmpPlayers.emplace_back(move(finded));
					}
					player.clear();
					player = move(tmpPlayers);
					
				}
			}

			if (event.type == Event::MouseButtonReleased && event.key.code == Mouse::Left && activePlayer && !activePlayer->IsBankrupt())
			{
				//if (hoverImgButton == &tradeButton.first && tradeButton.first.IsActive())
					//CreateTrade(activePlayer, activePlayer+1);

				if (hoverStatusCard && !activePlayer->IsActiveField())
				{
					ShowBigCard = FindField(fields, hoverStatusCard->GetMiniCardArea());
					if (hoverStatusCard->GetMiniCardOwner() == activePlayer)
						depositButton.first.activeButton(true);
					else
						depositButton.first.activeButton(false);
				}
				else if (ShowBigCard && !(ShowBigCard->ShowGraphics().begin()->GetSprite().getGlobalBounds().contains(mouse)))
					ShowBigCard = nullptr;

				if (hoverImgButton == &buyButton.first && ShownCard && buyButton.first.IsActive())
				{
					FindedCard->Action(*activePlayer);
					ShownCard = false;
					activePlayer->SetActiveField(false);
				}

				if (activePlayer->GetJailCard().getGlobalBounds().contains(mouse) && activePlayer->ExistJailCard() && activePlayer->IsBlocked() && activePlayer->IsActiveMovement() && !activePlayer->IsActiveField())
				{
					activePlayer->SetJailCard(false);
					activePlayer->SetBlock(0);
					activePlayer->SetActiveMovement(false);
				}

				if (ShownCard && !bidButton.first.IsActive() && !buyButton.first.IsActive() && FindedCard) // Kiedy karty nie da się kupić, bo jest kogoś :P
					FindedCard->DoWork(hoverImgButton, activePlayer, CloseCard, ShownCard, nextPlayerButton.first);

				if (hoverImgButton == &rollDiceButton.first && !activePlayer->ThrewDoublet() && rollDiceButton.first.IsActive())
				{
					ShownCard = RollDiceBeforeThrowingDoublet(activePlayer, LeftDice, RightDice, textButtons[1], ShownCard);
					hoverImgButton = nullptr;
				}

				if (hoverImgButton == &rollDiceButton.first && activePlayer->ThrewDoublet() && (!activePlayer->IsActiveField() || !ShownCard))
					ShownCard = RollDiceAfterThrowingDoublet(activePlayer, LeftDice, RightDice, textButtons[1], ShownCard);

				if (hoverImgButton == &nextPlayerButton.first && hoverImgButton->IsActive())
				{
					tradeButton.first.activeButton(false);
					GoToNextPlayer(activePlayer, textButtons[1]);
				}
			}
		}
		window.clear();
		window.draw(bg);
		for (auto& thisPlayer : player)
		{
			window.draw(thisPlayer.GetPawn().GetSprite());
			window.draw(thisPlayer);
		}
		window.draw(LeftDice.GetSprite());
		window.draw(RightDice.GetSprite());
		DrawButtonOnWindow(window, nextPlayerButton);
		DrawButtonOnWindow(window, rollDiceButton);
		for (auto& button : textButtons)
			window.draw(button.GetText());
		if (FindedCard != nullptr && activePlayer->IsActiveField() && !CloseCard)
			DrawFindedCardAndSetAlerts(FindedCard, activePlayer, textButtons[1].GetText(), buyButton, bidButton, ShownCard);
		else if (CloseCard)
		{
			CloseCard = false;
			activePlayer->SetActiveField(false);
		}
		if (activePlayer && activePlayer->ExistJailCard())
		{
			window.draw(activePlayer->GetJailCard());
			window.draw(activePlayer->GetJailCardTitle());
		}
		if (ShowBigCard)
		{
			window.draw(*ShowBigCard);
			DrawButtonOnWindow(window, buildButton);
			DrawButtonOnWindow(window, depositButton);
		}
		DrawButtonOnWindow(window, tradeButton);
		if (activePlayer && activePlayer->IsBankrupt())
		{
			DrawButtonOnWindow(window, bankrupt);
			ShowInformation = true;
		}
		window.display();
	}
	textButtons.clear();
	imgButtons.clear();
}