mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2025-12-15 09:00:39 -08:00
Add token creation for opponent board items (#2744)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user