single player improvements
This commit is contained in:
parent
82e4f9e19d
commit
c4c1723205
11 changed files with 121 additions and 29 deletions
|
@ -42,11 +42,24 @@ void Counter::retranslateUi()
|
|||
{
|
||||
if (menu) {
|
||||
aSet->setText(tr("&Set counter..."));
|
||||
if (name == "life") {
|
||||
aSet->setShortcut(tr("Ctrl+L"));
|
||||
aDec->setShortcut(tr("F11"));
|
||||
aInc->setShortcut(tr("F12"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Counter::setShortcutsActive()
|
||||
{
|
||||
if (name == "life") {
|
||||
aSet->setShortcut(tr("Ctrl+L"));
|
||||
aDec->setShortcut(tr("F11"));
|
||||
aInc->setShortcut(tr("F12"));
|
||||
}
|
||||
}
|
||||
|
||||
void Counter::setShortcutsInactive()
|
||||
{
|
||||
if (name == "life") {
|
||||
aSet->setShortcut(QKeySequence());
|
||||
aDec->setShortcut(QKeySequence());
|
||||
aInc->setShortcut(QKeySequence());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,9 @@ public:
|
|||
QString getName() const { return name; }
|
||||
int getValue() const { return value; }
|
||||
void setValue(int _value);
|
||||
|
||||
void setShortcutsActive();
|
||||
void setShortcutsInactive();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -13,5 +13,6 @@ LocalServer::~LocalServer()
|
|||
LocalServerInterface *LocalServer::newConnection()
|
||||
{
|
||||
LocalServerInterface *lsi = new LocalServerInterface(this);
|
||||
addClient(lsi);
|
||||
return lsi;
|
||||
}
|
||||
|
|
|
@ -300,19 +300,12 @@ void Player::retranslateUi()
|
|||
aMoveRfgToHand->setText(tr("Move to &hand"));
|
||||
aMoveRfgToGrave->setText(tr("Move to g&raveyard"));
|
||||
aViewLibrary->setText(tr("&View library"));
|
||||
aViewLibrary->setShortcut(tr("F3"));
|
||||
aViewTopCards->setText(tr("View &top cards of library..."));
|
||||
aViewTopCards->setShortcut(tr("Ctrl+W"));
|
||||
aViewGraveyard->setShortcut(tr("F4"));
|
||||
aViewSideboard->setText(tr("&View sideboard"));
|
||||
aDrawCard->setText(tr("&Draw card"));
|
||||
aDrawCard->setShortcut(tr("Ctrl+D"));
|
||||
aDrawCards->setText(tr("D&raw cards..."));
|
||||
aDrawCards->setShortcut(tr("Ctrl+E"));
|
||||
aMulligan->setText(tr("Take &mulligan"));
|
||||
aMulligan->setShortcut(tr("Ctrl+M"));
|
||||
aMulligan->setText(tr("Take &mulligan"));
|
||||
aShuffle->setText(tr("&Shuffle"));
|
||||
aShuffle->setShortcut(tr("Ctrl+S"));
|
||||
|
||||
handMenu->setTitle(tr("&Hand"));
|
||||
sbMenu->setTitle(tr("&Sideboard"));
|
||||
|
@ -320,13 +313,9 @@ void Player::retranslateUi()
|
|||
countersMenu->setTitle(tr("&Counters"));
|
||||
|
||||
aUntapAll->setText(tr("&Untap all permanents"));
|
||||
aUntapAll->setShortcut(tr("Ctrl+U"));
|
||||
aRollDie->setText(tr("R&oll die..."));
|
||||
aRollDie->setShortcut(tr("Ctrl+I"));
|
||||
aCreateToken->setText(tr("&Create token..."));
|
||||
aCreateToken->setShortcut(tr("Ctrl+T"));
|
||||
aCreateAnotherToken->setText(tr("C&reate another token"));
|
||||
aCreateAnotherToken->setShortcut(tr("Ctrl+G"));
|
||||
sayMenu->setTitle(tr("S&ay"));
|
||||
|
||||
QMapIterator<int, Counter *> counterIterator(counters);
|
||||
|
@ -341,6 +330,44 @@ void Player::retranslateUi()
|
|||
zoneIterator.next().value()->retranslateUi();
|
||||
}
|
||||
|
||||
void Player::setShortcutsActive()
|
||||
{
|
||||
aViewLibrary->setShortcut(tr("F3"));
|
||||
aViewTopCards->setShortcut(tr("Ctrl+W"));
|
||||
aViewGraveyard->setShortcut(tr("F4"));
|
||||
aDrawCard->setShortcut(tr("Ctrl+D"));
|
||||
aDrawCards->setShortcut(tr("Ctrl+E"));
|
||||
aMulligan->setShortcut(tr("Ctrl+M"));
|
||||
aShuffle->setShortcut(tr("Ctrl+S"));
|
||||
aUntapAll->setShortcut(tr("Ctrl+U"));
|
||||
aRollDie->setShortcut(tr("Ctrl+I"));
|
||||
aCreateToken->setShortcut(tr("Ctrl+T"));
|
||||
aCreateAnotherToken->setShortcut(tr("Ctrl+G"));
|
||||
|
||||
QMapIterator<int, Counter *> counterIterator(counters);
|
||||
while (counterIterator.hasNext())
|
||||
counterIterator.next().value()->setShortcutsActive();
|
||||
}
|
||||
|
||||
void Player::setShortcutsInactive()
|
||||
{
|
||||
aViewLibrary->setShortcut(QKeySequence());
|
||||
aViewTopCards->setShortcut(QKeySequence());
|
||||
aViewGraveyard->setShortcut(QKeySequence());
|
||||
aDrawCard->setShortcut(QKeySequence());
|
||||
aDrawCards->setShortcut(QKeySequence());
|
||||
aMulligan->setShortcut(QKeySequence());
|
||||
aShuffle->setShortcut(QKeySequence());
|
||||
aUntapAll->setShortcut(QKeySequence());
|
||||
aRollDie->setShortcut(QKeySequence());
|
||||
aCreateToken->setShortcut(QKeySequence());
|
||||
aCreateAnotherToken->setShortcut(QKeySequence());
|
||||
|
||||
QMapIterator<int, Counter *> counterIterator(counters);
|
||||
while (counterIterator.hasNext())
|
||||
counterIterator.next().value()->setShortcutsInactive();
|
||||
}
|
||||
|
||||
void Player::initSayMenu()
|
||||
{
|
||||
sayMenu->clear();
|
||||
|
|
|
@ -185,6 +185,8 @@ public:
|
|||
QMenu *getCardMenu() const;
|
||||
bool getActive() const { return active; }
|
||||
void setActive(bool _active);
|
||||
void setShortcutsActive();
|
||||
void setShortcutsInactive();
|
||||
|
||||
qreal getMinimumWidth() const;
|
||||
void setMirrored(bool _mirrored);
|
||||
|
|
|
@ -328,8 +328,10 @@ Player *TabGame::addPlayer(int playerId, const QString &playerName)
|
|||
AbstractClient *client;
|
||||
if (clients.size() > 1)
|
||||
client = clients.at(playerId);
|
||||
else
|
||||
else {
|
||||
client = clients.first();
|
||||
newPlayer->setShortcutsActive();
|
||||
}
|
||||
DeckViewContainer *deckView = new DeckViewContainer(client, this);
|
||||
connect(deckView, SIGNAL(newCardAdded(AbstractCardItem *)), this, SLOT(newCardAdded(AbstractCardItem *)));
|
||||
deckViewContainers.insert(playerId, deckView);
|
||||
|
@ -590,7 +592,15 @@ Player *TabGame::setActivePlayer(int id)
|
|||
QMapIterator<int, Player *> i(players);
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
i.value()->setActive(i.value() == player);
|
||||
if (i.value() == player) {
|
||||
i.value()->setActive(true);
|
||||
if (clients.size() > 1)
|
||||
i.value()->setShortcutsActive();
|
||||
} else {
|
||||
i.value()->setActive(false);
|
||||
if (clients.size() > 1)
|
||||
i.value()->setShortcutsInactive();
|
||||
}
|
||||
}
|
||||
currentPhase = -1;
|
||||
emit userEvent();
|
||||
|
|
|
@ -20,6 +20,7 @@ TabSupervisor:: TabSupervisor(QWidget *parent)
|
|||
|
||||
TabSupervisor::~TabSupervisor()
|
||||
{
|
||||
stop();
|
||||
delete tabChangedIcon;
|
||||
}
|
||||
|
||||
|
@ -78,11 +79,22 @@ void TabSupervisor::startLocal(const QList<AbstractClient *> &_clients)
|
|||
|
||||
void TabSupervisor::stop()
|
||||
{
|
||||
if (!client)
|
||||
if ((!client) && localClients.isEmpty())
|
||||
return;
|
||||
|
||||
disconnect(client, 0, this, 0);
|
||||
if (client) {
|
||||
disconnect(client, 0, this, 0);
|
||||
client = 0;
|
||||
}
|
||||
|
||||
if (!localClients.isEmpty()) {
|
||||
for (int i = 0; i < localClients.size(); ++i)
|
||||
localClients[i]->deleteLater();
|
||||
localClients.clear();
|
||||
|
||||
emit localGameEnded();
|
||||
}
|
||||
|
||||
clear();
|
||||
|
||||
delete tabServer;
|
||||
|
@ -93,12 +105,12 @@ void TabSupervisor::stop()
|
|||
|
||||
QMapIterator<QString, TabChatChannel *> chatChannelIterator(chatChannelTabs);
|
||||
while (chatChannelIterator.hasNext())
|
||||
delete chatChannelIterator.next().value();
|
||||
chatChannelIterator.next().value()->deleteLater();
|
||||
chatChannelTabs.clear();
|
||||
|
||||
QMapIterator<int, TabGame *> gameIterator(gameTabs);
|
||||
while (gameIterator.hasNext())
|
||||
delete gameIterator.next().value();
|
||||
gameIterator.next().value()->deleteLater();
|
||||
gameTabs.clear();
|
||||
}
|
||||
|
||||
|
@ -128,7 +140,6 @@ void TabSupervisor::localGameJoined(Event_GameJoined *event)
|
|||
setCurrentWidget(tab);
|
||||
|
||||
for (int i = 1; i < localClients.size(); ++i) {
|
||||
qDebug("JOINING");
|
||||
Command_JoinGame *cmd = new Command_JoinGame(event->getGameId());
|
||||
localClients[i]->sendCommand(cmd);
|
||||
}
|
||||
|
@ -140,6 +151,9 @@ void TabSupervisor::gameLeft(TabGame *tab)
|
|||
|
||||
gameTabs.remove(tab->getGameId());
|
||||
removeTab(indexOf(tab));
|
||||
|
||||
if (!localClients.isEmpty())
|
||||
stop();
|
||||
}
|
||||
|
||||
void TabSupervisor::addChatChannelTab(const QString &channelName)
|
||||
|
|
|
@ -36,6 +36,7 @@ public:
|
|||
int getGameCount() const { return gameTabs.size(); }
|
||||
signals:
|
||||
void setMenu(QMenu *menu);
|
||||
void localGameEnded();
|
||||
private slots:
|
||||
void updateCurrent(int index);
|
||||
void updatePingTime(int value, int max);
|
||||
|
|
|
@ -48,10 +48,12 @@ void MainWindow::statusChanged(ClientStatus _status)
|
|||
break;
|
||||
case StatusDisconnected:
|
||||
tabSupervisor->stop();
|
||||
aSinglePlayer->setEnabled(true);
|
||||
aConnect->setEnabled(true);
|
||||
aDisconnect->setEnabled(false);
|
||||
break;
|
||||
case StatusLoggingIn:
|
||||
aSinglePlayer->setEnabled(false);
|
||||
aConnect->setEnabled(false);
|
||||
aDisconnect->setEnabled(true);
|
||||
break;
|
||||
|
@ -85,13 +87,17 @@ void MainWindow::actSinglePlayer()
|
|||
if (!ok)
|
||||
return;
|
||||
|
||||
LocalServer *ls = new LocalServer(this);
|
||||
LocalServerInterface *mainLsi = ls->newConnection();
|
||||
aConnect->setEnabled(false);
|
||||
aSinglePlayer->setEnabled(false);
|
||||
|
||||
localServer = new LocalServer(this);
|
||||
LocalServerInterface *mainLsi = localServer->newConnection();
|
||||
LocalClient *mainClient = new LocalClient(mainLsi, tr("Player %1").arg(1), this);
|
||||
QList<AbstractClient *> localClients;
|
||||
localClients.append(mainClient);
|
||||
|
||||
for (int i = 0; i < numberPlayers - 1; ++i) {
|
||||
LocalServerInterface *slaveLsi = ls->newConnection();
|
||||
LocalServerInterface *slaveLsi = localServer->newConnection();
|
||||
LocalClient *slaveClient = new LocalClient(slaveLsi, tr("Player %1").arg(i + 2), this);
|
||||
localClients.append(slaveClient);
|
||||
}
|
||||
|
@ -101,6 +107,15 @@ void MainWindow::actSinglePlayer()
|
|||
mainClient->sendCommand(createCommand);
|
||||
}
|
||||
|
||||
void MainWindow::localGameEnded()
|
||||
{
|
||||
delete localServer;
|
||||
localServer = 0;
|
||||
|
||||
aConnect->setEnabled(true);
|
||||
aSinglePlayer->setEnabled(true);
|
||||
}
|
||||
|
||||
void MainWindow::actDeckEditor()
|
||||
{
|
||||
WndDeckEditor *deckEditor = new WndDeckEditor(this);
|
||||
|
@ -214,7 +229,7 @@ void MainWindow::createMenus()
|
|||
}
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent), tabMenu(0)
|
||||
: QMainWindow(parent), tabMenu(0), localServer(0)
|
||||
{
|
||||
QPixmapCache::setCacheLimit(200000);
|
||||
|
||||
|
@ -227,6 +242,7 @@ MainWindow::MainWindow(QWidget *parent)
|
|||
|
||||
tabSupervisor = new TabSupervisor;
|
||||
connect(tabSupervisor, SIGNAL(setMenu(QMenu *)), this, SLOT(updateTabMenu(QMenu *)));
|
||||
connect(tabSupervisor, SIGNAL(localGameEnded()), this, SLOT(localGameEnded()));
|
||||
|
||||
setCentralWidget(tabSupervisor);
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
class TabSupervisor;
|
||||
class RemoteClient;
|
||||
class LocalClient;
|
||||
class LocalServer;
|
||||
|
||||
class MainWindow : public QMainWindow {
|
||||
Q_OBJECT
|
||||
|
@ -37,6 +38,7 @@ private slots:
|
|||
void serverError(ResponseCode r);
|
||||
void socketError(const QString &errorStr);
|
||||
void protocolVersionMismatch(int localVersion, int remoteVersion);
|
||||
void localGameEnded();
|
||||
|
||||
void actConnect();
|
||||
void actDisconnect();
|
||||
|
@ -56,7 +58,7 @@ private:
|
|||
TabSupervisor *tabSupervisor;
|
||||
|
||||
RemoteClient *client;
|
||||
QList<AbstractClient *> localClients;
|
||||
LocalServer *localServer;
|
||||
public:
|
||||
MainWindow(QWidget *parent = 0);
|
||||
protected:
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "server_counter.h"
|
||||
#include "server_chatchannel.h"
|
||||
#include "server_protocolhandler.h"
|
||||
#include <QDebug>
|
||||
|
||||
Server::Server(QObject *parent)
|
||||
: QObject(parent), nextGameId(0)
|
||||
|
@ -30,6 +31,8 @@ Server::Server(QObject *parent)
|
|||
|
||||
Server::~Server()
|
||||
{
|
||||
while (!clients.isEmpty())
|
||||
delete clients.takeFirst();
|
||||
}
|
||||
|
||||
Server_Game *Server::createGame(const QString &description, const QString &password, int maxPlayers, bool spectatorsAllowed, bool spectatorsNeedPassword, bool spectatorsCanTalk, bool spectatorsSeeEverything, Server_ProtocolHandler *creator)
|
||||
|
|
Loading…
Reference in a new issue