Example #1
0
//	Public functions
Variant WidgetSaver::serialize(WidgetVirtual* w, std::map<std::string, WidgetVirtual*>& association, int& unknownIndex)
{
	Variant rootVariant;   rootVariant.createMap();

	//	write type
	switch (w->type)
	{
		case WidgetVirtual::VIRTUAL:		rootVariant.insert("type", Variant("VIRTUAL"));		break;
		case WidgetVirtual::BOARD:			rootVariant.insert("type", Variant("BOARD"));		break;
		case WidgetVirtual::IMAGE:			rootVariant.insert("type", Variant("IMAGE"));		break;
		case WidgetVirtual::LABEL:			rootVariant.insert("type", Variant("LABEL"));		break;
		case WidgetVirtual::CONSOLE:		rootVariant.insert("type", Variant("CONSOLE"));		break;
		case WidgetVirtual::RADIO_BUTTON:	rootVariant.insert("type", Variant("RADIO_BUTTON"));break;
		default:							rootVariant.insert("type", Variant("UNKNOWN"));		break;
	}

	//	write configuration
	rootVariant.insert("config", Variant((int)w->configuration));

	//	write sizes
	if (w->sizes[WidgetVirtual::DEFAULT] == w->sizes[WidgetVirtual::HOVER] && w->sizes[WidgetVirtual::DEFAULT] == w->sizes[WidgetVirtual::ACTIVE] && w->sizes[WidgetVirtual::DEFAULT] == w->sizes[WidgetVirtual::CURRENT])
		rootVariant.insert("sizeAll", ToolBox::getFromVec2(w->sizes[WidgetVirtual::DEFAULT]));
	else
	{
		rootVariant.insert("sizeDefault", ToolBox::getFromVec2(w->sizes[WidgetVirtual::DEFAULT]));
		rootVariant.insert("sizeHover", ToolBox::getFromVec2(w->sizes[WidgetVirtual::HOVER]));
		rootVariant.insert("sizeActive", ToolBox::getFromVec2(w->sizes[WidgetVirtual::ACTIVE]));
		rootVariant.insert("sizeCurrent", ToolBox::getFromVec2(w->sizes[WidgetVirtual::CURRENT]));
	}

	//	write positions
	if (w->positions[WidgetVirtual::DEFAULT] == w->positions[WidgetVirtual::HOVER] && w->positions[WidgetVirtual::DEFAULT] == w->positions[WidgetVirtual::ACTIVE] && w->positions[WidgetVirtual::DEFAULT] == w->positions[WidgetVirtual::CURRENT])
		rootVariant.insert("positionAll", ToolBox::getFromVec3(w->positions[WidgetVirtual::DEFAULT]));
	else
	{
		rootVariant.insert("positionDefault", ToolBox::getFromVec3(w->positions[WidgetVirtual::DEFAULT]));
		rootVariant.insert("positionHover", ToolBox::getFromVec3(w->positions[WidgetVirtual::HOVER]));
		rootVariant.insert("positionActive", ToolBox::getFromVec3(w->positions[WidgetVirtual::ACTIVE]));
		rootVariant.insert("positionCurrent", ToolBox::getFromVec3(w->positions[WidgetVirtual::CURRENT]));
	}

	//	write colors
	if (w->colors[WidgetVirtual::DEFAULT] == w->colors[WidgetVirtual::HOVER] && w->colors[WidgetVirtual::DEFAULT] == w->colors[WidgetVirtual::ACTIVE] && w->colors[WidgetVirtual::DEFAULT] == w->colors[WidgetVirtual::CURRENT])
		rootVariant.insert("colorAll", ToolBox::getFromVec4(w->colors[WidgetVirtual::DEFAULT]));
	else
	{
		rootVariant.insert("colorDefault", ToolBox::getFromVec4(w->colors[WidgetVirtual::DEFAULT]));
		rootVariant.insert("colorHover", ToolBox::getFromVec4(w->colors[WidgetVirtual::HOVER]));
		rootVariant.insert("colorActive", ToolBox::getFromVec4(w->colors[WidgetVirtual::ACTIVE]));
		rootVariant.insert("colorCurrent", ToolBox::getFromVec4(w->colors[WidgetVirtual::CURRENT]));
	}

	//	write shader and texture name
	if (w->shader && w->shader->name != "defaultWidget")
		rootVariant.insert("shader", Variant(w->shader->name));
	if (w->texture)
		rootVariant.insert("texture", Variant(w->texture->name));

	//	derivate type
	switch (w->type)
	{
		case WidgetVirtual::BOARD:
			serializeBoard(static_cast<WidgetBoard*>(w), rootVariant);
			break;
		case WidgetVirtual::IMAGE:
			serializeImage(static_cast<WidgetImage*>(w), rootVariant);
			break;
		case WidgetVirtual::LABEL:
			serializeLabel(static_cast<WidgetLabel*>(w), rootVariant);
			break;
		case WidgetVirtual::CONSOLE:
			serializeConsole(static_cast<WidgetConsole*>(w), rootVariant);
			break;
		case WidgetVirtual::RADIO_BUTTON:
			serializeRadioButton(static_cast<WidgetRadioButton*>(w), rootVariant);
			break;
		default: break;
	}

	//	children
	if (!w->children.empty())
	{
		rootVariant.insert("children", Variant::MapType());
		for (unsigned int i = 0; i < w->children.size(); ++i)
		{
			std::string name = "unknown_" + std::to_string(++unknownIndex);
			for (std::map<std::string, WidgetVirtual*>::iterator it = association.begin(); it != association.end(); ++it)
			{
				if (w->children[i] == it->second)
				{
					name = it->first;
					break;
				}
			}
			Variant child = serialize(w->children[i], association, unknownIndex);
			rootVariant.getMap()["children"].insert(name, child);
		}
	}

	//	end
	return rootVariant;
}
Example #2
0
void GameStateOnline::update(float dt){
    //upgrade pionka do krolowki
    if (!gameOver) {
        for(auto & piece : board.pieces){
            if( ( ( piece.position.y == 7 && piece.color == PieceColor::WHITE ) || ( piece.position.y == 0 && piece.color == PieceColor::BLACK ) ) && !piece.king ){
                piece.king = true;
                if(piece.color == PieceColor::WHITE){
                    piece.sprite.setTexture(this->game->textureManager.getReference(opponentKingString));
                    piece.type = KING_WHITE;
                }
                if(piece.color == PieceColor::BLACK){
                    piece.sprite.setTexture(this->game->textureManager.getReference(localPlayerKingString));
                    piece.type = KING_BLACK;
                }

                pieceUpgradeSound.play();
                board.updateBoardState();
            }
        }
    }
    //sprawdzanie konca gry
    int counterMy = 0, counterOpposite = 0;
    if (!gameOver) {
        for(auto & piece : board.pieces){
            if(piece.color == PieceColor::WHITE)
                counterOpposite++;
            if(piece.color == PieceColor::BLACK)
                counterMy++;
        }
    }

    if (isEndOfLocalPlayerTurn) {
        ConnectionWithServer::BoardRepresentation board_representation = serializeBoard();
        bool if_winner = (counterOpposite == 0);

        ConnectionWithServer::GameSituation situation;
        situation.board = board_representation;
        situation.ifWinner = if_winner;
        situation.movesSinceLastCapture = movesSinceLastCapture;

        connection->sendSituationAfterTurn(situation);
        if (connection->isError()) {
            gameOver = true;
            text.setString("Connection error");
        }
        else {
            currentPlayer = -1;
        }

        isEndOfLocalPlayerTurn = false;
    }

    if (currentPlayer == -1 && gameOver == false) {
        if (delta == 0.f) {
            connection->refresh();
            if (connection->isError()) {
                gameOver = true;
                if (connection->getErrorCode() == ConnectionWithServer::ErrorCode::OPPONENT_DISCONNECTED)
                    text.setString("Opponent disconnected");
                else
                    text.setString("Connection error");
            }
            if (connection->isReady()) {
                ConnectionWithServer::GameSituation situation = connection->getSituationAfterOpponentTurn();
                ConnectionWithServer::BoardRepresentation& boardRepresentation = situation.board;
                movesSinceLastCapture = situation.movesSinceLastCapture;

                updateBoard(boardRepresentation);

                for(auto & piece : this->board.pieces){
                    if(piece.type == PIECE_WHITE) {
                        piece.sprite.setTexture(this->game->textureManager.getReference(opponentPieceString));
                    }
                    else if(piece.type == PIECE_BLACK) {
                        piece.sprite.setTexture(this->game->textureManager.getReference(localPlayerPieceString));
                    }
                    else if(piece.type == KING_WHITE) {
                        piece.sprite.setTexture(this->game->textureManager.getReference(opponentKingString));
                    }
                    else if(piece.type == KING_BLACK) {
                        piece.sprite.setTexture(this->game->textureManager.getReference(localPlayerKingString));
                    }
                }

                board.updateBoardState();
                board.updatePieceSprite();

                currentPlayer = 1;
            }
        }
    }

    delta += dt;
    if (delta >= 1.f) {
        delta = 0.f;
    }

    if(movesSinceLastCapture >= 15 && !gameOver){
        gameOver = true;
        winner.setTexture(game->textureManager.getReference("draw"));
    }

    if(counterOpposite  == 0 && !gameOver) {
        gameOver = true;
        winner.setTexture(game->textureManager.getReference("player wins"));
        game->rick.stop();
        winnerSound.play();
    }
    if(counterMy == 0 && !gameOver) {
        gameOver = true;
        winner.setTexture(game->textureManager.getReference("player lost"));
        game->rick.stop();
    }
}