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)
{
if (event->button() == Qt::RightButton) {
if (cardMenu)
if (!cardMenu->isEmpty()) {
owner->updateCardMenu(this);
cardMenu->exec(event->screenPos());
}
if (cardMenu && !cardMenu->isEmpty() && owner) {
owner->updateCardMenu(this);
cardMenu->exec(event->screenPos());
}
} else if ((event->button() == Qt::LeftButton) && !settingsCache->getDoubleClickToPlay()) {
bool hideCard = false;
if (zone->getIsView()) {
if (zone && zone->getIsView()) {
ZoneViewZone *view = static_cast<ZoneViewZone *>(zone);
if (view->getRevealZone() && !view->getWriteableRevealZone())
hideCard = true;
}
if (hideCard)
if (zone && hideCard) {
zone->removeCard(this);
else
} else {
playCard(event->modifiers().testFlag(Qt::ShiftModifier));
}
}
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->CopyFrom(info);
connect(settingsCache, SIGNAL(horizontalHandChanged()), 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::CHANGE_ZONE_PROPERTIES: eventChangeZoneProperties(event.GetExtension(Event_ChangeZoneProperties::ext)); break;
default: {
qDebug() << "unhandled game event";
qDebug() << "unhandled game event" << type;
}
}
}
@@ -2523,8 +2525,11 @@ void Player::refreshShortcuts()
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;
}
QMenu *cardMenu = card->getCardMenu();
QMenu *ptMenu = card->getPTMenu();
@@ -2534,20 +2539,30 @@ void Player::updateCardMenu(const CardItem *card)
bool revealedCard = false;
bool writeableCard = getLocal();
if (card->getZone() && card->getZone()->getIsView()) {
if (card->getZone() && card->getZone()->getIsView())
{
ZoneViewZone *view = static_cast<ZoneViewZone *>(card->getZone());
if (view->getRevealZone()) {
if (view->getRevealZone())
{
if (view->getWriteableRevealZone())
{
writeableCard = true;
}
else
{
revealedCard = true;
}
}
}
if (revealedCard)
{
cardMenu->addAction(aHide);
else if (writeableCard) {
if (moveMenu->isEmpty()) {
}
else if (writeableCard)
{
if (moveMenu->isEmpty())
{
moveMenu->addAction(aMoveToTopLibrary);
moveMenu->addAction(aMoveToXfromTopOfLibrary);
moveMenu->addAction(aMoveToBottomLibrary);
@@ -2559,9 +2574,12 @@ void Player::updateCardMenu(const CardItem *card)
moveMenu->addAction(aMoveToExile);
}
if (card->getZone()) {
if (card->getZone()->getName() == "table") {
if (ptMenu->isEmpty()) {
if (card->getZone())
{
if (card->getZone()->getName() == "table")
{
if (ptMenu->isEmpty())
{
ptMenu->addAction(aIncP);
ptMenu->addAction(aDecP);
ptMenu->addSeparator();
@@ -2579,14 +2597,18 @@ void Player::updateCardMenu(const CardItem *card)
cardMenu->addAction(aDoesntUntap);
cardMenu->addAction(aFlip);
if (card->getFaceDown())
{
cardMenu->addAction(aPeek);
}
addRelatedCardActions(card, cardMenu);
cardMenu->addSeparator();
cardMenu->addAction(aAttach);
if (card->getAttachedTo())
{
cardMenu->addAction(aUnattach);
}
cardMenu->addAction(aDrawArrow);
cardMenu->addSeparator();
cardMenu->addMenu(ptMenu);
@@ -2595,31 +2617,45 @@ void Player::updateCardMenu(const CardItem *card)
cardMenu->addAction(aClone);
cardMenu->addMenu(moveMenu);
for (int i = 0; i < aAddCounter.size(); ++i) {
for (int i = 0; i < aAddCounter.size(); ++i)
{
cardMenu->addSeparator();
cardMenu->addAction(aAddCounter[i]);
if (card->getCounters().contains(i))
{
cardMenu->addAction(aRemoveCounter[i]);
}
cardMenu->addAction(aSetCounter[i]);
}
cardMenu->addSeparator();
} else if (card->getZone()->getName() == "stack") {
}
else if (card->getZone()->getName() == "stack")
{
cardMenu->addAction(aDrawArrow);
cardMenu->addMenu(moveMenu);
addRelatedCardActions(card, cardMenu);
} else {
}
else
{
cardMenu->addAction(aPlay);
cardMenu->addAction(aPlayFacedown);
cardMenu->addMenu(moveMenu);
}
} else
}
else
{
cardMenu->addMenu(moveMenu);
} else {
if (card->getZone()
&& card->getZone()->getName() != "hand") {
}
}
else
{
if (card->getZone() && card->getZone()->getName() != "hand")
{
cardMenu->addAction(aDrawArrow);
cardMenu->addSeparator();
addRelatedCardActions(card, cardMenu);
cardMenu->addSeparator();
cardMenu->addAction(aClone);
}
}
@@ -2742,7 +2778,7 @@ void Player::processSceneSizeChange(int newPlayerWidth)
void Player::setLastToken(CardInfo *cardInfo)
{
if (cardInfo == nullptr)
if (cardInfo == nullptr || aCreateAnotherToken == nullptr)
return;
lastTokenName = cardInfo->getName();

View File

@@ -593,6 +593,11 @@ void TabGame::adminLockChanged(bool lock)
sayEdit->setVisible(v);
}
bool TabGame::isSpectator()
{
return spectator;
}
void TabGame::actGameInfo()
{
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::LEAVE: eventSpectatorLeave(event.GetExtension(Event_Leave::ext), playerId, context); break;
default: {
qDebug() << "unhandled spectator game event";
qDebug() << "unhandled spectator game event" << eventType;
break;
}
}

View File

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