Support viewing the bottom X cards of library (#5410)

* Get cardIds to update properly in bottom view (#5414)

* Get bottom view to update properly when card is inserted into known portion (#5415)

---------

Co-authored-by: RickyRister <42636155+RickyRister@users.noreply.github.com>
This commit is contained in:
Zach H 2025-01-05 21:17:18 -05:00 committed by GitHub
parent 81b85e97df
commit 6078dd092a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 154 additions and 41 deletions

View file

@ -7,4 +7,5 @@ message Command_DumpZone {
optional sint32 player_id = 1 [default = -1];
optional string zone_name = 2;
optional sint32 number_cards = 3;
optional bool is_reversed = 4 [default = false];
}

View file

@ -22,4 +22,5 @@ message Command_MoveCard {
optional string target_zone = 5;
optional sint32 x = 6 [default = -1];
optional sint32 y = 7 [default = -1];
optional bool is_reversed = 8 [default = false];
}

View file

@ -8,4 +8,5 @@ message Event_DumpZone {
optional sint32 zone_owner_id = 1;
optional string zone_name = 2;
optional sint32 number_cards = 3;
optional bool is_reversed = 4 [default = false];
}

View file

@ -424,7 +424,8 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges,
int xCoord,
int yCoord,
bool fixFreeSpaces,
bool undoingDraw)
bool undoingDraw,
bool isReversed)
{
// Disallow controller change to other zones than the table.
if (((targetzone->getType() != ServerInfo_Zone::PublicZone) || !targetzone->hasCoords()) &&
@ -542,7 +543,7 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges,
if (card) {
++xIndex;
int newX = xCoord + xIndex;
int newX = isReversed ? targetzone->getCards().size() - xCoord + xIndex : xCoord + xIndex;
if (targetzone->hasCoords()) {
newX = targetzone->getFreeGridColumn(newX, yCoord, card->getName(), faceDown);
@ -553,7 +554,7 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges,
targetzone->insertCard(card, newX, yCoord);
int targetLookedCards = targetzone->getCardsBeingLookedAt();
bool sourceKnownToPlayer = sourceBeingLookedAt && !card->getFaceDown();
bool sourceKnownToPlayer = isReversed || (sourceBeingLookedAt && !card->getFaceDown());
if (targetzone->getType() == ServerInfo_Zone::HiddenZone && targetLookedCards >= newX) {
if (sourceKnownToPlayer) {
targetLookedCards += 1;
@ -1247,7 +1248,7 @@ Server_Player::cmdMoveCard(const Command_MoveCard &cmd, ResponseContainer & /*rc
cardsToMove.append(&cmd.cards_to_move().card(i));
}
return moveCard(ges, startZone, cardsToMove, targetZone, cmd.x(), cmd.y());
return moveCard(ges, startZone, cardsToMove, targetZone, cmd.x(), cmd.y(), true, false, cmd.is_reversed());
}
Response::ResponseCode
@ -2008,13 +2009,14 @@ Server_Player::cmdDumpZone(const Command_DumpZone &cmd, ResponseContainer &rc, G
zoneInfo->set_card_count(numberCards < cards.size() ? cards.size() : numberCards);
for (int i = 0; (i < cards.size()) && (i < numberCards || numberCards == -1); ++i) {
Server_Card *card = cards[i];
const auto &findId = cmd.is_reversed() ? cards.size() - numberCards + i : i;
Server_Card *card = cards[findId];
QString displayedName = card->getFaceDown() ? QString() : card->getName();
ServerInfo_Card *cardInfo = zoneInfo->add_card_list();
cardInfo->set_provider_id(card->getProviderId().toStdString());
cardInfo->set_name(displayedName.toStdString());
if (zone->getType() == ServerInfo_Zone::HiddenZone) {
cardInfo->set_id(i);
cardInfo->set_id(findId);
} else {
cardInfo->set_id(card->getId());
cardInfo->set_x(card->getX());
@ -2050,6 +2052,7 @@ Server_Player::cmdDumpZone(const Command_DumpZone &cmd, ResponseContainer &rc, G
event.set_zone_owner_id(otherPlayer->getPlayerId());
event.set_zone_name(zone->getName().toStdString());
event.set_number_cards(numberCards);
event.set_is_reversed(cmd.is_reversed());
ges.enqueueGameEvent(event, playerId);
}
rc.setResponseExtension(re);

View file

@ -179,7 +179,8 @@ public:
int xCoord,
int yCoord,
bool fixFreeSpaces = true,
bool undoingDraw = false);
bool undoingDraw = false,
bool isReversed = false);
void unattachCard(GameEventStorage &ges, Server_Card *card);
Response::ResponseCode setCardAttrHelper(GameEventStorage &ges,
int targetPlayerId,