mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-08 11:03:25 -08:00
[Refactor] Move the active card from AbstractGame into GameScene
This commit is contained in:
parent
2c80763d99
commit
bb9f38a375
6 changed files with 26 additions and 20 deletions
|
|
@ -18,8 +18,6 @@ AbstractGame::AbstractGame(QObject *_parent) : QObject(_parent)
|
||||||
{
|
{
|
||||||
gameMetaInfo = new GameMetaInfo(this);
|
gameMetaInfo = new GameMetaInfo(this);
|
||||||
gameEventHandler = new GameEventHandler(this);
|
gameEventHandler = new GameEventHandler(this);
|
||||||
|
|
||||||
activeCard = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AbstractGame::isHost() const
|
bool AbstractGame::isHost() const
|
||||||
|
|
@ -48,11 +46,6 @@ void AbstractGame::loadReplay(const GameReplay *replay)
|
||||||
gameMetaInfo->setSpectatorsOmniscient(true);
|
gameMetaInfo->setSpectatorsOmniscient(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractGame::setActiveCard(CardItem *card)
|
|
||||||
{
|
|
||||||
activeCard = card;
|
|
||||||
}
|
|
||||||
|
|
||||||
CardItem *AbstractGame::getCard(int playerId, const QString &zoneName, int cardId) const
|
CardItem *AbstractGame::getCard(int playerId, const QString &zoneName, int cardId) const
|
||||||
{
|
{
|
||||||
PlayerLogic *player = playerManager->getPlayer(playerId);
|
PlayerLogic *player = playerManager->getPlayer(playerId);
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ public:
|
||||||
GameState *gameState;
|
GameState *gameState;
|
||||||
GameEventHandler *gameEventHandler;
|
GameEventHandler *gameEventHandler;
|
||||||
PlayerManager *playerManager;
|
PlayerManager *playerManager;
|
||||||
CardItem *activeCard;
|
|
||||||
|
|
||||||
GameMetaInfo *getGameMetaInfo()
|
GameMetaInfo *getGameMetaInfo()
|
||||||
{
|
{
|
||||||
|
|
@ -59,12 +58,6 @@ public:
|
||||||
void loadReplay(const GameReplay *replay);
|
void loadReplay(const GameReplay *replay);
|
||||||
|
|
||||||
CardItem *getCard(int playerId, const QString &zoneName, int cardId) const;
|
CardItem *getCard(int playerId, const QString &zoneName, int cardId) const;
|
||||||
|
|
||||||
void setActiveCard(CardItem *card);
|
|
||||||
CardItem *getActiveCard() const
|
|
||||||
{
|
|
||||||
return activeCard;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // COCKATRICE_ABSTRACT_GAME_H
|
#endif // COCKATRICE_ABSTRACT_GAME_H
|
||||||
|
|
|
||||||
|
|
@ -67,9 +67,10 @@ CardItem::CardItem(PlayerLogic *_owner,
|
||||||
void CardItem::prepareDelete()
|
void CardItem::prepareDelete()
|
||||||
{
|
{
|
||||||
if (owner != nullptr) {
|
if (owner != nullptr) {
|
||||||
if (owner->getGame()->getActiveCard() == this) {
|
auto *gameScene = qobject_cast<GameScene *>(scene());
|
||||||
|
if (gameScene && gameScene->getActiveCard() == this) {
|
||||||
emit owner->requestCardMenuUpdate(nullptr);
|
emit owner->requestCardMenuUpdate(nullptr);
|
||||||
owner->getGame()->setActiveCard(nullptr);
|
gameScene->setActiveCard(nullptr);
|
||||||
}
|
}
|
||||||
owner = nullptr;
|
owner = nullptr;
|
||||||
}
|
}
|
||||||
|
|
@ -567,7 +568,9 @@ QVariant CardItem::itemChange(GraphicsItemChange change, const QVariant &value)
|
||||||
bool selected = value.toBool();
|
bool selected = value.toBool();
|
||||||
|
|
||||||
if (selected) {
|
if (selected) {
|
||||||
owner->getGame()->setActiveCard(this);
|
if (auto *gameScene = qobject_cast<GameScene *>(scene())) {
|
||||||
|
gameScene->setActiveCard(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
emit selectionChanged(this, selected);
|
emit selectionChanged(this, selected);
|
||||||
|
|
|
||||||
|
|
@ -124,6 +124,16 @@ QList<CardItem *> GameScene::selectedCards() const
|
||||||
return selectedCards;
|
return selectedCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CardItem *GameScene::getActiveCard() const
|
||||||
|
{
|
||||||
|
return activeCard;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScene::setActiveCard(CardItem *card)
|
||||||
|
{
|
||||||
|
activeCard = card;
|
||||||
|
}
|
||||||
|
|
||||||
void GameScene::onCardSelectionChanged(AbstractCardItem *abstractCard, bool selected)
|
void GameScene::onCardSelectionChanged(AbstractCardItem *abstractCard, bool selected)
|
||||||
{
|
{
|
||||||
CardItem *card = qobject_cast<CardItem *>(abstractCard);
|
CardItem *card = qobject_cast<CardItem *>(abstractCard);
|
||||||
|
|
@ -139,7 +149,7 @@ void GameScene::onCardSelectionChanged(AbstractCardItem *abstractCard, bool sele
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selectedItems().isEmpty()) {
|
if (selectedItems().isEmpty()) {
|
||||||
owner->getGame()->setActiveCard(nullptr);
|
setActiveCard(nullptr);
|
||||||
owner->requestCardMenuUpdate(nullptr);
|
owner->requestCardMenuUpdate(nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -158,7 +168,7 @@ void GameScene::onCardRightClicked(AbstractCardItem *abstractCard, QPoint screen
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
card->getOwner()->getGame()->setActiveCard(card);
|
setActiveCard(card);
|
||||||
|
|
||||||
if (auto *menu = view->getPlayerMenu()->updateCardMenu(card)) {
|
if (auto *menu = view->getPlayerMenu()->updateCardMenu(card)) {
|
||||||
menu->popup(screenPos);
|
menu->popup(screenPos);
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,7 @@ private:
|
||||||
QList<ZoneViewWidget *> zoneViews; ///< Active zone view widgets
|
QList<ZoneViewWidget *> zoneViews; ///< Active zone view widgets
|
||||||
QSize viewSize; ///< Current view size
|
QSize viewSize; ///< Current view size
|
||||||
QPointer<CardItem> hoveredCard; ///< Currently hovered card
|
QPointer<CardItem> hoveredCard; ///< Currently hovered card
|
||||||
|
QPointer<CardItem> activeCard; ///< Card the currently open context menu targets
|
||||||
QBasicTimer *animationTimer; ///< Timer for scene animations
|
QBasicTimer *animationTimer; ///< Timer for scene animations
|
||||||
QHash<QObject *, IAnimatedItem *> animatedItems; ///< Items currently animating
|
QHash<QObject *, IAnimatedItem *> animatedItems; ///< Items currently animating
|
||||||
QHash<QObject *, QMetaObject::Connection>
|
QHash<QObject *, QMetaObject::Connection>
|
||||||
|
|
@ -108,6 +109,12 @@ public:
|
||||||
/** @brief Gets all selected CardItems. */
|
/** @brief Gets all selected CardItems. */
|
||||||
QList<CardItem *> selectedCards() const;
|
QList<CardItem *> selectedCards() const;
|
||||||
|
|
||||||
|
/** @brief Card the currently open context menu targets, or null. */
|
||||||
|
CardItem *getActiveCard() const;
|
||||||
|
|
||||||
|
/** @brief Sets the card the currently open context menu targets. */
|
||||||
|
void setActiveCard(CardItem *card);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Adds a player to the scene and stores their graphics item.
|
* @brief Adds a player to the scene and stores their graphics item.
|
||||||
* @param player Player to add.
|
* @param player Player to add.
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ QMenu *PlayerMenu::updateCardMenu(CardItem *card)
|
||||||
// only update the menu if the card is actually selected
|
// only update the menu if the card is actually selected
|
||||||
if ((player->getLogic()->getGame()->getPlayerManager()->isSpectator() &&
|
if ((player->getLogic()->getGame()->getPlayerManager()->isSpectator() &&
|
||||||
!player->getLogic()->getGame()->getPlayerManager()->isJudge()) ||
|
!player->getLogic()->getGame()->getPlayerManager()->isJudge()) ||
|
||||||
player->getLogic()->getGame()->getActiveCard() != card) {
|
player->getGameScene()->getActiveCard() != card) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue