[Game] Refactor CardDragItem faceDown logic (#6552)

* Rename properties and only pass forceFaceDown

* [Game] Refactor CardDragItem faceDown logic

* revert refactor

* leave face_down unset unless forced
This commit is contained in:
RickyRister 2026-03-03 14:18:21 -08:00 committed by GitHub
parent 2828854d32
commit 2fba5dcd20
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 18 additions and 16 deletions

View file

@ -13,9 +13,10 @@
CardDragItem::CardDragItem(CardItem *_item, CardDragItem::CardDragItem(CardItem *_item,
int _id, int _id,
const QPointF &_hotSpot, const QPointF &_hotSpot,
bool _faceDown, bool _forceFaceDown,
AbstractCardDragItem *parentDrag) AbstractCardDragItem *parentDrag)
: AbstractCardDragItem(_item, _hotSpot, parentDrag), id(_id), faceDown(_faceDown), occupied(false), currentZone(0) : AbstractCardDragItem(_item, _hotSpot, parentDrag), id(_id), forceFaceDown(_forceFaceDown), occupied(false),
currentZone(0)
{ {
} }

View file

@ -16,7 +16,7 @@ class CardDragItem : public AbstractCardDragItem
Q_OBJECT Q_OBJECT
private: private:
int id; int id;
bool faceDown; bool forceFaceDown;
bool occupied; bool occupied;
CardZone *currentZone; CardZone *currentZone;
@ -24,15 +24,15 @@ public:
CardDragItem(CardItem *_item, CardDragItem(CardItem *_item,
int _id, int _id,
const QPointF &_hotSpot, const QPointF &_hotSpot,
bool _faceDown, bool _forceFaceDown,
AbstractCardDragItem *parentDrag = 0); AbstractCardDragItem *parentDrag = 0);
int getId() const int getId() const
{ {
return id; return id;
} }
bool getFaceDown() const bool isForceFaceDown() const
{ {
return faceDown; return forceFaceDown;
} }
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
void updatePosition(const QPointF &cursorScenePos) override; void updatePosition(const QPointF &cursorScenePos) override;

View file

@ -251,10 +251,10 @@ void CardItem::processCardInfo(const ServerInfo_Card &_info)
setDoesntUntap(_info.doesnt_untap()); setDoesntUntap(_info.doesnt_untap());
} }
CardDragItem *CardItem::createDragItem(int _id, const QPointF &_pos, const QPointF &_scenePos, bool faceDown) CardDragItem *CardItem::createDragItem(int _id, const QPointF &_pos, const QPointF &_scenePos, bool forceFaceDown)
{ {
deleteDragItem(); deleteDragItem();
dragItem = new CardDragItem(this, _id, _pos, faceDown); dragItem = new CardDragItem(this, _id, _pos, forceFaceDown);
dragItem->setVisible(false); dragItem->setVisible(false);
scene()->addItem(dragItem); scene()->addItem(dragItem);
dragItem->updatePosition(_scenePos); dragItem->updatePosition(_scenePos);
@ -352,7 +352,7 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
// Use the buttonDownPos to align the hot spot with the position when // Use the buttonDownPos to align the hot spot with the position when
// the user originally clicked // the user originally clicked
createDragItem(id, event->buttonDownPos(Qt::LeftButton), event->scenePos(), facedown || forceFaceDown); createDragItem(id, event->buttonDownPos(Qt::LeftButton), event->scenePos(), forceFaceDown);
dragItem->grabMouse(); dragItem->grabMouse();
int childIndex = 0; int childIndex = 0;
@ -366,8 +366,7 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
childPos = card->pos() - pos(); childPos = card->pos() - pos();
else else
childPos = QPointF(childIndex * CARD_WIDTH / 2, 0); childPos = QPointF(childIndex * CARD_WIDTH / 2, 0);
CardDragItem *drag = CardDragItem *drag = new CardDragItem(card, card->getId(), childPos, forceFaceDown, dragItem);
new CardDragItem(card, card->getId(), childPos, card->getFaceDown() || forceFaceDown, dragItem);
drag->setPos(dragItem->pos() + childPos); drag->setPos(dragItem->pos() + childPos);
scene()->addItem(drag); scene()->addItem(drag);
} }

View file

@ -142,7 +142,7 @@ public:
void processCardInfo(const ServerInfo_Card &_info); void processCardInfo(const ServerInfo_Card &_info);
bool animationEvent(); bool animationEvent();
CardDragItem *createDragItem(int _id, const QPointF &_pos, const QPointF &_scenePos, bool faceDown); CardDragItem *createDragItem(int _id, const QPointF &_pos, const QPointF &_scenePos, bool forceFaceDown);
void deleteDragItem(); void deleteDragItem();
void drawArrow(const QColor &arrowColor); void drawArrow(const QColor &arrowColor);
void drawAttachArrow(); void drawAttachArrow();

View file

@ -101,12 +101,12 @@ void PileZone::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
if (getLogic()->getCards().isEmpty()) if (getLogic()->getCards().isEmpty())
return; return;
bool faceDown = event->modifiers().testFlag(Qt::ShiftModifier); bool forceFaceDown = event->modifiers().testFlag(Qt::ShiftModifier);
bool bottomCard = event->modifiers().testFlag(Qt::ControlModifier); bool bottomCard = event->modifiers().testFlag(Qt::ControlModifier);
CardItem *card = bottomCard ? getLogic()->getCards().last() : getLogic()->getCards().first(); CardItem *card = bottomCard ? getLogic()->getCards().last() : getLogic()->getCards().first();
const int cardid = const int cardid =
getLogic()->contentsKnown() ? card->getId() : (bottomCard ? getLogic()->getCards().size() - 1 : 0); getLogic()->contentsKnown() ? card->getId() : (bottomCard ? getLogic()->getCards().size() - 1 : 0);
CardDragItem *drag = card->createDragItem(cardid, event->pos(), event->scenePos(), faceDown); CardDragItem *drag = card->createDragItem(cardid, event->pos(), event->scenePos(), forceFaceDown);
drag->grabMouse(); drag->grabMouse();
setCursor(Qt::OpenHandCursor); setCursor(Qt::OpenHandCursor);
} }

View file

@ -134,8 +134,10 @@ void TableZone::handleDropEventByGrid(const QList<CardDragItem *> &dragItems,
for (const auto &item : dragItems) { for (const auto &item : dragItems) {
CardToMove *ctm = cmd.mutable_cards_to_move()->add_card(); CardToMove *ctm = cmd.mutable_cards_to_move()->add_card();
ctm->set_card_id(item->getId()); ctm->set_card_id(item->getId());
ctm->set_face_down(item->getFaceDown()); if (item->isForceFaceDown()) {
if (startZone->getName() != getLogic()->getName() && !item->getFaceDown()) { ctm->set_face_down(true);
}
if (startZone->getName() != getLogic()->getName() && !item->isForceFaceDown()) {
const auto &card = item->getItem()->getCard(); const auto &card = item->getItem()->getCard();
if (card) { if (card) {
ctm->set_pt(card.getInfo().getPowTough().toStdString()); ctm->set_pt(card.getInfo().getPowTough().toStdString());