mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-21 14:23:54 -07:00
Add token creation for opponent board items (#2744)
This commit is contained in:
parent
5abfda49be
commit
e8dbdc3c6d
4 changed files with 69 additions and 28 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -249,6 +249,7 @@ 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;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue