[Server] Support face-down cards in all public zones

This commit is contained in:
RickyRister 2026-01-20 03:21:43 -08:00
parent 485e4d56aa
commit 28c39d7132

View file

@ -198,6 +198,30 @@ shouldDestroyOnMove(const Server_Card *card, const Server_CardZone *startZone, c
return true; return true;
} }
/**
* @brief Determines whether the moved card should be face-down
*/
static bool
shouldBeFaceDown(const MoveCardStruct &cardStruct, const Server_CardZone *startZone, const Server_CardZone *targetZone)
{
// being face-down only makes sense for public zones
if (targetZone->getType() != ServerInfo_Zone::PublicZone) {
return false;
}
// face-down property in proto takes precedence
if (cardStruct.cardToMove->has_face_down()) {
return cardStruct.cardToMove->face_down();
}
// default to keep face-down the same if zone didn't change
if (startZone == targetZone) {
return cardStruct.card->getFaceDown();
}
return false;
}
Response::ResponseCode Server_AbstractPlayer::moveCard(GameEventStorage &ges, Response::ResponseCode Server_AbstractPlayer::moveCard(GameEventStorage &ges,
Server_CardZone *startzone, Server_CardZone *startzone,
const QList<const CardToMove *> &_cards, const QList<const CardToMove *> &_cards,
@ -257,10 +281,7 @@ Response::ResponseCode Server_AbstractPlayer::moveCard(GameEventStorage &ges,
for (auto cardStruct : cardsToMove) { for (auto cardStruct : cardsToMove) {
Server_Card *card = cardStruct.card; Server_Card *card = cardStruct.card;
const CardToMove *thisCardProperties = cardStruct.cardToMove;
int originalPosition = cardStruct.position; int originalPosition = cardStruct.position;
bool faceDown = targetzone->hasCoords() &&
(thisCardProperties->has_face_down() ? thisCardProperties->face_down() : card->getFaceDown());
bool sourceBeingLookedAt; bool sourceBeingLookedAt;
int position = startzone->removeCard(card, sourceBeingLookedAt); int position = startzone->removeCard(card, sourceBeingLookedAt);
@ -315,6 +336,8 @@ Response::ResponseCode Server_AbstractPlayer::moveCard(GameEventStorage &ges,
++xIndex; ++xIndex;
int newX = isReversed ? targetzone->getCards().size() - xCoord + xIndex : xCoord + xIndex; int newX = isReversed ? targetzone->getCards().size() - xCoord + xIndex : xCoord + xIndex;
bool faceDown = shouldBeFaceDown(cardStruct, startzone, targetzone);
if (targetzone->hasCoords()) { if (targetzone->hasCoords()) {
newX = targetzone->getFreeGridColumn(newX, yCoord, card->getName(), faceDown); newX = targetzone->getFreeGridColumn(newX, yCoord, card->getName(), faceDown);
} else { } else {