mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-07 05:53:59 -07:00
feat: add 'Move to Table' contextual menu action
Adds a 'Table' option to the 'Move to' right-click menu that places each card in its correct table row based on card type, rather than requiring drag-and-drop. Uses per-card iteration so creatures, lands, and noncreatures each land in their proper row. Contrary to the Play option, instants and sorceries also go to the table, covering for what the play option doesn't do.
This commit is contained in:
parent
0c8f4d403c
commit
651b898ee1
5 changed files with 42 additions and 4 deletions
|
|
@ -563,9 +563,9 @@ private:
|
||||||
{"Player/aPlayFacedown", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Battlefield, Face Down"),
|
{"Player/aPlayFacedown", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Battlefield, Face Down"),
|
||||||
parseSequenceString(""),
|
parseSequenceString(""),
|
||||||
ShortcutGroup::Move_selected)},
|
ShortcutGroup::Move_selected)},
|
||||||
{"Player/aPlay", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Battlefield"),
|
{"Player/aMoveToTable", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Battlefield"),
|
||||||
parseSequenceString(""),
|
parseSequenceString(""),
|
||||||
ShortcutGroup::Move_selected)},
|
ShortcutGroup::Move_selected)},
|
||||||
{"Player/aViewHand",
|
{"Player/aViewHand",
|
||||||
ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Hand"), parseSequenceString(""), ShortcutGroup::View)},
|
ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Hand"), parseSequenceString(""), ShortcutGroup::View)},
|
||||||
{"Player/aViewGraveyard",
|
{"Player/aViewGraveyard",
|
||||||
|
|
|
||||||
|
|
@ -9,17 +9,20 @@
|
||||||
|
|
||||||
enum CardMenuActionType
|
enum CardMenuActionType
|
||||||
{
|
{
|
||||||
|
// Per-card attribute actions (must be <= cmClone for cardMenuAction() dispatch)
|
||||||
cmTap,
|
cmTap,
|
||||||
cmUntap,
|
cmUntap,
|
||||||
cmDoesntUntap,
|
cmDoesntUntap,
|
||||||
cmFlip,
|
cmFlip,
|
||||||
cmPeek,
|
cmPeek,
|
||||||
cmClone,
|
cmClone,
|
||||||
|
// Move actions (must be > cmClone for cardMenuAction() dispatch)
|
||||||
cmMoveToTopLibrary,
|
cmMoveToTopLibrary,
|
||||||
cmMoveToBottomLibrary,
|
cmMoveToBottomLibrary,
|
||||||
cmMoveToHand,
|
cmMoveToHand,
|
||||||
cmMoveToGraveyard,
|
cmMoveToGraveyard,
|
||||||
cmMoveToExile
|
cmMoveToExile,
|
||||||
|
cmMoveToTable
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // COCKATRICE_CARD_MENU_ACTION_TYPE_H
|
#endif // COCKATRICE_CARD_MENU_ACTION_TYPE_H
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ MoveMenu::MoveMenu(Player *player) : QMenu(tr("Move to"))
|
||||||
aMoveToGraveyard->setData(cmMoveToGraveyard);
|
aMoveToGraveyard->setData(cmMoveToGraveyard);
|
||||||
aMoveToExile = new QAction(this);
|
aMoveToExile = new QAction(this);
|
||||||
aMoveToExile->setData(cmMoveToExile);
|
aMoveToExile->setData(cmMoveToExile);
|
||||||
|
aMoveToTable = new QAction(this);
|
||||||
|
aMoveToTable->setData(cmMoveToTable);
|
||||||
|
|
||||||
connect(aMoveToTopLibrary, &QAction::triggered, player->getPlayerActions(), &PlayerActions::cardMenuAction);
|
connect(aMoveToTopLibrary, &QAction::triggered, player->getPlayerActions(), &PlayerActions::cardMenuAction);
|
||||||
connect(aMoveToBottomLibrary, &QAction::triggered, player->getPlayerActions(), &PlayerActions::cardMenuAction);
|
connect(aMoveToBottomLibrary, &QAction::triggered, player->getPlayerActions(), &PlayerActions::cardMenuAction);
|
||||||
|
|
@ -25,11 +27,14 @@ MoveMenu::MoveMenu(Player *player) : QMenu(tr("Move to"))
|
||||||
connect(aMoveToHand, &QAction::triggered, player->getPlayerActions(), &PlayerActions::cardMenuAction);
|
connect(aMoveToHand, &QAction::triggered, player->getPlayerActions(), &PlayerActions::cardMenuAction);
|
||||||
connect(aMoveToGraveyard, &QAction::triggered, player->getPlayerActions(), &PlayerActions::cardMenuAction);
|
connect(aMoveToGraveyard, &QAction::triggered, player->getPlayerActions(), &PlayerActions::cardMenuAction);
|
||||||
connect(aMoveToExile, &QAction::triggered, player->getPlayerActions(), &PlayerActions::cardMenuAction);
|
connect(aMoveToExile, &QAction::triggered, player->getPlayerActions(), &PlayerActions::cardMenuAction);
|
||||||
|
connect(aMoveToTable, &QAction::triggered, player->getPlayerActions(), &PlayerActions::cardMenuAction);
|
||||||
|
|
||||||
addAction(aMoveToTopLibrary);
|
addAction(aMoveToTopLibrary);
|
||||||
addAction(aMoveToXfromTopOfLibrary);
|
addAction(aMoveToXfromTopOfLibrary);
|
||||||
addAction(aMoveToBottomLibrary);
|
addAction(aMoveToBottomLibrary);
|
||||||
addSeparator();
|
addSeparator();
|
||||||
|
addAction(aMoveToTable);
|
||||||
|
addSeparator();
|
||||||
addAction(aMoveToHand);
|
addAction(aMoveToHand);
|
||||||
addSeparator();
|
addSeparator();
|
||||||
addAction(aMoveToGraveyard);
|
addAction(aMoveToGraveyard);
|
||||||
|
|
@ -50,6 +55,7 @@ void MoveMenu::setShortcutsActive()
|
||||||
aMoveToHand->setShortcuts(shortcuts.getShortcut("Player/aMoveToHand"));
|
aMoveToHand->setShortcuts(shortcuts.getShortcut("Player/aMoveToHand"));
|
||||||
aMoveToGraveyard->setShortcuts(shortcuts.getShortcut("Player/aMoveToGraveyard"));
|
aMoveToGraveyard->setShortcuts(shortcuts.getShortcut("Player/aMoveToGraveyard"));
|
||||||
aMoveToExile->setShortcuts(shortcuts.getShortcut("Player/aMoveToExile"));
|
aMoveToExile->setShortcuts(shortcuts.getShortcut("Player/aMoveToExile"));
|
||||||
|
aMoveToTable->setShortcuts(shortcuts.getShortcut("Player/aMoveToTable"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveMenu::retranslateUi()
|
void MoveMenu::retranslateUi()
|
||||||
|
|
@ -59,5 +65,6 @@ void MoveMenu::retranslateUi()
|
||||||
aMoveToBottomLibrary->setText(tr("&Bottom of library in random order"));
|
aMoveToBottomLibrary->setText(tr("&Bottom of library in random order"));
|
||||||
aMoveToHand->setText(tr("&Hand"));
|
aMoveToHand->setText(tr("&Hand"));
|
||||||
aMoveToGraveyard->setText(tr("&Graveyard"));
|
aMoveToGraveyard->setText(tr("&Graveyard"));
|
||||||
|
aMoveToTable->setText(tr("T&able"));
|
||||||
aMoveToExile->setText(tr("&Exile"));
|
aMoveToExile->setText(tr("&Exile"));
|
||||||
}
|
}
|
||||||
|
|
@ -23,6 +23,7 @@ public:
|
||||||
QAction *aMoveToBottomLibrary = nullptr;
|
QAction *aMoveToBottomLibrary = nullptr;
|
||||||
|
|
||||||
QAction *aMoveToHand = nullptr;
|
QAction *aMoveToHand = nullptr;
|
||||||
|
QAction *aMoveToTable = nullptr;
|
||||||
QAction *aMoveToGraveyard = nullptr;
|
QAction *aMoveToGraveyard = nullptr;
|
||||||
QAction *aMoveToExile = nullptr;
|
QAction *aMoveToExile = nullptr;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1926,6 +1926,33 @@ void PlayerActions::cardMenuAction()
|
||||||
commandList.append(cmd);
|
commandList.append(cmd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case cmMoveToTable: {
|
||||||
|
for (const auto &card : cardList) {
|
||||||
|
auto *cmd = new Command_MoveCard;
|
||||||
|
cmd->set_start_player_id(startPlayerId);
|
||||||
|
cmd->set_start_zone(startZone.toStdString());
|
||||||
|
cmd->set_target_player_id(player->getPlayerInfo()->getId());
|
||||||
|
cmd->set_target_zone(ZoneNames::TABLE);
|
||||||
|
cmd->set_x(-1);
|
||||||
|
|
||||||
|
CardToMove *ctm = cmd->mutable_cards_to_move()->add_card();
|
||||||
|
ctm->set_card_id(card->getId());
|
||||||
|
ctm->set_face_down(false);
|
||||||
|
|
||||||
|
int tableRow = 0;
|
||||||
|
ExactCard exactCard = card->getCard();
|
||||||
|
if (exactCard) {
|
||||||
|
const CardInfo &info = exactCard.getInfo();
|
||||||
|
tableRow = info.getUiAttributes().tableRow;
|
||||||
|
ctm->set_pt(info.getPowTough().toStdString());
|
||||||
|
ctm->set_tapped(info.getUiAttributes().cipt);
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd->set_y(TableZone::tableRowToGridY(tableRow));
|
||||||
|
commandList.append(cmd);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue