mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-21 01:42:15 -07:00
Support viewing the bottom X cards of library
This commit is contained in:
parent
0402d4b853
commit
7c5a13c0b2
19 changed files with 119 additions and 38 deletions
|
|
@ -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];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ int Server_CardZone::removeCard(Server_Card *card)
|
|||
return removeCard(card, wasLookedAt);
|
||||
}
|
||||
|
||||
int Server_CardZone::removeCard(Server_Card *card, bool &wasLookedAt)
|
||||
int Server_CardZone::removeCard(Server_Card *card, bool &wasLookedAt, bool isReversed)
|
||||
{
|
||||
int index = cards.indexOf(card);
|
||||
wasLookedAt = isCardAtPosLookedAt(index);
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public:
|
|||
return cards;
|
||||
}
|
||||
int removeCard(Server_Card *card);
|
||||
int removeCard(Server_Card *card, bool &wasLookedAt);
|
||||
int removeCard(Server_Card *card, bool &wasLookedAt, bool isRevealed = false);
|
||||
Server_Card *getCard(int id, int *position = nullptr, bool remove = false);
|
||||
|
||||
int getCardsBeingLookedAt() const
|
||||
|
|
|
|||
|
|
@ -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()) &&
|
||||
|
|
@ -481,7 +482,7 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges,
|
|||
(thisCardProperties->has_face_down() ? thisCardProperties->face_down() : card->getFaceDown());
|
||||
|
||||
bool sourceBeingLookedAt;
|
||||
int position = startzone->removeCard(card, sourceBeingLookedAt);
|
||||
int position = startzone->removeCard(card, sourceBeingLookedAt, isReversed);
|
||||
|
||||
// "Undo draw" should only remain valid if the just-drawn card stays within the user's hand (e.g., they only
|
||||
// reorder their hand). If a just-drawn card leaves the hand then remove cards before it from the list
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue