Add token creation for opponent board items (#2744)

This commit is contained in:
Zach H 2017-06-28 23:09:10 -04:00 committed by GitHub
parent 5abfda49be
commit e8dbdc3c6d
4 changed files with 69 additions and 28 deletions

View file

@ -366,23 +366,22 @@ void CardItem::playCard(bool faceDown)
void CardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void CardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{ {
if (event->button() == Qt::RightButton) { if (event->button() == Qt::RightButton) {
if (cardMenu) if (cardMenu && !cardMenu->isEmpty() && owner) {
if (!cardMenu->isEmpty()) { owner->updateCardMenu(this);
owner->updateCardMenu(this); cardMenu->exec(event->screenPos());
cardMenu->exec(event->screenPos()); }
}
} else if ((event->button() == Qt::LeftButton) && !settingsCache->getDoubleClickToPlay()) { } else if ((event->button() == Qt::LeftButton) && !settingsCache->getDoubleClickToPlay()) {
bool hideCard = false; bool hideCard = false;
if (zone->getIsView()) { if (zone && zone->getIsView()) {
ZoneViewZone *view = static_cast<ZoneViewZone *>(zone); ZoneViewZone *view = static_cast<ZoneViewZone *>(zone);
if (view->getRevealZone() && !view->getWriteableRevealZone()) if (view->getRevealZone() && !view->getWriteableRevealZone())
hideCard = true; hideCard = true;
} }
if (hideCard) if (zone && hideCard) {
zone->removeCard(this); zone->removeCard(this);
else } else {
playCard(event->modifiers().testFlag(Qt::ShiftModifier)); playCard(event->modifiers().testFlag(Qt::ShiftModifier));
}
} }
setCursor(Qt::OpenHandCursor); setCursor(Qt::OpenHandCursor);

View file

@ -110,6 +110,8 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, TabGame *_pare
userInfo = new ServerInfo_User; userInfo = new ServerInfo_User;
userInfo->CopyFrom(info); userInfo->CopyFrom(info);
connect(settingsCache, SIGNAL(horizontalHandChanged()), this, SLOT(rearrangeZones())); connect(settingsCache, SIGNAL(horizontalHandChanged()), this, SLOT(rearrangeZones()));
connect(settingsCache, SIGNAL(handJustificationChanged()), this, SLOT(rearrangeZones())); connect(settingsCache, SIGNAL(handJustificationChanged()), this, SLOT(rearrangeZones()));
@ -1766,7 +1768,7 @@ void Player::processGameEvent(GameEvent::GameEventType type, const GameEvent &ev
case GameEvent::REVEAL_CARDS: eventRevealCards(event.GetExtension(Event_RevealCards::ext)); break; case GameEvent::REVEAL_CARDS: eventRevealCards(event.GetExtension(Event_RevealCards::ext)); break;
case GameEvent::CHANGE_ZONE_PROPERTIES: eventChangeZoneProperties(event.GetExtension(Event_ChangeZoneProperties::ext)); break; case GameEvent::CHANGE_ZONE_PROPERTIES: eventChangeZoneProperties(event.GetExtension(Event_ChangeZoneProperties::ext)); break;
default: { default: {
qDebug() << "unhandled game event"; qDebug() << "unhandled game event" << type;
} }
} }
} }
@ -2523,8 +2525,11 @@ void Player::refreshShortcuts()
void Player::updateCardMenu(const CardItem *card) void Player::updateCardMenu(const CardItem *card)
{ {
if (card == nullptr) // If bad card OR is a spectator (as spectators don't need card menus), return
if (card == nullptr || game->isSpectator())
{
return; return;
}
QMenu *cardMenu = card->getCardMenu(); QMenu *cardMenu = card->getCardMenu();
QMenu *ptMenu = card->getPTMenu(); QMenu *ptMenu = card->getPTMenu();
@ -2534,20 +2539,30 @@ void Player::updateCardMenu(const CardItem *card)
bool revealedCard = false; bool revealedCard = false;
bool writeableCard = getLocal(); bool writeableCard = getLocal();
if (card->getZone() && card->getZone()->getIsView()) { if (card->getZone() && card->getZone()->getIsView())
{
ZoneViewZone *view = static_cast<ZoneViewZone *>(card->getZone()); ZoneViewZone *view = static_cast<ZoneViewZone *>(card->getZone());
if (view->getRevealZone()) { if (view->getRevealZone())
{
if (view->getWriteableRevealZone()) if (view->getWriteableRevealZone())
{
writeableCard = true; writeableCard = true;
}
else else
{
revealedCard = true; revealedCard = true;
}
} }
} }
if (revealedCard) if (revealedCard)
{
cardMenu->addAction(aHide); cardMenu->addAction(aHide);
else if (writeableCard) { }
if (moveMenu->isEmpty()) { else if (writeableCard)
{
if (moveMenu->isEmpty())
{
moveMenu->addAction(aMoveToTopLibrary); moveMenu->addAction(aMoveToTopLibrary);
moveMenu->addAction(aMoveToXfromTopOfLibrary); moveMenu->addAction(aMoveToXfromTopOfLibrary);
moveMenu->addAction(aMoveToBottomLibrary); moveMenu->addAction(aMoveToBottomLibrary);
@ -2559,9 +2574,12 @@ void Player::updateCardMenu(const CardItem *card)
moveMenu->addAction(aMoveToExile); moveMenu->addAction(aMoveToExile);
} }
if (card->getZone()) { if (card->getZone())
if (card->getZone()->getName() == "table") { {
if (ptMenu->isEmpty()) { if (card->getZone()->getName() == "table")
{
if (ptMenu->isEmpty())
{
ptMenu->addAction(aIncP); ptMenu->addAction(aIncP);
ptMenu->addAction(aDecP); ptMenu->addAction(aDecP);
ptMenu->addSeparator(); ptMenu->addSeparator();
@ -2579,14 +2597,18 @@ void Player::updateCardMenu(const CardItem *card)
cardMenu->addAction(aDoesntUntap); cardMenu->addAction(aDoesntUntap);
cardMenu->addAction(aFlip); cardMenu->addAction(aFlip);
if (card->getFaceDown()) if (card->getFaceDown())
{
cardMenu->addAction(aPeek); cardMenu->addAction(aPeek);
}
addRelatedCardActions(card, cardMenu); addRelatedCardActions(card, cardMenu);
cardMenu->addSeparator(); cardMenu->addSeparator();
cardMenu->addAction(aAttach); cardMenu->addAction(aAttach);
if (card->getAttachedTo()) if (card->getAttachedTo())
{
cardMenu->addAction(aUnattach); cardMenu->addAction(aUnattach);
}
cardMenu->addAction(aDrawArrow); cardMenu->addAction(aDrawArrow);
cardMenu->addSeparator(); cardMenu->addSeparator();
cardMenu->addMenu(ptMenu); cardMenu->addMenu(ptMenu);
@ -2595,31 +2617,45 @@ void Player::updateCardMenu(const CardItem *card)
cardMenu->addAction(aClone); cardMenu->addAction(aClone);
cardMenu->addMenu(moveMenu); cardMenu->addMenu(moveMenu);
for (int i = 0; i < aAddCounter.size(); ++i) { for (int i = 0; i < aAddCounter.size(); ++i)
{
cardMenu->addSeparator(); cardMenu->addSeparator();
cardMenu->addAction(aAddCounter[i]); cardMenu->addAction(aAddCounter[i]);
if (card->getCounters().contains(i)) if (card->getCounters().contains(i))
{
cardMenu->addAction(aRemoveCounter[i]); cardMenu->addAction(aRemoveCounter[i]);
}
cardMenu->addAction(aSetCounter[i]); cardMenu->addAction(aSetCounter[i]);
} }
cardMenu->addSeparator(); cardMenu->addSeparator();
} else if (card->getZone()->getName() == "stack") { }
else if (card->getZone()->getName() == "stack")
{
cardMenu->addAction(aDrawArrow); cardMenu->addAction(aDrawArrow);
cardMenu->addMenu(moveMenu); cardMenu->addMenu(moveMenu);
addRelatedCardActions(card, cardMenu); addRelatedCardActions(card, cardMenu);
} else { }
else
{
cardMenu->addAction(aPlay); cardMenu->addAction(aPlay);
cardMenu->addAction(aPlayFacedown); cardMenu->addAction(aPlayFacedown);
cardMenu->addMenu(moveMenu); cardMenu->addMenu(moveMenu);
} }
} else }
else
{
cardMenu->addMenu(moveMenu); cardMenu->addMenu(moveMenu);
} else { }
if (card->getZone() }
&& card->getZone()->getName() != "hand") { else
{
if (card->getZone() && card->getZone()->getName() != "hand")
{
cardMenu->addAction(aDrawArrow); cardMenu->addAction(aDrawArrow);
cardMenu->addSeparator(); cardMenu->addSeparator();
addRelatedCardActions(card, cardMenu);
cardMenu->addSeparator();
cardMenu->addAction(aClone); cardMenu->addAction(aClone);
} }
} }
@ -2742,7 +2778,7 @@ void Player::processSceneSizeChange(int newPlayerWidth)
void Player::setLastToken(CardInfo *cardInfo) void Player::setLastToken(CardInfo *cardInfo)
{ {
if (cardInfo == nullptr) if (cardInfo == nullptr || aCreateAnotherToken == nullptr)
return; return;
lastTokenName = cardInfo->getName(); lastTokenName = cardInfo->getName();

View file

@ -593,6 +593,11 @@ void TabGame::adminLockChanged(bool lock)
sayEdit->setVisible(v); sayEdit->setVisible(v);
} }
bool TabGame::isSpectator()
{
return spectator;
}
void TabGame::actGameInfo() void TabGame::actGameInfo()
{ {
DlgCreateGame dlg(gameInfo, roomGameTypes); DlgCreateGame dlg(gameInfo, roomGameTypes);
@ -735,7 +740,7 @@ void TabGame::processGameEventContainer(const GameEventContainer &cont, Abstract
case GameEvent::GAME_SAY: eventSpectatorSay(event.GetExtension(Event_GameSay::ext), playerId, context); break; case GameEvent::GAME_SAY: eventSpectatorSay(event.GetExtension(Event_GameSay::ext), playerId, context); break;
case GameEvent::LEAVE: eventSpectatorLeave(event.GetExtension(Event_Leave::ext), playerId, context); break; case GameEvent::LEAVE: eventSpectatorLeave(event.GetExtension(Event_Leave::ext), playerId, context); break;
default: { default: {
qDebug() << "unhandled spectator game event"; qDebug() << "unhandled spectator game event" << eventType;
break; break;
} }
} }

View file

@ -249,9 +249,10 @@ public:
QString getTabText() const; QString getTabText() const;
bool getSpectator() const { return spectator; } bool getSpectator() const { return spectator; }
bool getSpectatorsSeeEverything() const { return gameInfo.spectators_omniscient(); } bool getSpectatorsSeeEverything() const { return gameInfo.spectators_omniscient(); }
bool isSpectator();
Player *getActiveLocalPlayer() const; Player *getActiveLocalPlayer() const;
AbstractClient *getClientForPlayer(int playerId) const; AbstractClient *getClientForPlayer(int playerId) const;
void setActiveCard(CardItem *_card) { activeCard = _card; } void setActiveCard(CardItem *_card) { activeCard = _card; }
CardItem *getActiveCard() const { return activeCard; } CardItem *getActiveCard() const { return activeCard; }