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