fixed another faceDown bug
This commit is contained in:
parent
af8e357487
commit
80967b59e3
2 changed files with 9 additions and 27 deletions
|
@ -39,8 +39,6 @@ Server_CardZone::~Server_CardZone()
|
||||||
|
|
||||||
void Server_CardZone::shuffle()
|
void Server_CardZone::shuffle()
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&player->getGame()->gameMutex);
|
|
||||||
|
|
||||||
QList<Server_Card *> temp;
|
QList<Server_Card *> temp;
|
||||||
for (int i = cards.size(); i; i--)
|
for (int i = cards.size(); i; i--)
|
||||||
temp.append(cards.takeAt(rng->getNumber(0, i - 1)));
|
temp.append(cards.takeAt(rng->getNumber(0, i - 1)));
|
||||||
|
@ -49,8 +47,6 @@ void Server_CardZone::shuffle()
|
||||||
|
|
||||||
int Server_CardZone::removeCard(Server_Card *card)
|
int Server_CardZone::removeCard(Server_Card *card)
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&player->getGame()->gameMutex);
|
|
||||||
|
|
||||||
int index = cards.indexOf(card);
|
int index = cards.indexOf(card);
|
||||||
cards.removeAt(index);
|
cards.removeAt(index);
|
||||||
card->setZone(0);
|
card->setZone(0);
|
||||||
|
@ -60,8 +56,6 @@ int Server_CardZone::removeCard(Server_Card *card)
|
||||||
|
|
||||||
Server_Card *Server_CardZone::getCard(int id, int *position)
|
Server_Card *Server_CardZone::getCard(int id, int *position)
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&player->getGame()->gameMutex);
|
|
||||||
|
|
||||||
if (type != ServerInfo_Zone::HiddenZone) {
|
if (type != ServerInfo_Zone::HiddenZone) {
|
||||||
QListIterator<Server_Card *> CardIterator(cards);
|
QListIterator<Server_Card *> CardIterator(cards);
|
||||||
int i = 0;
|
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
|
int Server_CardZone::getFreeGridColumn(int x, int y, const QString &cardName) const
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&player->getGame()->gameMutex);
|
|
||||||
|
|
||||||
QMap<int, Server_Card *> coordMap;
|
QMap<int, Server_Card *> coordMap;
|
||||||
for (int i = 0; i < cards.size(); ++i)
|
for (int i = 0; i < cards.size(); ++i)
|
||||||
if (cards[i]->getY() == y)
|
if (cards[i]->getY() == y)
|
||||||
|
@ -135,8 +127,6 @@ bool Server_CardZone::isColumnStacked(int x, int y) const
|
||||||
if (!has_coords)
|
if (!has_coords)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
QMutexLocker locker(&player->getGame()->gameMutex);
|
|
||||||
|
|
||||||
QMap<int, Server_Card *> coordMap;
|
QMap<int, Server_Card *> coordMap;
|
||||||
for (int i = 0; i < cards.size(); ++i)
|
for (int i = 0; i < cards.size(); ++i)
|
||||||
if (cards[i]->getY() == y)
|
if (cards[i]->getY() == y)
|
||||||
|
@ -150,8 +140,6 @@ bool Server_CardZone::isColumnEmpty(int x, int y) const
|
||||||
if (!has_coords)
|
if (!has_coords)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
QMutexLocker locker(&player->getGame()->gameMutex);
|
|
||||||
|
|
||||||
QMap<int, Server_Card *> coordMap;
|
QMap<int, Server_Card *> coordMap;
|
||||||
for (int i = 0; i < cards.size(); ++i)
|
for (int i = 0; i < cards.size(); ++i)
|
||||||
if (cards[i]->getY() == y)
|
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<int, Server_Card *> &coordMap, Server_Card *card, int x, int y)
|
void Server_CardZone::moveCard(GameEventStorage &ges, QMap<int, Server_Card *> &coordMap, Server_Card *card, int x, int y)
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&player->getGame()->gameMutex);
|
|
||||||
|
|
||||||
coordMap.remove(card->getY() * 10000 + card->getX());
|
coordMap.remove(card->getY() * 10000 + card->getX());
|
||||||
|
|
||||||
CardToMove *cardToMove = new CardToMove;
|
CardToMove *cardToMove = new CardToMove;
|
||||||
cardToMove->set_card_id(card->getId());
|
cardToMove->set_card_id(card->getId());
|
||||||
player->moveCard(ges, this, QList<const CardToMove *>() << cardToMove, this, x, y, card->getFaceDown(), false);
|
player->moveCard(ges, this, QList<const CardToMove *>() << cardToMove, this, x, y, false, false);
|
||||||
delete cardToMove;
|
delete cardToMove;
|
||||||
|
|
||||||
coordMap.insert(y * 10000 + x, card);
|
coordMap.insert(y * 10000 + x, card);
|
||||||
|
@ -176,8 +162,6 @@ void Server_CardZone::moveCard(GameEventStorage &ges, QMap<int, Server_Card *> &
|
||||||
|
|
||||||
void Server_CardZone::fixFreeSpaces(GameEventStorage &ges)
|
void Server_CardZone::fixFreeSpaces(GameEventStorage &ges)
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&player->getGame()->gameMutex);
|
|
||||||
|
|
||||||
QMap<int, Server_Card *> coordMap;
|
QMap<int, Server_Card *> coordMap;
|
||||||
QSet<int> placesToLook;
|
QSet<int> placesToLook;
|
||||||
for (int i = 0; i < cards.size(); ++i) {
|
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)
|
void Server_CardZone::insertCard(Server_Card *card, int x, int y)
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&player->getGame()->gameMutex);
|
|
||||||
|
|
||||||
if (hasCoords()) {
|
if (hasCoords()) {
|
||||||
card->setCoords(x, y);
|
card->setCoords(x, y);
|
||||||
cards.append(card);
|
cards.append(card);
|
||||||
|
@ -221,8 +203,6 @@ void Server_CardZone::insertCard(Server_Card *card, int x, int y)
|
||||||
|
|
||||||
void Server_CardZone::clear()
|
void Server_CardZone::clear()
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&player->getGame()->gameMutex);
|
|
||||||
|
|
||||||
for (int i = 0; i < cards.size(); i++)
|
for (int i = 0; i < cards.size(); i++)
|
||||||
delete cards.at(i);
|
delete cards.at(i);
|
||||||
cards.clear();
|
cards.clear();
|
||||||
|
|
|
@ -410,6 +410,8 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges, Server_Car
|
||||||
for (int cardIndex = 0; cardIndex < cardsToMove.size(); ++cardIndex) {
|
for (int cardIndex = 0; cardIndex < cardsToMove.size(); ++cardIndex) {
|
||||||
Server_Card *card = cardsToMove[cardIndex].first;
|
Server_Card *card = cardsToMove[cardIndex].first;
|
||||||
const CardToMove *thisCardProperties = cardProperties.value(card);
|
const CardToMove *thisCardProperties = cardProperties.value(card);
|
||||||
|
bool faceDown = thisCardProperties->has_face_down() ? thisCardProperties->face_down() : card->getFaceDown();
|
||||||
|
|
||||||
int originalPosition = cardsToMove[cardIndex].second;
|
int originalPosition = cardsToMove[cardIndex].second;
|
||||||
int position = startzone->removeCard(card);
|
int position = startzone->removeCard(card);
|
||||||
if (startzone->getName() == "hand") {
|
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 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 sourceBeingLookedAt = (startzone->getType() != ServerInfo_Zone::HiddenZone) || (startzone->getCardsBeingLookedAt() > position) || (startzone->getCardsBeingLookedAt() == -1);
|
||||||
|
|
||||||
bool targetHiddenToPlayer = thisCardProperties->face_down() || !targetBeingLookedAt;
|
bool targetHiddenToPlayer = faceDown || !targetBeingLookedAt;
|
||||||
bool targetHiddenToOthers = thisCardProperties->face_down() || (targetzone->getType() != ServerInfo_Zone::PublicZone);
|
bool targetHiddenToOthers = faceDown || (targetzone->getType() != ServerInfo_Zone::PublicZone);
|
||||||
bool sourceHiddenToPlayer = card->getFaceDown() || !sourceBeingLookedAt;
|
bool sourceHiddenToPlayer = card->getFaceDown() || !sourceBeingLookedAt;
|
||||||
bool sourceHiddenToOthers = card->getFaceDown() || (startzone->getType() != ServerInfo_Zone::PublicZone);
|
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();
|
publicCardName = card->getName();
|
||||||
|
|
||||||
int oldCardId = card->getId();
|
int oldCardId = card->getId();
|
||||||
if (thisCardProperties->face_down() || (targetzone->getPlayer() != startzone->getPlayer()))
|
if (faceDown || (targetzone->getPlayer() != startzone->getPlayer()))
|
||||||
card->setId(targetzone->getPlayer()->newCardId());
|
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
|
// 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.
|
// 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_target_zone(targetzone->getName().toStdString());
|
||||||
eventOthers.set_x(newX);
|
eventOthers.set_x(newX);
|
||||||
eventOthers.set_y(y);
|
eventOthers.set_y(y);
|
||||||
eventOthers.set_face_down(thisCardProperties->face_down());
|
eventOthers.set_face_down(faceDown);
|
||||||
|
|
||||||
Event_MoveCard eventPrivate(eventOthers);
|
Event_MoveCard eventPrivate(eventOthers);
|
||||||
eventPrivate.set_card_id(privateOldCardId);
|
eventPrivate.set_card_id(privateOldCardId);
|
||||||
|
@ -546,7 +548,7 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges, Server_Car
|
||||||
if (thisCardProperties->tapped())
|
if (thisCardProperties->tapped())
|
||||||
setCardAttrHelper(ges, targetzone->getName(), card->getId(), AttrTapped, "1");
|
setCardAttrHelper(ges, targetzone->getName(), card->getId(), AttrTapped, "1");
|
||||||
QString ptString = QString::fromStdString(thisCardProperties->pt());
|
QString ptString = QString::fromStdString(thisCardProperties->pt());
|
||||||
if (!ptString.isEmpty() && !thisCardProperties->face_down())
|
if (!ptString.isEmpty() && !faceDown)
|
||||||
setCardAttrHelper(ges, targetzone->getName(), card->getId(), AttrPT, ptString);
|
setCardAttrHelper(ges, targetzone->getName(), card->getId(), AttrPT, ptString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue