diff --git a/common/server_cardzone.cpp b/common/server_cardzone.cpp index a69cdc71..6cc7714c 100644 --- a/common/server_cardzone.cpp +++ b/common/server_cardzone.cpp @@ -39,8 +39,6 @@ Server_CardZone::~Server_CardZone() void Server_CardZone::shuffle() { - QMutexLocker locker(&player->getGame()->gameMutex); - QList temp; for (int i = cards.size(); i; i--) temp.append(cards.takeAt(rng->getNumber(0, i - 1))); @@ -49,8 +47,6 @@ void Server_CardZone::shuffle() int Server_CardZone::removeCard(Server_Card *card) { - QMutexLocker locker(&player->getGame()->gameMutex); - int index = cards.indexOf(card); cards.removeAt(index); card->setZone(0); @@ -60,8 +56,6 @@ int Server_CardZone::removeCard(Server_Card *card) Server_Card *Server_CardZone::getCard(int id, int *position) { - QMutexLocker locker(&player->getGame()->gameMutex); - if (type != ServerInfo_Zone::HiddenZone) { QListIterator CardIterator(cards); int i = 0; @@ -87,8 +81,6 @@ Server_Card *Server_CardZone::getCard(int id, int *position) int Server_CardZone::getFreeGridColumn(int x, int y, const QString &cardName) const { - QMutexLocker locker(&player->getGame()->gameMutex); - QMap coordMap; for (int i = 0; i < cards.size(); ++i) if (cards[i]->getY() == y) @@ -135,8 +127,6 @@ bool Server_CardZone::isColumnStacked(int x, int y) const if (!has_coords) return false; - QMutexLocker locker(&player->getGame()->gameMutex); - QMap coordMap; for (int i = 0; i < cards.size(); ++i) if (cards[i]->getY() == y) @@ -150,8 +140,6 @@ bool Server_CardZone::isColumnEmpty(int x, int y) const if (!has_coords) return true; - QMutexLocker locker(&player->getGame()->gameMutex); - QMap coordMap; for (int i = 0; i < cards.size(); ++i) if (cards[i]->getY() == y) @@ -162,13 +150,11 @@ bool Server_CardZone::isColumnEmpty(int x, int y) const void Server_CardZone::moveCard(GameEventStorage &ges, QMap &coordMap, Server_Card *card, int x, int y) { - QMutexLocker locker(&player->getGame()->gameMutex); - coordMap.remove(card->getY() * 10000 + card->getX()); CardToMove *cardToMove = new CardToMove; cardToMove->set_card_id(card->getId()); - player->moveCard(ges, this, QList() << cardToMove, this, x, y, card->getFaceDown(), false); + player->moveCard(ges, this, QList() << cardToMove, this, x, y, false, false); delete cardToMove; coordMap.insert(y * 10000 + x, card); @@ -176,8 +162,6 @@ void Server_CardZone::moveCard(GameEventStorage &ges, QMap & void Server_CardZone::fixFreeSpaces(GameEventStorage &ges) { - QMutexLocker locker(&player->getGame()->gameMutex); - QMap coordMap; QSet placesToLook; for (int i = 0; i < cards.size(); ++i) { @@ -207,8 +191,6 @@ void Server_CardZone::fixFreeSpaces(GameEventStorage &ges) void Server_CardZone::insertCard(Server_Card *card, int x, int y) { - QMutexLocker locker(&player->getGame()->gameMutex); - if (hasCoords()) { card->setCoords(x, y); cards.append(card); @@ -221,8 +203,6 @@ void Server_CardZone::insertCard(Server_Card *card, int x, int y) void Server_CardZone::clear() { - QMutexLocker locker(&player->getGame()->gameMutex); - for (int i = 0; i < cards.size(); i++) delete cards.at(i); cards.clear(); diff --git a/common/server_player.cpp b/common/server_player.cpp index e61f4902..c21c720c 100644 --- a/common/server_player.cpp +++ b/common/server_player.cpp @@ -410,6 +410,8 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges, Server_Car for (int cardIndex = 0; cardIndex < cardsToMove.size(); ++cardIndex) { Server_Card *card = cardsToMove[cardIndex].first; const CardToMove *thisCardProperties = cardProperties.value(card); + bool faceDown = thisCardProperties->has_face_down() ? thisCardProperties->face_down() : card->getFaceDown(); + int originalPosition = cardsToMove[cardIndex].second; int position = startzone->removeCard(card); if (startzone->getName() == "hand") { @@ -478,8 +480,8 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges, Server_Car bool targetBeingLookedAt = (targetzone->getType() != ServerInfo_Zone::HiddenZone) || (targetzone->getCardsBeingLookedAt() > newX) || (targetzone->getCardsBeingLookedAt() == -1); bool sourceBeingLookedAt = (startzone->getType() != ServerInfo_Zone::HiddenZone) || (startzone->getCardsBeingLookedAt() > position) || (startzone->getCardsBeingLookedAt() == -1); - bool targetHiddenToPlayer = thisCardProperties->face_down() || !targetBeingLookedAt; - bool targetHiddenToOthers = thisCardProperties->face_down() || (targetzone->getType() != ServerInfo_Zone::PublicZone); + bool targetHiddenToPlayer = faceDown || !targetBeingLookedAt; + bool targetHiddenToOthers = faceDown || (targetzone->getType() != ServerInfo_Zone::PublicZone); bool sourceHiddenToPlayer = card->getFaceDown() || !sourceBeingLookedAt; bool sourceHiddenToOthers = card->getFaceDown() || (startzone->getType() != ServerInfo_Zone::PublicZone); @@ -490,9 +492,9 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges, Server_Car publicCardName = card->getName(); int oldCardId = card->getId(); - if (thisCardProperties->face_down() || (targetzone->getPlayer() != startzone->getPlayer())) + if (faceDown || (targetzone->getPlayer() != startzone->getPlayer())) card->setId(targetzone->getPlayer()->newCardId()); - card->setFaceDown(thisCardProperties->face_down()); + card->setFaceDown(faceDown); // The player does not get to see which card he moved if it moves between two parts of hidden zones which // are not being looked at. @@ -514,7 +516,7 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges, Server_Car eventOthers.set_target_zone(targetzone->getName().toStdString()); eventOthers.set_x(newX); eventOthers.set_y(y); - eventOthers.set_face_down(thisCardProperties->face_down()); + eventOthers.set_face_down(faceDown); Event_MoveCard eventPrivate(eventOthers); eventPrivate.set_card_id(privateOldCardId); @@ -546,7 +548,7 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges, Server_Car if (thisCardProperties->tapped()) setCardAttrHelper(ges, targetzone->getName(), card->getId(), AttrTapped, "1"); QString ptString = QString::fromStdString(thisCardProperties->pt()); - if (!ptString.isEmpty() && !thisCardProperties->face_down()) + if (!ptString.isEmpty() && !faceDown) setCardAttrHelper(ges, targetzone->getName(), card->getId(), AttrPT, ptString); } }