void CardContainer::fillCards(const QList<int> &card_ids){ if(card_ids.isEmpty()) return; else if(!items.isEmpty()){ items_stack.push(items); items.clear(); } QList<CardItem*> card_items = _createCards(card_ids); static const QPointF pos1(30, 40); static const QPointF pos2(30, 184); static const int card_width = 93; static const int skip = 102; static const qreal whole_width = skip * 4 + card_width; items.append(card_items); int n = items.length(); for(int i = 0; i < n; i++){ QPointF pos; if(n <= 10){ if(i < 5){ pos = pos1; pos.setX(pos.x() + i * skip); }else{ pos = pos2; pos.setX(pos.x() + (i - 5) * skip); } }else{ int half = n / 2 + 1; qreal real_skip = whole_width / half; if(i < half){ pos = pos1; pos.setX(pos.x() + i * real_skip); }else{ pos = pos2; pos.setX(pos.x() + (i-half) * real_skip); } } CardItem* item = items[i]; item->setPos(pos); item->setHomePos(pos); item->setOpacity(1.0); item->setHomeOpacity(1.0); item->setFlag(QGraphicsItem::ItemIsFocusable); } }
bool DiscardPile::_addCardItems(QList<CardItem*> &card_items, Player::Place place) { _m_mutex_pileCards.lock(); m_visibleCards.append(card_items); int numAdded = card_items.size(); int numRemoved = m_visibleCards.size() - qMax(m_numCardsVisible, numAdded + 1); for (int i = 0; i < numRemoved; i++) { CardItem* toRemove = m_visibleCards.first(); toRemove->setZValue(0.0); toRemove->setHomeOpacity(0.0); connect(toRemove, SIGNAL(movement_animation_finished()), this, SLOT(_destroyCard())); toRemove->goBack(true); m_visibleCards.removeFirst(); } foreach (CardItem* card_item, m_visibleCards) { card_item->setHomeOpacity(0.7); }
void CardContainer::fillCards(const QList<int> &card_ids, const QList<int> &disabled_ids) { QList<CardItem *> card_items; if (card_ids.isEmpty() && items.isEmpty()) return; else if (card_ids.isEmpty() && !items.isEmpty()) { card_items = items; items.clear(); } else if (!items.isEmpty()) { retained_stack.push(retained()); items_stack.push(items); foreach (CardItem *item, items) item->hide(); items.clear(); } scene_width = RoomSceneInstance->sceneRect().width(); confirm_button->hide(); if (card_items.isEmpty()) card_items = _createCards(card_ids); items.append(card_items); item_count = items.length(); update(); const int blank = 3; int card_width = G_COMMON_LAYOUT.m_cardNormalWidth; int card_height = G_COMMON_LAYOUT.m_cardNormalHeight; bool one_row = true; int width = (card_width + blank) * item_count - blank + 50; if (width * 1.5 > scene_width) { width = (card_width + blank) * ((item_count + 1) / 2) - blank + 50; one_row = false; } int first_row = one_row ? item_count : (item_count + 1) / 2; for (int i = 0; i < item_count; i++) { QPointF pos; if (i < first_row) { pos.setX(25 + (card_width + blank) * i); pos.setY(45); } else { if (item_count % 2 == 1) pos.setX(25 + card_width / 2 + blank / 2 + (card_width + blank) * (i - first_row)); else pos.setX(25 + (card_width + blank) * (i - first_row)); pos.setY(45 + card_height + blank); } CardItem *item = items[i]; item->resetTransform(); item->setPos(pos); item->setHomePos(pos); item->setOpacity(1.0); item->setHomeOpacity(1.0); item->setFlag(QGraphicsItem::ItemIsFocusable); if (disabled_ids.contains(item->getCard()->getEffectiveId())) item->setEnabled(false); item->show(); } confirm_button->setPos(boundingRect().center().x() - confirm_button->boundingRect().width() / 2, boundingRect().height() - 40); }
void CardContainer::fillGeneralCards(const QList<CardItem *> &card_item, const QList<CardItem *> &disabled_item) { if (card_item == items) return; QList<CardItem *> card_items = card_item; if (card_items.isEmpty() && items.isEmpty()) return; else if (card_item.isEmpty() && !items.isEmpty()) { card_items = items; items.clear(); } else if (!items.isEmpty()) { retained_stack.push(retained()); items_stack.push(items); foreach(CardItem *item, items) item->hide(); items.clear(); } scene_width = RoomSceneInstance->sceneRect().width(); confirm_button->hide(); items.append(card_items); itemCount = items.length(); prepareGeometryChange(); int card_width = G_COMMON_LAYOUT.m_cardNormalWidth; int card_height = G_COMMON_LAYOUT.m_cardNormalHeight; bool one_row = true; int width = (card_width + cardInterval) * itemCount - cardInterval + 50; if (width * 1.5 > scene_width) { width = (card_width + cardInterval) * ((itemCount + 1) / 2) - cardInterval + 50; one_row = false; } int first_row = one_row ? itemCount : (itemCount + 1) / 2; for (int i = 0; i < itemCount; i++) { QPointF pos; if (i < first_row) { pos.setX(25 + (card_width + cardInterval) * i); pos.setY(45); } else { if (itemCount % 2 == 1) pos.setX(25 + card_width / 2 + cardInterval / 2 + (card_width + cardInterval) * (i - first_row)); else pos.setX(25 + (card_width + cardInterval) * (i - first_row)); pos.setY(45 + card_height + cardInterval); } CardItem *item = items[i]; item->resetTransform(); item->setPos(pos); item->setHomePos(pos); item->setOpacity(1.0); item->setHomeOpacity(1.0); item->setFlag(QGraphicsItem::ItemIsFocusable); if (disabled_item.contains(item)) item->setEnabled(false); item->setOuterGlowEffectEnabled(true); item->show(); } confirm_button->setPos(boundingRect().center().x() - confirm_button->boundingRect().width() / 2, boundingRect().height() - 40); }
void CardContainer::fillCards(const QList<int> &card_ids, const QList<int> &disabled_ids) { QList<CardItem *> card_items; if (card_ids.isEmpty() && items.isEmpty()) return; else if (card_ids.isEmpty() && !items.isEmpty()) { card_items = items; items.clear(); } else if (!items.isEmpty()) { retained_stack.push(retained()); items_stack.push(items); foreach (CardItem *item, items) item->hide(); items.clear(); } close_button->hide(); if (card_items.isEmpty()) card_items = _createCards(card_ids); int card_width = G_COMMON_LAYOUT.m_cardNormalWidth; QPointF pos1(30 + card_width / 2, 40 + G_COMMON_LAYOUT.m_cardNormalHeight / 2); QPointF pos2(30 + card_width / 2, 184 + G_COMMON_LAYOUT.m_cardNormalHeight / 2); int skip = 102; qreal whole_width = skip * 4; items.append(card_items); int n = items.length(); for (int i = 0; i < n; ++i) { QPointF pos; if (n <= 10) { if (i < 5) { pos = pos1; pos.setX(pos.x() + i * skip); } else { pos = pos2; pos.setX(pos.x() + (i - 5) * skip); } } else { int half = (n + 1) / 2; qreal real_skip = whole_width / (half - 1); if (i < half) { pos = pos1; pos.setX(pos.x() + i * real_skip); } else { pos = pos2; pos.setX(pos.x() + (i - half) * real_skip); } } CardItem *item = items[i]; item->setPos(pos); item->setHomePos(pos); item->setOpacity(1.0); item->setHomeOpacity(1.0); //不允许移动卡牌,避免在五谷丰登时,出现把电脑选中的卡牌移出到窗口外的现象 item->setFlags(ItemIsFocusable); //卡牌需要支持鼠标左键,以便双击选择 item->setAcceptedMouseButtons(Qt::LeftButton); if (disabled_ids.contains(item->getCard()->getEffectiveId())) { item->setEnabled(false); } item->show(); } }