This closes feature request 0000020. Attention, this breaks protocol compatibility.
This commit is contained in:
parent
cfd715cce9
commit
41c4603fe9
12 changed files with 87 additions and 13 deletions
|
@ -64,6 +64,11 @@ DeckViewCard::DeckViewCard(const QString &_name, const QString &_originZone, QGr
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DeckViewCard::~DeckViewCard()
|
||||||
|
{
|
||||||
|
delete dragItem;
|
||||||
|
}
|
||||||
|
|
||||||
void DeckViewCard::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
void DeckViewCard::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||||
{
|
{
|
||||||
AbstractCardItem::paint(painter, option, widget);
|
AbstractCardItem::paint(painter, option, widget);
|
||||||
|
@ -85,6 +90,9 @@ void DeckViewCard::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||||
if ((event->screenPos() - event->buttonDownScreenPos(Qt::LeftButton)).manhattanLength() < 2 * QApplication::startDragDistance())
|
if ((event->screenPos() - event->buttonDownScreenPos(Qt::LeftButton)).manhattanLength() < 2 * QApplication::startDragDistance())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (static_cast<DeckViewScene *>(scene())->getLocked())
|
||||||
|
return;
|
||||||
|
|
||||||
delete dragItem;
|
delete dragItem;
|
||||||
dragItem = new DeckViewCardDragItem(this, event->pos());
|
dragItem = new DeckViewCardDragItem(this, event->pos());
|
||||||
scene()->addItem(dragItem);
|
scene()->addItem(dragItem);
|
||||||
|
@ -185,7 +193,7 @@ void DeckViewCardContainer::setWidth(qreal _width)
|
||||||
}
|
}
|
||||||
|
|
||||||
DeckViewScene::DeckViewScene(QObject *parent)
|
DeckViewScene::DeckViewScene(QObject *parent)
|
||||||
: QGraphicsScene(parent), deck(0)
|
: QGraphicsScene(parent), locked(false), deck(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ private:
|
||||||
DeckViewCardDragItem *dragItem;
|
DeckViewCardDragItem *dragItem;
|
||||||
public:
|
public:
|
||||||
DeckViewCard(const QString &_name = QString(), const QString &_originZone = QString(), QGraphicsItem *parent = 0);
|
DeckViewCard(const QString &_name = QString(), const QString &_originZone = QString(), QGraphicsItem *parent = 0);
|
||||||
|
~DeckViewCard();
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||||
const QString &getOriginZone() const { return originZone; }
|
const QString &getOriginZone() const { return originZone; }
|
||||||
protected:
|
protected:
|
||||||
|
@ -65,6 +66,7 @@ signals:
|
||||||
void newCardAdded(AbstractCardItem *card);
|
void newCardAdded(AbstractCardItem *card);
|
||||||
void sideboardPlanChanged();
|
void sideboardPlanChanged();
|
||||||
private:
|
private:
|
||||||
|
bool locked;
|
||||||
DeckList *deck;
|
DeckList *deck;
|
||||||
QMap<QString, DeckViewCardContainer *> cardContainers;
|
QMap<QString, DeckViewCardContainer *> cardContainers;
|
||||||
void rebuildTree();
|
void rebuildTree();
|
||||||
|
@ -73,6 +75,8 @@ private:
|
||||||
public:
|
public:
|
||||||
DeckViewScene(QObject *parent = 0);
|
DeckViewScene(QObject *parent = 0);
|
||||||
~DeckViewScene();
|
~DeckViewScene();
|
||||||
|
void setLocked(bool _locked) { locked = _locked; }
|
||||||
|
bool getLocked() const { return locked; }
|
||||||
void setDeck(DeckList *_deck);
|
void setDeck(DeckList *_deck);
|
||||||
void updateContents();
|
void updateContents();
|
||||||
QList<MoveCardToZone *> getSideboardPlan() const;
|
QList<MoveCardToZone *> getSideboardPlan() const;
|
||||||
|
@ -92,6 +96,7 @@ signals:
|
||||||
public:
|
public:
|
||||||
DeckView(QWidget *parent = 0);
|
DeckView(QWidget *parent = 0);
|
||||||
void setDeck(DeckList *_deck);
|
void setDeck(DeckList *_deck);
|
||||||
|
void setLocked(bool _locked) { deckViewScene->setLocked(_locked); }
|
||||||
QList<MoveCardToZone *> getSideboardPlan() const { return deckViewScene->getSideboardPlan(); }
|
QList<MoveCardToZone *> getSideboardPlan() const { return deckViewScene->getSideboardPlan(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -92,6 +92,11 @@ void MessageLogWidget::logReadyStart(Player *player)
|
||||||
append(tr("%1 is ready to start the game.").arg(sanitizeHtml(player->getName())));
|
append(tr("%1 is ready to start the game.").arg(sanitizeHtml(player->getName())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessageLogWidget::logNotReadyStart(Player *player)
|
||||||
|
{
|
||||||
|
append(tr("%1 is not ready to start the game any more.").arg(sanitizeHtml(player->getName())));
|
||||||
|
}
|
||||||
|
|
||||||
void MessageLogWidget::logConcede(Player *player)
|
void MessageLogWidget::logConcede(Player *player)
|
||||||
{
|
{
|
||||||
append(tr("%1 has conceded the game.").arg(sanitizeHtml(player->getName())));
|
append(tr("%1 has conceded the game.").arg(sanitizeHtml(player->getName())));
|
||||||
|
|
|
@ -30,6 +30,7 @@ public slots:
|
||||||
void logLeaveSpectator(QString name);
|
void logLeaveSpectator(QString name);
|
||||||
void logDeckSelect(Player *player, int deckId);
|
void logDeckSelect(Player *player, int deckId);
|
||||||
void logReadyStart(Player *player);
|
void logReadyStart(Player *player);
|
||||||
|
void logNotReadyStart(Player *player);
|
||||||
void logConcede(Player *player);
|
void logConcede(Player *player);
|
||||||
void logGameStart();
|
void logGameStart();
|
||||||
void logSay(Player *player, QString message);
|
void logSay(Player *player, QString message);
|
||||||
|
|
|
@ -19,6 +19,29 @@
|
||||||
#include "arrowitem.h"
|
#include "arrowitem.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
|
ReadyStartButton::ReadyStartButton(QWidget *parent)
|
||||||
|
: QPushButton(parent), readyStart(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ReadyStartButton::paintEvent(QPaintEvent *event)
|
||||||
|
{
|
||||||
|
QPushButton::paintEvent(event);
|
||||||
|
|
||||||
|
QPainter painter(this);
|
||||||
|
if (readyStart)
|
||||||
|
painter.setPen(QPen(Qt::green, 3));
|
||||||
|
else
|
||||||
|
painter.setPen(QPen(Qt::red, 3));
|
||||||
|
painter.drawRect(1.5, 1.5, width() - 3, height() - 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ReadyStartButton::setReadyStart(bool _readyStart)
|
||||||
|
{
|
||||||
|
readyStart = _readyStart;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
TabGame::TabGame(Client *_client, int _gameId, const QString &_gameDescription, int _localPlayerId, bool _spectator, bool _spectatorsCanTalk, bool _spectatorsSeeEverything, bool _resuming)
|
TabGame::TabGame(Client *_client, int _gameId, const QString &_gameDescription, int _localPlayerId, bool _spectator, bool _spectatorsCanTalk, bool _spectatorsSeeEverything, bool _resuming)
|
||||||
: Tab(), client(_client), gameId(_gameId), gameDescription(_gameDescription), localPlayerId(_localPlayerId), spectator(_spectator), spectatorsCanTalk(_spectatorsCanTalk), spectatorsSeeEverything(_spectatorsSeeEverything), started(false), resuming(_resuming), currentPhase(-1)
|
: Tab(), client(_client), gameId(_gameId), gameDescription(_gameDescription), localPlayerId(_localPlayerId), spectator(_spectator), spectatorsCanTalk(_spectatorsCanTalk), spectatorsSeeEverything(_spectatorsSeeEverything), started(false), resuming(_resuming), currentPhase(-1)
|
||||||
{
|
{
|
||||||
|
@ -28,7 +51,7 @@ TabGame::TabGame(Client *_client, int _gameId, const QString &_gameDescription,
|
||||||
|
|
||||||
loadLocalButton = new QPushButton;
|
loadLocalButton = new QPushButton;
|
||||||
loadRemoteButton = new QPushButton;
|
loadRemoteButton = new QPushButton;
|
||||||
readyStartButton = new QPushButton;
|
readyStartButton = new ReadyStartButton;
|
||||||
readyStartButton->setEnabled(false);
|
readyStartButton->setEnabled(false);
|
||||||
|
|
||||||
QHBoxLayout *buttonHBox = new QHBoxLayout;
|
QHBoxLayout *buttonHBox = new QHBoxLayout;
|
||||||
|
@ -142,7 +165,7 @@ void TabGame::retranslateUi()
|
||||||
|
|
||||||
loadLocalButton->setText(tr("Load &local deck"));
|
loadLocalButton->setText(tr("Load &local deck"));
|
||||||
loadRemoteButton->setText(tr("Load d&eck from server"));
|
loadRemoteButton->setText(tr("Load d&eck from server"));
|
||||||
readyStartButton->setText(tr("S&tart game"));
|
readyStartButton->setText(tr("Ready to s&tart"));
|
||||||
sayLabel->setText(tr("&Say:"));
|
sayLabel->setText(tr("&Say:"));
|
||||||
cardInfo->retranslateUi();
|
cardInfo->retranslateUi();
|
||||||
|
|
||||||
|
@ -360,7 +383,18 @@ void TabGame::eventPlayerPropertiesChanged(Event_PlayerPropertiesChanged *event,
|
||||||
return;
|
return;
|
||||||
playerListWidget->updatePlayerProperties(event->getProperties());
|
playerListWidget->updatePlayerProperties(event->getProperties());
|
||||||
if (context) switch (context->getItemId()) {
|
if (context) switch (context->getItemId()) {
|
||||||
case ItemId_Context_ReadyStart: messageLog->logReadyStart(player); break;
|
case ItemId_Context_ReadyStart: {
|
||||||
|
bool ready = event->getProperties()->getReadyStart();
|
||||||
|
if (player->getLocal()) {
|
||||||
|
readyStartButton->setReadyStart(ready);
|
||||||
|
deckView->setLocked(ready);
|
||||||
|
}
|
||||||
|
if (ready)
|
||||||
|
messageLog->logReadyStart(player);
|
||||||
|
else
|
||||||
|
messageLog->logNotReadyStart(player);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ItemId_Context_Concede: messageLog->logConcede(player); break;
|
case ItemId_Context_Concede: messageLog->logConcede(player); break;
|
||||||
case ItemId_Context_DeckSelect: messageLog->logDeckSelect(player, static_cast<Context_DeckSelect *>(context)->getDeckId()); break;
|
case ItemId_Context_DeckSelect: messageLog->logDeckSelect(player, static_cast<Context_DeckSelect *>(context)->getDeckId()); break;
|
||||||
default: ;
|
default: ;
|
||||||
|
@ -498,7 +532,7 @@ void TabGame::deckSelectFinished(ProtocolResponse *r)
|
||||||
|
|
||||||
void TabGame::readyStart()
|
void TabGame::readyStart()
|
||||||
{
|
{
|
||||||
client->sendCommand(new Command_ReadyStart(gameId));
|
client->sendCommand(new Command_ReadyStart(gameId, !readyStartButton->getReadyStart()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabGame::newCardAdded(AbstractCardItem *card)
|
void TabGame::newCardAdded(AbstractCardItem *card)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define TAB_GAME_H
|
#define TAB_GAME_H
|
||||||
|
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
|
#include <QPushButton>
|
||||||
#include "tab.h"
|
#include "tab.h"
|
||||||
|
|
||||||
class Client;
|
class Client;
|
||||||
|
@ -39,6 +40,18 @@ class CardZone;
|
||||||
class AbstractCardItem;
|
class AbstractCardItem;
|
||||||
class CardItem;
|
class CardItem;
|
||||||
|
|
||||||
|
class ReadyStartButton : public QPushButton {
|
||||||
|
Q_OBJECT
|
||||||
|
private:
|
||||||
|
bool readyStart;
|
||||||
|
public:
|
||||||
|
ReadyStartButton(QWidget *parent = 0);
|
||||||
|
bool getReadyStart() const { return readyStart; }
|
||||||
|
void setReadyStart(bool _readyStart);
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent *event);
|
||||||
|
};
|
||||||
|
|
||||||
class TabGame : public Tab {
|
class TabGame : public Tab {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
private:
|
private:
|
||||||
|
@ -54,7 +67,8 @@ private:
|
||||||
bool resuming;
|
bool resuming;
|
||||||
int currentPhase;
|
int currentPhase;
|
||||||
|
|
||||||
QPushButton *loadLocalButton, *loadRemoteButton, *readyStartButton;
|
QPushButton *loadLocalButton, *loadRemoteButton;
|
||||||
|
ReadyStartButton *readyStartButton;
|
||||||
CardInfoWidget *cardInfo;
|
CardInfoWidget *cardInfo;
|
||||||
PlayerListWidget *playerListWidget;
|
PlayerListWidget *playerListWidget;
|
||||||
MessageLogWidget *messageLog;
|
MessageLogWidget *messageLog;
|
||||||
|
|
|
@ -47,7 +47,7 @@ class ProtocolItem : public SerializableItem_Map {
|
||||||
private:
|
private:
|
||||||
static void initializeHashAuto();
|
static void initializeHashAuto();
|
||||||
public:
|
public:
|
||||||
static const int protocolVersion = 6;
|
static const int protocolVersion = 7;
|
||||||
static void initializeHash();
|
static void initializeHash();
|
||||||
virtual int getItemId() const = 0;
|
virtual int getItemId() const = 0;
|
||||||
ProtocolItem(const QString &_itemType, const QString &_itemSubType);
|
ProtocolItem(const QString &_itemType, const QString &_itemSubType);
|
||||||
|
|
|
@ -147,9 +147,10 @@ Command_SetCardAttr::Command_SetCardAttr(int _gameId, const QString &_zone, int
|
||||||
insertItem(new SerializableItem_String("attr_name", _attrName));
|
insertItem(new SerializableItem_String("attr_name", _attrName));
|
||||||
insertItem(new SerializableItem_String("attr_value", _attrValue));
|
insertItem(new SerializableItem_String("attr_value", _attrValue));
|
||||||
}
|
}
|
||||||
Command_ReadyStart::Command_ReadyStart(int _gameId)
|
Command_ReadyStart::Command_ReadyStart(int _gameId, bool _ready)
|
||||||
: GameCommand("ready_start", _gameId)
|
: GameCommand("ready_start", _gameId)
|
||||||
{
|
{
|
||||||
|
insertItem(new SerializableItem_Bool("ready", _ready));
|
||||||
}
|
}
|
||||||
Command_Concede::Command_Concede(int _gameId)
|
Command_Concede::Command_Concede(int _gameId)
|
||||||
: GameCommand("concede", _gameId)
|
: GameCommand("concede", _gameId)
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
2:create_arrow:i,start_player_id:s,start_zone:i,start_card_id:i,target_player_id:s,target_zone:i,target_card_id:c,color
|
2:create_arrow:i,start_player_id:s,start_zone:i,start_card_id:i,target_player_id:s,target_zone:i,target_card_id:c,color
|
||||||
2:delete_arrow:i,arrow_id
|
2:delete_arrow:i,arrow_id
|
||||||
2:set_card_attr:s,zone:i,card_id:s,attr_name:s,attr_value
|
2:set_card_attr:s,zone:i,card_id:s,attr_name:s,attr_value
|
||||||
2:ready_start
|
2:ready_start:b,ready
|
||||||
2:concede
|
2:concede
|
||||||
2:inc_counter:i,counter_id:i,delta
|
2:inc_counter:i,counter_id:i,delta
|
||||||
2:create_counter:s,counter_name:c,color:i,radius:i,value
|
2:create_counter:s,counter_name:c,color:i,radius:i,value
|
||||||
|
|
|
@ -227,7 +227,8 @@ public:
|
||||||
class Command_ReadyStart : public GameCommand {
|
class Command_ReadyStart : public GameCommand {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
Command_ReadyStart(int _gameId = -1);
|
Command_ReadyStart(int _gameId = -1, bool _ready = false);
|
||||||
|
bool getReady() const { return static_cast<SerializableItem_Bool *>(itemMap.value("ready"))->getData(); };
|
||||||
static SerializableItem *newItem() { return new Command_ReadyStart; }
|
static SerializableItem *newItem() { return new Command_ReadyStart; }
|
||||||
int getItemId() const { return ItemId_Command_ReadyStart; }
|
int getItemId() const { return ItemId_Command_ReadyStart; }
|
||||||
};
|
};
|
||||||
|
|
|
@ -365,6 +365,8 @@ ResponseCode Server_ProtocolHandler::cmdSetSideboardPlan(Command_SetSideboardPla
|
||||||
{
|
{
|
||||||
if (player->getSpectator())
|
if (player->getSpectator())
|
||||||
return RespFunctionNotAllowed;
|
return RespFunctionNotAllowed;
|
||||||
|
if (player->getReadyStart())
|
||||||
|
return RespContextError;
|
||||||
|
|
||||||
DeckList *deck = player->getDeck();
|
DeckList *deck = player->getDeck();
|
||||||
if (!deck)
|
if (!deck)
|
||||||
|
@ -385,7 +387,7 @@ ResponseCode Server_ProtocolHandler::cmdConcede(Command_Concede * /*cmd*/, Comma
|
||||||
return RespOk;
|
return RespOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
ResponseCode Server_ProtocolHandler::cmdReadyStart(Command_ReadyStart * /*cmd*/, CommandContainer *cont, Server_Game *game, Server_Player *player)
|
ResponseCode Server_ProtocolHandler::cmdReadyStart(Command_ReadyStart *cmd, CommandContainer *cont, Server_Game *game, Server_Player *player)
|
||||||
{
|
{
|
||||||
if (player->getSpectator())
|
if (player->getSpectator())
|
||||||
return RespFunctionNotAllowed;
|
return RespFunctionNotAllowed;
|
||||||
|
@ -393,7 +395,10 @@ ResponseCode Server_ProtocolHandler::cmdReadyStart(Command_ReadyStart * /*cmd*/,
|
||||||
if (!player->getDeck())
|
if (!player->getDeck())
|
||||||
return RespContextError;
|
return RespContextError;
|
||||||
|
|
||||||
player->setReadyStart(true);
|
if (player->getReadyStart() == cmd->getReady())
|
||||||
|
return RespContextError;
|
||||||
|
|
||||||
|
player->setReadyStart(cmd->getReady());
|
||||||
game->sendGameEvent(new Event_PlayerPropertiesChanged(player->getProperties()), new Context_ReadyStart);
|
game->sendGameEvent(new Event_PlayerPropertiesChanged(player->getProperties()), new Context_ReadyStart);
|
||||||
game->startGameIfReady();
|
game->startGameIfReady();
|
||||||
return RespOk;
|
return RespOk;
|
||||||
|
|
|
@ -135,4 +135,4 @@ AuthenticationResult Servatrice::checkUserPassword(const QString &user, const QS
|
||||||
return UnknownUser;
|
return UnknownUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString Servatrice::versionString = "Servatrice 0.20100526";
|
const QString Servatrice::versionString = "Servatrice 0.20100603";
|
||||||
|
|
Loading…
Reference in a new issue