mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-14 14:32:15 -07:00
Player holds the deck, emits deckChanged(), other elements player->getDeck() to respond to changes.
Took 37 minutes
This commit is contained in:
parent
57aa1abc69
commit
c344b40a71
8 changed files with 61 additions and 41 deletions
|
|
@ -743,7 +743,7 @@ void TabGame::loadDeckForLocalPlayer(Player *localPlayer, int playerId, ServerIn
|
|||
DeckLoader newDeck(QString::fromStdString(playerInfo.deck_list()));
|
||||
PictureLoader::cacheCardPixmaps(CardDatabaseManager::getInstance()->getCards(newDeck.getCardRefList()));
|
||||
deckViewContainer->playerDeckView->setDeck(newDeck);
|
||||
localPlayer->getPlayerInfo()->setDeck(newDeck);
|
||||
localPlayer->setDeck(newDeck);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, TabGame *_parent)
|
||||
: QObject(_parent), game(_parent), playerInfo(new PlayerInfo(info, _id, _local, _judge)),
|
||||
playerEventHandler(new PlayerEventHandler(this)), playerActions(new PlayerActions(this)), active(false),
|
||||
dialogSemaphore(false)
|
||||
deck(nullptr), dialogSemaphore(false)
|
||||
{
|
||||
initializeZones();
|
||||
|
||||
|
|
@ -40,6 +40,9 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T
|
|||
playerMenu = new PlayerMenu(this);
|
||||
|
||||
connect(this, &Player::activeChanged, graphicsItem, &PlayerGraphicsItem::onPlayerActiveChanged);
|
||||
|
||||
connect(this, &Player::deckChanged, playerMenu, &PlayerMenu::enableOpenInDeckEditorAction);
|
||||
connect(this, &Player::deckChanged, playerMenu, &PlayerMenu::populatePredefinedTokensMenu);
|
||||
}
|
||||
|
||||
void Player::initializeZones()
|
||||
|
|
@ -240,6 +243,13 @@ void Player::deleteCard(CardItem *card)
|
|||
}
|
||||
}
|
||||
|
||||
void Player::setDeck(const DeckLoader &_deck)
|
||||
{
|
||||
deck = new DeckLoader(_deck);
|
||||
|
||||
emit deckChanged();
|
||||
}
|
||||
|
||||
AbstractCounter *Player::addCounter(const ServerInfo_Counter &counter)
|
||||
{
|
||||
return addCounter(counter.id(), QString::fromStdString(counter.name()),
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ class Player : public QObject
|
|||
|
||||
signals:
|
||||
void openDeckEditor(const DeckLoader *deck);
|
||||
void deckChanged();
|
||||
void newCardAdded(AbstractCardItem *card);
|
||||
void rearrangeCounters();
|
||||
void activeChanged(bool _active);
|
||||
|
|
@ -121,6 +122,13 @@ public:
|
|||
return playerMenu;
|
||||
}
|
||||
|
||||
void setDeck(const DeckLoader &_deck);
|
||||
|
||||
[[nodiscard]] DeckLoader *getDeck() const
|
||||
{
|
||||
return deck;
|
||||
}
|
||||
|
||||
template <typename T> T *addZone(T *zone)
|
||||
{
|
||||
zones.insert(zone->getName(), zone);
|
||||
|
|
@ -211,6 +219,8 @@ private:
|
|||
|
||||
bool active;
|
||||
|
||||
DeckLoader *deck;
|
||||
|
||||
QMap<QString, CardZoneLogic *> zones;
|
||||
QMap<int, AbstractCounter *> counters;
|
||||
QMap<int, ArrowItem *> arrows;
|
||||
|
|
|
|||
|
|
@ -834,7 +834,7 @@ void PlayerActions::actRollDie()
|
|||
|
||||
void PlayerActions::actCreateToken()
|
||||
{
|
||||
DlgCreateToken dlg(player->getPlayerInfo()->getPredefinedTokens(), player->getGame());
|
||||
DlgCreateToken dlg(player->getPlayerMenu()->getPredefinedTokens(), player->getGame());
|
||||
if (!dlg.exec()) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,39 +1,12 @@
|
|||
#include "player_info.h"
|
||||
|
||||
PlayerInfo::PlayerInfo(const ServerInfo_User &info, int _id, bool _local, bool _judge)
|
||||
: id(_id), local(_local), judge(_judge), handVisible(false), conceded(false), zoneId(0), deck(nullptr)
|
||||
: id(_id), local(_local), judge(_judge), handVisible(false), conceded(false), zoneId(0)
|
||||
{
|
||||
userInfo = new ServerInfo_User;
|
||||
userInfo->CopyFrom(info);
|
||||
}
|
||||
|
||||
void PlayerInfo::setDeck(const DeckLoader &_deck)
|
||||
{
|
||||
deck = new DeckLoader(_deck);
|
||||
// TODO: deal with this
|
||||
/*aOpenDeckInDeckEditor->setEnabled(deck);
|
||||
|
||||
createPredefinedTokenMenu->clear();
|
||||
createPredefinedTokenMenu->setEnabled(false);
|
||||
predefinedTokens.clear();
|
||||
InnerDecklistNode *tokenZone = dynamic_cast<InnerDecklistNode *>(deck->getRoot()->findChild(DECK_ZONE_TOKENS));
|
||||
|
||||
if (tokenZone) {
|
||||
if (tokenZone->size() > 0)
|
||||
createPredefinedTokenMenu->setEnabled(true);
|
||||
|
||||
for (int i = 0; i < tokenZone->size(); ++i) {
|
||||
const QString tokenName = tokenZone->at(i)->getName();
|
||||
predefinedTokens.append(tokenName);
|
||||
QAction *a = createPredefinedTokenMenu->addAction(tokenName);
|
||||
if (i < 10) {
|
||||
a->setShortcut(QKeySequence("Alt+" + QString::number((i + 1) % 10)));
|
||||
}
|
||||
connect(a, &QAction::triggered, this, &Player::actCreatePredefinedToken);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
void PlayerInfo::setConceded(bool _conceded)
|
||||
{
|
||||
conceded = _conceded;
|
||||
|
|
|
|||
|
|
@ -25,9 +25,6 @@ public:
|
|||
bool conceded;
|
||||
int zoneId;
|
||||
|
||||
DeckLoader *deck;
|
||||
QStringList predefinedTokens;
|
||||
|
||||
int getZoneId() const
|
||||
{
|
||||
return zoneId;
|
||||
|
|
@ -35,8 +32,6 @@ public:
|
|||
|
||||
void setZoneId(int _zoneId);
|
||||
|
||||
void setDeck(const DeckLoader &_deck);
|
||||
|
||||
void setConceded(bool _conceded);
|
||||
bool getConceded() const
|
||||
{
|
||||
|
|
@ -79,11 +74,6 @@ public:
|
|||
{
|
||||
return QString::fromStdString(userInfo->name());
|
||||
}
|
||||
|
||||
QStringList getPredefinedTokens() const
|
||||
{
|
||||
return predefinedTokens;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // COCKATRICE_PLAYER_INFO_H
|
||||
|
|
|
|||
|
|
@ -919,6 +919,35 @@ void PlayerMenu::addViewCustomZoneActionToCustomZoneMenu(QString zoneName)
|
|||
}
|
||||
}
|
||||
|
||||
void PlayerMenu::populatePredefinedTokensMenu()
|
||||
{
|
||||
DeckLoader *_deck = player->getDeck();
|
||||
createPredefinedTokenMenu->clear();
|
||||
createPredefinedTokenMenu->setEnabled(false);
|
||||
predefinedTokens.clear();
|
||||
InnerDecklistNode *tokenZone = dynamic_cast<InnerDecklistNode *>(_deck->getRoot()->findChild(DECK_ZONE_TOKENS));
|
||||
|
||||
if (tokenZone) {
|
||||
if (!tokenZone->empty())
|
||||
createPredefinedTokenMenu->setEnabled(true);
|
||||
|
||||
for (int i = 0; i < tokenZone->size(); ++i) {
|
||||
const QString tokenName = tokenZone->at(i)->getName();
|
||||
predefinedTokens.append(tokenName);
|
||||
QAction *a = createPredefinedTokenMenu->addAction(tokenName);
|
||||
if (i < 10) {
|
||||
a->setShortcut(QKeySequence("Alt+" + QString::number((i + 1) % 10)));
|
||||
}
|
||||
connect(a, &QAction::triggered, player->getPlayerActions(), &PlayerActions::actCreatePredefinedToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PlayerMenu::enableOpenInDeckEditorAction() const
|
||||
{
|
||||
aOpenDeckInDeckEditor->setEnabled(true);
|
||||
}
|
||||
|
||||
void PlayerMenu::resetTopCardMenuActions()
|
||||
{
|
||||
aAlwaysRevealTopCard->setChecked(false);
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ signals:
|
|||
public slots:
|
||||
QMenu *createPtMenu() const;
|
||||
QMenu *createMoveMenu() const;
|
||||
void enableOpenInDeckEditorAction() const;
|
||||
void populatePredefinedTokensMenu();
|
||||
|
||||
private slots:
|
||||
void addPlayer(Player *playerToAdd);
|
||||
|
|
@ -47,6 +49,11 @@ public:
|
|||
aCreateAnotherToken->setEnabled(true);
|
||||
}
|
||||
|
||||
QStringList getPredefinedTokens() const
|
||||
{
|
||||
return predefinedTokens;
|
||||
}
|
||||
|
||||
[[nodiscard]] bool isAlwaysRevealTopCardChecked()
|
||||
{
|
||||
return aAlwaysRevealTopCard->isChecked();
|
||||
|
|
@ -103,6 +110,7 @@ private:
|
|||
*aMoveToXfromTopOfLibrary, *aSelectAll, *aSelectRow, *aSelectColumn, *aSortHand, *aIncrementAllCardCounters;
|
||||
|
||||
bool shortcutsActive;
|
||||
QStringList predefinedTokens;
|
||||
|
||||
QMenu *createCardMenu(const CardItem *card);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue