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()));
|
DeckLoader newDeck(QString::fromStdString(playerInfo.deck_list()));
|
||||||
PictureLoader::cacheCardPixmaps(CardDatabaseManager::getInstance()->getCards(newDeck.getCardRefList()));
|
PictureLoader::cacheCardPixmaps(CardDatabaseManager::getInstance()->getCards(newDeck.getCardRefList()));
|
||||||
deckViewContainer->playerDeckView->setDeck(newDeck);
|
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)
|
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)),
|
: QObject(_parent), game(_parent), playerInfo(new PlayerInfo(info, _id, _local, _judge)),
|
||||||
playerEventHandler(new PlayerEventHandler(this)), playerActions(new PlayerActions(this)), active(false),
|
playerEventHandler(new PlayerEventHandler(this)), playerActions(new PlayerActions(this)), active(false),
|
||||||
dialogSemaphore(false)
|
deck(nullptr), dialogSemaphore(false)
|
||||||
{
|
{
|
||||||
initializeZones();
|
initializeZones();
|
||||||
|
|
||||||
|
|
@ -40,6 +40,9 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T
|
||||||
playerMenu = new PlayerMenu(this);
|
playerMenu = new PlayerMenu(this);
|
||||||
|
|
||||||
connect(this, &Player::activeChanged, graphicsItem, &PlayerGraphicsItem::onPlayerActiveChanged);
|
connect(this, &Player::activeChanged, graphicsItem, &PlayerGraphicsItem::onPlayerActiveChanged);
|
||||||
|
|
||||||
|
connect(this, &Player::deckChanged, playerMenu, &PlayerMenu::enableOpenInDeckEditorAction);
|
||||||
|
connect(this, &Player::deckChanged, playerMenu, &PlayerMenu::populatePredefinedTokensMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::initializeZones()
|
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)
|
AbstractCounter *Player::addCounter(const ServerInfo_Counter &counter)
|
||||||
{
|
{
|
||||||
return addCounter(counter.id(), QString::fromStdString(counter.name()),
|
return addCounter(counter.id(), QString::fromStdString(counter.name()),
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ class Player : public QObject
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void openDeckEditor(const DeckLoader *deck);
|
void openDeckEditor(const DeckLoader *deck);
|
||||||
|
void deckChanged();
|
||||||
void newCardAdded(AbstractCardItem *card);
|
void newCardAdded(AbstractCardItem *card);
|
||||||
void rearrangeCounters();
|
void rearrangeCounters();
|
||||||
void activeChanged(bool _active);
|
void activeChanged(bool _active);
|
||||||
|
|
@ -121,6 +122,13 @@ public:
|
||||||
return playerMenu;
|
return playerMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setDeck(const DeckLoader &_deck);
|
||||||
|
|
||||||
|
[[nodiscard]] DeckLoader *getDeck() const
|
||||||
|
{
|
||||||
|
return deck;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T> T *addZone(T *zone)
|
template <typename T> T *addZone(T *zone)
|
||||||
{
|
{
|
||||||
zones.insert(zone->getName(), zone);
|
zones.insert(zone->getName(), zone);
|
||||||
|
|
@ -211,6 +219,8 @@ private:
|
||||||
|
|
||||||
bool active;
|
bool active;
|
||||||
|
|
||||||
|
DeckLoader *deck;
|
||||||
|
|
||||||
QMap<QString, CardZoneLogic *> zones;
|
QMap<QString, CardZoneLogic *> zones;
|
||||||
QMap<int, AbstractCounter *> counters;
|
QMap<int, AbstractCounter *> counters;
|
||||||
QMap<int, ArrowItem *> arrows;
|
QMap<int, ArrowItem *> arrows;
|
||||||
|
|
|
||||||
|
|
@ -834,7 +834,7 @@ void PlayerActions::actRollDie()
|
||||||
|
|
||||||
void PlayerActions::actCreateToken()
|
void PlayerActions::actCreateToken()
|
||||||
{
|
{
|
||||||
DlgCreateToken dlg(player->getPlayerInfo()->getPredefinedTokens(), player->getGame());
|
DlgCreateToken dlg(player->getPlayerMenu()->getPredefinedTokens(), player->getGame());
|
||||||
if (!dlg.exec()) {
|
if (!dlg.exec()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,12 @@
|
||||||
#include "player_info.h"
|
#include "player_info.h"
|
||||||
|
|
||||||
PlayerInfo::PlayerInfo(const ServerInfo_User &info, int _id, bool _local, bool _judge)
|
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 = new ServerInfo_User;
|
||||||
userInfo->CopyFrom(info);
|
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)
|
void PlayerInfo::setConceded(bool _conceded)
|
||||||
{
|
{
|
||||||
conceded = _conceded;
|
conceded = _conceded;
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,6 @@ public:
|
||||||
bool conceded;
|
bool conceded;
|
||||||
int zoneId;
|
int zoneId;
|
||||||
|
|
||||||
DeckLoader *deck;
|
|
||||||
QStringList predefinedTokens;
|
|
||||||
|
|
||||||
int getZoneId() const
|
int getZoneId() const
|
||||||
{
|
{
|
||||||
return zoneId;
|
return zoneId;
|
||||||
|
|
@ -35,8 +32,6 @@ public:
|
||||||
|
|
||||||
void setZoneId(int _zoneId);
|
void setZoneId(int _zoneId);
|
||||||
|
|
||||||
void setDeck(const DeckLoader &_deck);
|
|
||||||
|
|
||||||
void setConceded(bool _conceded);
|
void setConceded(bool _conceded);
|
||||||
bool getConceded() const
|
bool getConceded() const
|
||||||
{
|
{
|
||||||
|
|
@ -79,11 +74,6 @@ public:
|
||||||
{
|
{
|
||||||
return QString::fromStdString(userInfo->name());
|
return QString::fromStdString(userInfo->name());
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList getPredefinedTokens() const
|
|
||||||
{
|
|
||||||
return predefinedTokens;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // COCKATRICE_PLAYER_INFO_H
|
#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()
|
void PlayerMenu::resetTopCardMenuActions()
|
||||||
{
|
{
|
||||||
aAlwaysRevealTopCard->setChecked(false);
|
aAlwaysRevealTopCard->setChecked(false);
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ signals:
|
||||||
public slots:
|
public slots:
|
||||||
QMenu *createPtMenu() const;
|
QMenu *createPtMenu() const;
|
||||||
QMenu *createMoveMenu() const;
|
QMenu *createMoveMenu() const;
|
||||||
|
void enableOpenInDeckEditorAction() const;
|
||||||
|
void populatePredefinedTokensMenu();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void addPlayer(Player *playerToAdd);
|
void addPlayer(Player *playerToAdd);
|
||||||
|
|
@ -47,6 +49,11 @@ public:
|
||||||
aCreateAnotherToken->setEnabled(true);
|
aCreateAnotherToken->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList getPredefinedTokens() const
|
||||||
|
{
|
||||||
|
return predefinedTokens;
|
||||||
|
}
|
||||||
|
|
||||||
[[nodiscard]] bool isAlwaysRevealTopCardChecked()
|
[[nodiscard]] bool isAlwaysRevealTopCardChecked()
|
||||||
{
|
{
|
||||||
return aAlwaysRevealTopCard->isChecked();
|
return aAlwaysRevealTopCard->isChecked();
|
||||||
|
|
@ -103,6 +110,7 @@ private:
|
||||||
*aMoveToXfromTopOfLibrary, *aSelectAll, *aSelectRow, *aSelectColumn, *aSortHand, *aIncrementAllCardCounters;
|
*aMoveToXfromTopOfLibrary, *aSelectAll, *aSelectRow, *aSelectColumn, *aSortHand, *aIncrementAllCardCounters;
|
||||||
|
|
||||||
bool shortcutsActive;
|
bool shortcutsActive;
|
||||||
|
QStringList predefinedTokens;
|
||||||
|
|
||||||
QMenu *createCardMenu(const CardItem *card);
|
QMenu *createCardMenu(const CardItem *card);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue