mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-16 15:32:15 -07:00
Add a sample hand widget.
This commit is contained in:
parent
7fb09cd149
commit
7d76319faa
5 changed files with 134 additions and 1 deletions
|
|
@ -393,12 +393,12 @@ void TabDeckEditorVisual::openDeckFromFile(const QString &fileName, DeckOpenLoca
|
||||||
deckMenu->setSaveStatus(true);
|
deckMenu->setSaveStatus(true);
|
||||||
tabContainer->visualDeckView->updateDisplay();
|
tabContainer->visualDeckView->updateDisplay();
|
||||||
tabContainer->deckAnalytics->refreshDisplays(deckDockWidget->deckModel);
|
tabContainer->deckAnalytics->refreshDisplays(deckDockWidget->deckModel);
|
||||||
|
tabContainer->sampleHandWidget->setDeckModel(deckDockWidget->deckModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabDeckEditorVisual::setDeck(DeckLoader *_deck)
|
void TabDeckEditorVisual::setDeck(DeckLoader *_deck)
|
||||||
{
|
{
|
||||||
TabGenericDeckEditor::setDeck(_deck);
|
TabGenericDeckEditor::setDeck(_deck);
|
||||||
qDebug() << "set the deck";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabDeckEditorVisual::showPrintingSelector()
|
void TabDeckEditorVisual::showPrintingSelector()
|
||||||
|
|
|
||||||
|
|
@ -38,11 +38,14 @@ TabDeckEditorVisualTabWidget::TabDeckEditorVisualTabWidget(QWidget *parent,
|
||||||
deckAnalytics = new DeckAnalyticsWidget(this, deckModel);
|
deckAnalytics = new DeckAnalyticsWidget(this, deckModel);
|
||||||
deckAnalytics->setObjectName("deckAnalytics");
|
deckAnalytics->setObjectName("deckAnalytics");
|
||||||
|
|
||||||
|
sampleHandWidget = new VisualDeckEditorSampleHandWidget(this, deckModel);
|
||||||
|
|
||||||
// printingSelector = new PrintingSelector(this, this->deckModel);
|
// printingSelector = new PrintingSelector(this, this->deckModel);
|
||||||
|
|
||||||
this->addNewTab(visualDeckView, "Visual Deck View");
|
this->addNewTab(visualDeckView, "Visual Deck View");
|
||||||
this->addNewTab(visualDatabaseDisplay, "Visual Database Display");
|
this->addNewTab(visualDatabaseDisplay, "Visual Database Display");
|
||||||
this->addNewTab(deckAnalytics, "Deck Analytics");
|
this->addNewTab(deckAnalytics, "Deck Analytics");
|
||||||
|
this->addNewTab(sampleHandWidget, "Sample Hand");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabDeckEditorVisualTabWidget::onCardChanged(CardInfoPtr activeCard)
|
void TabDeckEditorVisualTabWidget::onCardChanged(CardInfoPtr activeCard)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include "../../ui/widgets/deck_analytics/deck_analytics_widget.h"
|
#include "../../ui/widgets/deck_analytics/deck_analytics_widget.h"
|
||||||
#include "../../ui/widgets/printing_selector/printing_selector.h"
|
#include "../../ui/widgets/printing_selector/printing_selector.h"
|
||||||
#include "../../ui/widgets/visual_database_display/visual_database_display_widget.h"
|
#include "../../ui/widgets/visual_database_display/visual_database_display_widget.h"
|
||||||
|
#include "../../ui/widgets/visual_deck_editor/visual_deck_editor_sample_hand_widget.h"
|
||||||
#include "../../ui/widgets/visual_deck_editor/visual_deck_editor_widget.h"
|
#include "../../ui/widgets/visual_deck_editor/visual_deck_editor_widget.h"
|
||||||
#include "../tab_generic_deck_editor.h"
|
#include "../tab_generic_deck_editor.h"
|
||||||
|
|
||||||
|
|
@ -33,6 +34,7 @@ public:
|
||||||
DeckAnalyticsWidget *deckAnalytics;
|
DeckAnalyticsWidget *deckAnalytics;
|
||||||
VisualDatabaseDisplayWidget *visualDatabaseDisplay;
|
VisualDatabaseDisplayWidget *visualDatabaseDisplay;
|
||||||
PrintingSelector *printingSelector;
|
PrintingSelector *printingSelector;
|
||||||
|
VisualDeckEditorSampleHandWidget *sampleHandWidget;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void onCardChanged(CardInfoPtr activeCard);
|
void onCardChanged(CardInfoPtr activeCard);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,100 @@
|
||||||
|
#include "visual_deck_editor_sample_hand_widget.h"
|
||||||
|
|
||||||
|
#include "../../../../deck/deck_loader.h"
|
||||||
|
#include "../../../../game/cards/card_database_manager.h"
|
||||||
|
#include "../cards/card_info_picture_widget.h"
|
||||||
|
|
||||||
|
#include <random>
|
||||||
|
|
||||||
|
VisualDeckEditorSampleHandWidget::VisualDeckEditorSampleHandWidget(QWidget *parent, DeckListModel *_deckListModel)
|
||||||
|
: QWidget(parent), deckListModel(_deckListModel)
|
||||||
|
{
|
||||||
|
layout = new QVBoxLayout(this);
|
||||||
|
setLayout(layout);
|
||||||
|
|
||||||
|
resetButton = new QPushButton("Reset");
|
||||||
|
connect(resetButton, SIGNAL(clicked()), this, SLOT(updateDisplay()));
|
||||||
|
layout->addWidget(resetButton);
|
||||||
|
|
||||||
|
flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAlwaysOff);
|
||||||
|
layout->addWidget(flowWidget);
|
||||||
|
|
||||||
|
for (CardInfoPtr card : getRandomCards(7)) {
|
||||||
|
auto displayWidget = new CardInfoPictureWidget(this);
|
||||||
|
displayWidget->setCard(card);
|
||||||
|
flowWidget->addWidget(displayWidget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VisualDeckEditorSampleHandWidget::setDeckModel(DeckListModel *deckModel)
|
||||||
|
{
|
||||||
|
deckListModel = deckModel;
|
||||||
|
connect(deckListModel, &DeckListModel::dataChanged, this, &VisualDeckEditorSampleHandWidget::updateDisplay);
|
||||||
|
updateDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VisualDeckEditorSampleHandWidget::updateDisplay()
|
||||||
|
{
|
||||||
|
flowWidget->clearLayout();
|
||||||
|
for (CardInfoPtr card : getRandomCards(7)) {
|
||||||
|
auto displayWidget = new CardInfoPictureWidget(this);
|
||||||
|
displayWidget->setCard(card);
|
||||||
|
flowWidget->addWidget(displayWidget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<CardInfoPtr> VisualDeckEditorSampleHandWidget::getRandomCards(int amountToGet)
|
||||||
|
{
|
||||||
|
QList<CardInfoPtr> mainDeckCards;
|
||||||
|
QList<CardInfoPtr> randomCards;
|
||||||
|
if (!deckListModel)
|
||||||
|
return randomCards;
|
||||||
|
DeckList *decklist = deckListModel->getDeckList();
|
||||||
|
if (!decklist)
|
||||||
|
return randomCards;
|
||||||
|
InnerDecklistNode *listRoot = decklist->getRoot();
|
||||||
|
if (!listRoot)
|
||||||
|
return randomCards;
|
||||||
|
|
||||||
|
// Collect all cards in the main deck, allowing duplicates based on their count
|
||||||
|
for (int i = 0; i < listRoot->size(); i++) {
|
||||||
|
InnerDecklistNode *currentZone = dynamic_cast<InnerDecklistNode *>(listRoot->at(i));
|
||||||
|
if (!currentZone)
|
||||||
|
continue;
|
||||||
|
if (currentZone->getName() != DECK_ZONE_MAIN)
|
||||||
|
continue; // Only process the main deck
|
||||||
|
|
||||||
|
for (int j = 0; j < currentZone->size(); j++) {
|
||||||
|
DecklistCardNode *currentCard = dynamic_cast<DecklistCardNode *>(currentZone->at(j));
|
||||||
|
if (!currentCard)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (int k = 0; k < currentCard->getNumber(); ++k) {
|
||||||
|
CardInfoPtr info = CardDatabaseManager::getInstance()->getCardByNameAndProviderId(
|
||||||
|
currentCard->getName(), currentCard->getCardProviderId());
|
||||||
|
if (info) {
|
||||||
|
mainDeckCards.append(info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mainDeckCards.isEmpty())
|
||||||
|
return randomCards;
|
||||||
|
|
||||||
|
// Shuffle the deck
|
||||||
|
std::random_device rd;
|
||||||
|
std::mt19937 rng(rd());
|
||||||
|
std::shuffle(mainDeckCards.begin(), mainDeckCards.end(), rng);
|
||||||
|
|
||||||
|
// Select amountToGet cards
|
||||||
|
|
||||||
|
for (int i = 0; i < qMin(amountToGet, mainDeckCards.size()); ++i) {
|
||||||
|
randomCards.append(mainDeckCards.at(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::sort(randomCards.begin(), randomCards.end(),
|
||||||
|
[](const CardInfoPtr &a, const CardInfoPtr &b) { return a->getCmc() < b->getCmc(); });
|
||||||
|
|
||||||
|
return randomCards;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#ifndef VISUAL_DECK_EDITOR_SAMPLE_HAND_WIDGET_H
|
||||||
|
#define VISUAL_DECK_EDITOR_SAMPLE_HAND_WIDGET_H
|
||||||
|
|
||||||
|
#include "../../../../deck/deck_list_model.h"
|
||||||
|
#include "../general/layout_containers/flow_widget.h"
|
||||||
|
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
class VisualDeckEditorSampleHandWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
VisualDeckEditorSampleHandWidget(QWidget *parent, DeckListModel *deckListModel);
|
||||||
|
QList<CardInfoPtr> getRandomCards(int amountToGet);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void updateDisplay();
|
||||||
|
void setDeckModel(DeckListModel *deckModel);
|
||||||
|
|
||||||
|
private:
|
||||||
|
DeckListModel *deckListModel;
|
||||||
|
QVBoxLayout *layout;
|
||||||
|
QPushButton *resetButton;
|
||||||
|
FlowWidget *flowWidget;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // VISUAL_DECK_EDITOR_SAMPLE_HAND_WIDGET_H
|
||||||
Loading…
Add table
Add a link
Reference in a new issue