diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index d2291e4e..bd0428da 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -102,6 +102,7 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, TabGame *_pare shortcutsActive(false), defaultNumberTopCards(1), lastTokenDestroy(true), + lastTokenTableRow(0), id(_id), active(false), local(_local), @@ -1035,6 +1036,7 @@ void Player::actCreateToken() lastTokenPT = dlg.getPT(); if (CardInfo *correctedCard = db->getCardBySimpleName(lastTokenName, false)) { lastTokenName = correctedCard->getName(); + lastTokenTableRow = table->clampValidTableRow(2 - correctedCard->getTableRow()); if (lastTokenPT.isEmpty()) lastTokenPT = correctedCard->getPowTough(); } @@ -1056,7 +1058,7 @@ void Player::actCreateAnotherToken() cmd.set_annotation(lastTokenAnnotation.toStdString()); cmd.set_destroy_on_zone_change(lastTokenDestroy); cmd.set_x(-1); - cmd.set_y(0); + cmd.set_y(lastTokenTableRow); sendGameCommand(cmd); } @@ -1070,6 +1072,7 @@ void Player::actCreatePredefinedToken() lastTokenColor = cardInfo->getColors().isEmpty() ? QString() : cardInfo->getColors().first().toLower(); lastTokenPT = cardInfo->getPowTough(); lastTokenAnnotation = cardInfo->getText(); + lastTokenTableRow = table->clampValidTableRow(2 - cardInfo->getTableRow()); lastTokenDestroy = true; aCreateAnotherToken->setEnabled(true); @@ -1657,7 +1660,7 @@ void Player::playCard(CardItem *c, bool faceDown, bool tapped) cmd.set_y(0); } else { int tableRow = faceDown ? 2 : ci->getTableRow(); - QPoint gridPoint = QPoint(-1, 2 - tableRow); + QPoint gridPoint = QPoint(-1, table->clampValidTableRow(2 - tableRow)); cardToMove->set_face_down(faceDown); cardToMove->set_pt(ci->getPowTough().toStdString()); cardToMove->set_tapped(faceDown ? false : tapped); diff --git a/cockatrice/src/player.h b/cockatrice/src/player.h index 3aba14db..9c51e1f6 100644 --- a/cockatrice/src/player.h +++ b/cockatrice/src/player.h @@ -185,6 +185,7 @@ private: int defaultNumberTopCards; QString lastTokenName, lastTokenColor, lastTokenPT, lastTokenAnnotation; bool lastTokenDestroy; + int lastTokenTableRow; ServerInfo_User *userInfo; int id; bool active; diff --git a/cockatrice/src/tablezone.cpp b/cockatrice/src/tablezone.cpp index de53507f..adb171ff 100644 --- a/cockatrice/src/tablezone.cpp +++ b/cockatrice/src/tablezone.cpp @@ -31,7 +31,7 @@ TableZone::TableZone(Player *_p, QGraphicsItem *parent) updateBgPixmap(); - height = 2 * BOX_LINE_WIDTH + 3 * (CARD_HEIGHT + 20) + 2 * PADDING_Y; + height = 2 * BOX_LINE_WIDTH + TABLEROWS * (CARD_HEIGHT + 20) + 2 * PADDING_Y; width = MIN_WIDTH + 2 * MARGIN_X + 2 * BOX_LINE_WIDTH; currentMinimumWidth = MIN_WIDTH; @@ -311,7 +311,7 @@ QPointF TableZone::mapFromGrid(QPoint gridPoint) const if (isInverted()) gridPoint.setY(2 - gridPoint.y()); - y = BOX_LINE_WIDTH + gridPoint.y() * (CARD_HEIGHT + PADDING_Y + 20) + (gridPoint.x() % 3) * 10; + y = BOX_LINE_WIDTH + gridPoint.y() * (CARD_HEIGHT + PADDING_Y + 20) + (gridPoint.x() % TABLEROWS) * 10; /* if (isInverted()) y = height - CARD_HEIGHT - y; @@ -339,7 +339,7 @@ QPoint TableZone::mapToGrid(const QPointF &mapPoint) const int resultY = round(y / (CARD_HEIGHT + PADDING_Y + 20)); if (isInverted()) - resultY = 2 - resultY; + resultY = TABLEROWS - 1 - resultY; int baseX = -1; qreal oldTempX = 0, tempX = 0; @@ -365,3 +365,12 @@ QPointF TableZone::closestGridPoint(const QPointF &point) gridPoint.setX(gridPoint.x() + 1); return mapFromGrid(gridPoint); } + +int TableZone::clampValidTableRow(const int row) +{ + if(row < 0) + return 0; + if(row >= TABLEROWS) + return TABLEROWS - 1; + return row; +} diff --git a/cockatrice/src/tablezone.h b/cockatrice/src/tablezone.h index 073e7b12..e69bc281 100644 --- a/cockatrice/src/tablezone.h +++ b/cockatrice/src/tablezone.h @@ -25,6 +25,7 @@ private: static const int PADDING_Y = 10; static const int MARGIN_X = 20; static const int MIN_WIDTH = 10 * CARD_WIDTH / 2; + static const int TABLEROWS = 3; /* Default background color, inactive mask and boarder gradient @@ -117,6 +118,8 @@ public: QPoint mapToGrid(const QPointF &mapPoint) const; QPointF closestGridPoint(const QPointF &point); + int clampValidTableRow(const int row); + /** Removes a card from view.