From 3388804e8f697ba02936e167f7a93603cad41ece Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Mon, 13 Apr 2009 17:54:18 +0200 Subject: [PATCH] improved counters --- cockatrice/cockatrice.pro | 4 +-- cockatrice/src/client.cpp | 5 +++ cockatrice/src/client.h | 2 ++ cockatrice/src/counter.cpp | 24 ++++++++++---- cockatrice/src/counter.h | 4 ++- cockatrice/src/counterlist.cpp | 11 ------- cockatrice/src/counterlist.h | 12 ------- cockatrice/src/game.cpp | 5 ++- cockatrice/src/player.cpp | 48 +++++++++++++++++---------- cockatrice/src/player.h | 7 +--- cockatrice/src/playerarea.cpp | 53 +++++++++++++++++++++++++++--- cockatrice/src/playerarea.h | 10 ++++++ cockatrice/src/servereventdata.cpp | 3 +- cockatrice/src/servereventdata.h | 1 + cockatrice/src/window_main.cpp | 8 ++--- servatrice/src/counter.h | 3 +- servatrice/src/serversocket.cpp | 35 +++++++++++++------- servatrice/src/serversocket.h | 3 +- 18 files changed, 158 insertions(+), 80 deletions(-) delete mode 100644 cockatrice/src/counterlist.cpp delete mode 100644 cockatrice/src/counterlist.h diff --git a/cockatrice/cockatrice.pro b/cockatrice/cockatrice.pro index 2e593fc4..a3cba262 100644 --- a/cockatrice/cockatrice.pro +++ b/cockatrice/cockatrice.pro @@ -12,5 +12,5 @@ QT += network #QTPLUGIN += qjpeg # Input -HEADERS += src/counter.h src/dlg_games.h src/dlg_creategame.h src/dlg_connect.h src/gamesmodel.h src/client.h src/window_main.h src/servergame.h src/servereventdata.h src/serverresponse.h src/pendingcommand.h src/zonelist.h src/counterlist.h src/cardzone.h src/player.h src/cardlist.h src/carditem.h src/tablezone.h src/handzone.h src/playerlist.h src/game.h src/carddatabase.h src/gameview.h src/decklistmodel.h src/dlg_startgame.h src/cardinfowidget.h src/messagelogwidget.h src/serverzonecard.h src/zoneviewzone.h src/zoneviewwidget.h src/libraryzone.h src/gravezone.h src/rfgzone.h src/sideboardzone.h src/carddragitem.h src/zoneviewlayout.h src/playerarea.h src/carddatabasemodel.h src/window_deckeditor.h -SOURCES += src/counter.cpp src/dlg_games.cpp src/dlg_creategame.cpp src/dlg_connect.cpp src/client.cpp src/main.cpp src/window_main.cpp src/servereventdata.cpp src/gamesmodel.cpp src/player.cpp src/cardzone.cpp src/zonelist.cpp src/counterlist.cpp src/cardlist.cpp src/carditem.cpp src/tablezone.cpp src/handzone.cpp src/playerlist.cpp src/game.cpp src/carddatabase.cpp src/gameview.cpp src/decklistmodel.cpp src/dlg_startgame.cpp src/cardinfowidget.cpp src/messagelogwidget.cpp src/zoneviewzone.cpp src/zoneviewwidget.cpp src/libraryzone.cpp src/gravezone.cpp src/rfgzone.cpp src/sideboardzone.cpp src/carddragitem.cpp src/zoneviewlayout.cpp src/playerarea.cpp src/carddatabasemodel.cpp src/window_deckeditor.cpp +HEADERS += src/counter.h src/dlg_games.h src/dlg_creategame.h src/dlg_connect.h src/gamesmodel.h src/client.h src/window_main.h src/servergame.h src/servereventdata.h src/serverresponse.h src/pendingcommand.h src/zonelist.h src/cardzone.h src/player.h src/cardlist.h src/carditem.h src/tablezone.h src/handzone.h src/playerlist.h src/game.h src/carddatabase.h src/gameview.h src/decklistmodel.h src/dlg_startgame.h src/cardinfowidget.h src/messagelogwidget.h src/serverzonecard.h src/zoneviewzone.h src/zoneviewwidget.h src/libraryzone.h src/gravezone.h src/rfgzone.h src/sideboardzone.h src/carddragitem.h src/zoneviewlayout.h src/playerarea.h src/carddatabasemodel.h src/window_deckeditor.h +SOURCES += src/counter.cpp src/dlg_games.cpp src/dlg_creategame.cpp src/dlg_connect.cpp src/client.cpp src/main.cpp src/window_main.cpp src/servereventdata.cpp src/gamesmodel.cpp src/player.cpp src/cardzone.cpp src/zonelist.cpp src/cardlist.cpp src/carditem.cpp src/tablezone.cpp src/handzone.cpp src/playerlist.cpp src/game.cpp src/carddatabase.cpp src/gameview.cpp src/decklistmodel.cpp src/dlg_startgame.cpp src/cardinfowidget.cpp src/messagelogwidget.cpp src/zoneviewzone.cpp src/zoneviewwidget.cpp src/libraryzone.cpp src/gravezone.cpp src/rfgzone.cpp src/sideboardzone.cpp src/carddragitem.cpp src/zoneviewlayout.cpp src/playerarea.cpp src/carddatabasemodel.cpp src/window_deckeditor.cpp diff --git a/cockatrice/src/client.cpp b/cockatrice/src/client.cpp index 9eae5198..3bffee44 100644 --- a/cockatrice/src/client.cpp +++ b/cockatrice/src/client.cpp @@ -291,6 +291,11 @@ int Client::incCounter(const QString &counter, int delta) return cmd(QString("inc_counter|%1|%2").arg(counter).arg(delta)); } +int Client::addCounter(const QString &counter, QColor color, int value) +{ + return cmd(QString("add_counter|%1|%2|%3").arg(counter).arg(color.red() * 65536 + color.green() * 256 + color.blue()).arg(value)); +} + int Client::setCounter(const QString &counter, int value) { return cmd(QString("set_counter|%1|%2").arg(counter).arg(value)); diff --git a/cockatrice/src/client.h b/cockatrice/src/client.h index 0d051cc2..9b2ddd97 100644 --- a/cockatrice/src/client.h +++ b/cockatrice/src/client.h @@ -9,6 +9,7 @@ #include "serverzonecard.h" #include "pendingcommand.h" #include +#include class QTimer; @@ -76,6 +77,7 @@ public: int setCardAttr(const QString &zone, int cardid, const QString &aname, const QString &avalue); int readyStart(); int incCounter(const QString &counter, int delta); + int addCounter(const QString &counter, QColor color, int value); int setCounter(const QString &counter, int value); int delCounter(const QString &counter); int setActivePlayer(int player); diff --git a/cockatrice/src/counter.cpp b/cockatrice/src/counter.cpp index a323cd53..eb5ca676 100644 --- a/cockatrice/src/counter.cpp +++ b/cockatrice/src/counter.cpp @@ -1,16 +1,16 @@ #include "counter.h" #include "player.h" +#include "client.h" #include -Counter::Counter(Player *_player, const QString &_name, QGraphicsItem *parent) - : QGraphicsItem(parent), name(_name), value(0), player(_player) +Counter::Counter(Player *_player, const QString &_name, QColor _color, int _value, QGraphicsItem *parent) + : QGraphicsItem(parent), name(_name), color(_color), value(_value), player(_player) { - player->addCounter(this); } QRectF Counter::boundingRect() const { - return QRectF(0, 0, 50, 30); + return QRectF(0, 0, 40, 40); } void Counter::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) @@ -18,8 +18,12 @@ void Counter::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q Q_UNUSED(option); Q_UNUSED(widget); painter->save(); - painter->fillRect(boundingRect(), QBrush(QColor("gray"))); - painter->drawText(boundingRect(), Qt::AlignCenter, QString("%1").arg(value)); + painter->setBrush(QBrush(color)); + painter->drawEllipse(boundingRect()); + if (value) { + painter->setFont(QFont("Times", 16, QFont::Bold)); + painter->drawText(boundingRect(), Qt::AlignCenter, QString("%1").arg(value)); + } painter->restore(); } @@ -28,3 +32,11 @@ void Counter::setValue(int _value) value = _value; update(boundingRect()); } + +void Counter::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) + player->client->incCounter(name, 1); + else if (event->button() == Qt::RightButton) + player->client->incCounter(name, -1); +} diff --git a/cockatrice/src/counter.h b/cockatrice/src/counter.h index 9c4af853..5accc776 100644 --- a/cockatrice/src/counter.h +++ b/cockatrice/src/counter.h @@ -8,11 +8,13 @@ class Player; class Counter : public QGraphicsItem { private: QString name; + QColor color; int value; protected: Player *player; + void mousePressEvent(QGraphicsSceneMouseEvent *event); public: - Counter(Player *_player, const QString &_name, QGraphicsItem *parent = 0); + Counter(Player *_player, const QString &_name, QColor _color, int _value, QGraphicsItem *parent = 0); QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); diff --git a/cockatrice/src/counterlist.cpp b/cockatrice/src/counterlist.cpp deleted file mode 100644 index 79b19b73..00000000 --- a/cockatrice/src/counterlist.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "counterlist.h" - -Counter *CounterList::findCounter(const QString &name) const -{ - for (int i = 0; i < size(); i++) { - Counter *temp = at(i); - if (!temp->getName().compare(name)) - return temp; - } - return 0; -} diff --git a/cockatrice/src/counterlist.h b/cockatrice/src/counterlist.h deleted file mode 100644 index 5f3b44ea..00000000 --- a/cockatrice/src/counterlist.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef COUNTERLIST_H -#define COUNTERLIST_H - -#include "counter.h" -#include - -class CounterList : public QList { -public: - Counter *findCounter(const QString &name) const; -}; - -#endif diff --git a/cockatrice/src/game.cpp b/cockatrice/src/game.cpp index 7127ec4f..ed5258c5 100644 --- a/cockatrice/src/game.cpp +++ b/cockatrice/src/game.cpp @@ -9,6 +9,8 @@ #include "handzone.h" #include "carddatabase.h" #include "dlg_startgame.h" +#include "playerarea.h" +#include "counter.h" Game::Game(CardDatabase *_db, Client *_client, QGraphicsScene *_scene, QMenu *_actionsMenu, QMenu *_cardMenu, int playerId, const QString &playerName) : QObject(), actionsMenu(_actionsMenu), cardMenu(_cardMenu), db(_db), client(_client), scene(_scene), started(false) @@ -209,6 +211,7 @@ void Game::gameEvent(ServerEventData *msg) case eventCreateToken: case eventSetupZones: case eventSetCardAttr: + case eventAddCounter: case eventSetCounter: case eventDelCounter: case eventPlayerId: { @@ -257,7 +260,7 @@ void Game::actDecLife() void Game::actSetLife() { bool ok; - int life = QInputDialog::getInteger(0, tr("Set life"), tr("New life total:"), localPlayer->getCounters()->findCounter("life")->getValue(), 0, 2000000000, 1, &ok); + int life = QInputDialog::getInteger(0, tr("Set life"), tr("New life total:"), localPlayer->area->getCounter("life")->getValue(), 0, 2000000000, 1, &ok); if (ok) client->setCounter("life", life); } diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index b274b572..23a9c6a6 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -2,6 +2,7 @@ #include "client.h" #include "cardzone.h" #include "playerarea.h" +#include "counter.h" #include #include @@ -12,9 +13,6 @@ Player::Player(const QString &_name, int _id, QPointF _base, bool _local, CardDa area->setPos(_base); _scene->addItem(area); - Counter *life = new Counter(this, "life"); - life->setPos(_base + QPointF(-50, 500)); - aMoveHandToTopLibrary = new QAction(tr("Move to &top of library"), this); connect(aMoveHandToTopLibrary, SIGNAL(triggered()), this, SLOT(actMoveHandToTopLibrary())); aMoveHandToBottomLibrary = new QAction(tr("Move to &bottom of library"), this); @@ -70,9 +68,6 @@ Player::~Player() for (int i = 0; i < zones.size(); i++) delete zones.at(i); - for (int i = 0; i < counters.size(); i++) - delete counters.at(i); - delete area; } @@ -123,11 +118,6 @@ void Player::addZone(CardZone *z) zones << z; } -void Player::addCounter(Counter *c) -{ - counters << c; -} - void Player::setCardAttrHelper(CardItem *card, const QString &aname, const QString &avalue, bool allCards) { if (aname == "tapped") { @@ -159,17 +149,15 @@ void Player::gameEvent(ServerEventData *event) switch (event->getEventType()) { case eventSetupZones: { // XXX Life counter - int life = data[0].toInt(); - int deck_cards = data[1].toInt(); - int sb_cards = data[2].toInt(); + int deck_cards = data[0].toInt(); + int sb_cards = data[1].toInt(); // XXX Fehlerbehandlung // Clean up existing zones first for (int i = 0; i < zones.size(); i++) zones.at(i)->clearContents(); - - Counter *lifeCounter = counters.findCounter("life"); - lifeCounter->setValue(life); + + area->clearCounters(); CardZone *deck = zones.findZone("deck"); for (; deck_cards; deck_cards--) @@ -181,6 +169,17 @@ void Player::gameEvent(ServerEventData *event) sb->addCard(new CardItem(db, QString(), -1)); sb->reorganizeCards(); + if (local) { + client->addCounter("life", QColor("white"), 20); + client->addCounter("w", QColor(200, 200, 200), 0); + client->addCounter("u", QColor(0, 0, 200), 0); + client->addCounter("b", QColor(100, 100, 100), 0); + client->addCounter("r", QColor(200, 0, 0), 0); + client->addCounter("g", QColor(0, 200, 0), 0); + client->addCounter("x", QColor(255, 255, 255), 0); + client->addCounter("storm", QColor(255, 255, 255), 0); + } + break; } case eventDraw: { @@ -269,12 +268,25 @@ void Player::gameEvent(ServerEventData *event) } break; } + case eventAddCounter: { + if (data.size() != 3) { + // XXX + } + QString counterName = data[0]; + int colorValue = data[1].toInt(); + int value = data[2].toInt(); + QColor color(colorValue / 65536, (colorValue % 65536) / 256, colorValue % 256); + qDebug(QString("%1 / %2 / %3").arg(color.red()).arg(color.green()).arg(color.blue()).toLatin1()); + area->addCounter(counterName, color, value); + break; + } case eventSetCounter: { if (data.size() != 2) { // XXX } int value = data[1].toInt(); - Counter *c = counters.findCounter(data[0]); + QString counterName = data[0]; + Counter *c = area->getCounter(counterName); int oldValue = c->getValue(); c->setValue(value); emit logSetCounter(name, c->getName(), value, oldValue); diff --git a/cockatrice/src/player.h b/cockatrice/src/player.h index 54a53e79..f886113c 100644 --- a/cockatrice/src/player.h +++ b/cockatrice/src/player.h @@ -4,7 +4,6 @@ #include #include #include "zonelist.h" -#include "counterlist.h" #include "servereventdata.h" class Client; @@ -44,21 +43,18 @@ private: QAction *aMoveHandToTopLibrary, *aMoveHandToBottomLibrary, *aViewLibrary, *aViewTopCards, *aViewGraveyard, *aViewRfg, *aViewSideboard; - PlayerArea *area; - int defaultNumberTopCards; QString name; int id; QPointF base; bool local; ZoneList zones; - CounterList counters; CardDatabase *db; void setCardAttrHelper(CardItem *card, const QString &aname, const QString &avalue, bool allCards); public: + PlayerArea *area; Client *client; void addZone(CardZone *z); - void addCounter(Counter *c); Player(const QString &_name, int _id, QPointF _base, bool _local, CardDatabase *_db, Client *_client, QGraphicsScene *_scene); ~Player(); QMenu *getPlayerMenu() const { return playerMenu; } @@ -66,7 +62,6 @@ public: QString getName() const { return name; } bool getLocal() const { return local; } const ZoneList *const getZones() const { return &zones; } - const CounterList *const getCounters() const { return &counters; } void gameEvent(ServerEventData *event); void hoverCardEvent(CardItem *card); CardDatabase *getDb() const { return db; } diff --git a/cockatrice/src/playerarea.cpp b/cockatrice/src/playerarea.cpp index ac2eaaa9..76f7e61b 100644 --- a/cockatrice/src/playerarea.cpp +++ b/cockatrice/src/playerarea.cpp @@ -6,12 +6,13 @@ #include "gravezone.h" #include "rfgzone.h" #include "sideboardzone.h" +#include "counter.h" #include PlayerArea::PlayerArea(Player *_player, QGraphicsItem *parent) : QGraphicsItem(parent), player(_player) { - QPointF base = QPointF(20, 50); + QPointF base = QPointF(55, 50); LibraryZone *deck = new LibraryZone(_player, this); deck->setPos(base); @@ -27,7 +28,7 @@ PlayerArea::PlayerArea(Player *_player, QGraphicsItem *parent) SideboardZone *sb = new SideboardZone(_player, this); sb->setVisible(false); - base = QPointF(deck->boundingRect().width() + 40, 0); + base = QPointF(deck->boundingRect().width() + 60, 0); CardZone *hand = new HandZone(_player, this); hand->setPos(base); @@ -42,7 +43,7 @@ PlayerArea::PlayerArea(Player *_player, QGraphicsItem *parent) PlayerArea::~PlayerArea() { - + clearCounters(); } QRectF PlayerArea::boundingRect() const @@ -58,7 +59,51 @@ void PlayerArea::paint(QPainter *painter, const QStyleOptionGraphicsItem *option painter->setFont(QFont("Times", 16, QFont::Bold)); painter->setPen(QPen(QColor("black"))); - painter->drawText(QRectF(0, 0, CARD_WIDTH + 40, 40), Qt::AlignCenter, player->getName()); + painter->drawText(QRectF(0, 0, CARD_WIDTH + 60, 40), Qt::AlignCenter, player->getName()); painter->restore(); } + +Counter *PlayerArea::getCounter(const QString &name, bool remove) +{ + for (int i = 0; i < counterList.size(); i++) { + Counter *temp = counterList.at(i); + if (temp->getName() == name) { + if (remove) + counterList.removeAt(i); + return temp; + } + } + return 0; +} + +void PlayerArea::addCounter(const QString &name, QColor color, int value) +{ + counterList.append(new Counter(player, name, color, value, this)); + rearrangeCounters(); +} + +void PlayerArea::delCounter(const QString &name) +{ + delete getCounter(name, true); + rearrangeCounters(); +} + +void PlayerArea::clearCounters() +{ + for (int i = 0; i < counterList.size(); i++) + delete counterList.at(i); + counterList.clear(); +} + +void PlayerArea::rearrangeCounters() +{ + const int counterAreaWidth = 55; + int y = 50; + for (int i = 0; i < counterList.size(); i++) { + Counter *temp = counterList.at(i); + QRectF br = temp->boundingRect(); + temp->setPos((counterAreaWidth - br.width()) / 2, y); + y += br.height() + 10; + } +} diff --git a/cockatrice/src/playerarea.h b/cockatrice/src/playerarea.h index 27ef8d8c..cf2e4d81 100644 --- a/cockatrice/src/playerarea.h +++ b/cockatrice/src/playerarea.h @@ -1,14 +1,19 @@ #ifndef PLAYERAREA_H #define PLAYERAREA_H +#include #include "carditem.h" class Player; +class Counter; class PlayerArea : public QGraphicsItem { private: QRectF bRect; Player *player; + QList counterList; + + void rearrangeCounters(); public: enum { Type = typeOther }; int type() const { return Type; } @@ -16,6 +21,11 @@ public: ~PlayerArea(); QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + + Counter *getCounter(const QString &name, bool remove = false); + void addCounter(const QString &name, QColor color, int value); + void delCounter(const QString &name); + void clearCounters(); }; #endif diff --git a/cockatrice/src/servereventdata.cpp b/cockatrice/src/servereventdata.cpp index 8981ff02..d26a357b 100644 --- a/cockatrice/src/servereventdata.cpp +++ b/cockatrice/src/servereventdata.cpp @@ -3,7 +3,7 @@ // Message structure for server events: // {"private","public"}|PlayerId|PlayerName|EventType|EventData -const int event_count = 19; +const int event_count = 20; const event_string event_strings[event_count] = { {eventPlayerId, "player_id"}, {eventSay, "say"}, @@ -19,6 +19,7 @@ const event_string event_strings[event_count] = { {eventMoveCard, "move_card"}, {eventCreateToken, "create_token"}, {eventSetCardAttr, "set_card_attr"}, + {eventAddCounter, "add_counter"}, {eventSetCounter, "set_counter"}, {eventDelCounter, "del_counter"}, {eventSetActivePlayer, "set_active_player"}, diff --git a/cockatrice/src/servereventdata.h b/cockatrice/src/servereventdata.h index 662be5ba..55f12837 100644 --- a/cockatrice/src/servereventdata.h +++ b/cockatrice/src/servereventdata.h @@ -20,6 +20,7 @@ enum ServerEventType { eventMoveCard, eventCreateToken, eventSetCardAttr, + eventAddCounter, eventSetCounter, eventDelCounter, eventSetActivePlayer, diff --git a/cockatrice/src/window_main.cpp b/cockatrice/src/window_main.cpp index bebbafd5..94746a0e 100644 --- a/cockatrice/src/window_main.cpp +++ b/cockatrice/src/window_main.cpp @@ -121,8 +121,8 @@ void MainWindow::updateSceneSize() { QRectF sr = scene->sceneRect(); QSizeF zoneSize = zoneLayout->size(); - qDebug(QString("updateSceneSize: width=%1").arg(932 + zoneSize.width()).toLatin1()); - scene->setSceneRect(sr.x(), sr.y(), 932 + zoneSize.width(), sr.height()); + qDebug(QString("updateSceneSize: width=%1").arg(952 + zoneSize.width()).toLatin1()); + scene->setSceneRect(sr.x(), sr.y(), 952 + zoneSize.width(), sr.height()); view->scaleToScene(); } @@ -218,13 +218,13 @@ MainWindow::MainWindow(QWidget *parent) int cardCount = db->loadFromFile("../cards.dat"); qDebug(QString("%1 cards loaded").arg(cardCount).toLatin1()); - scene = new QGraphicsScene(0, 0, 932, 1020, this); + scene = new QGraphicsScene(0, 0, 952, 1020, this); view = new GameView(scene); // view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); zoneLayout = new ZoneViewLayout(db); - zoneLayout->setPos(932, 0); + zoneLayout->setPos(952, 0); scene->addItem(zoneLayout); connect(zoneLayout, SIGNAL(sizeChanged()), this, SLOT(updateSceneSize())); diff --git a/servatrice/src/counter.h b/servatrice/src/counter.h index a490f5dc..625f6517 100644 --- a/servatrice/src/counter.h +++ b/servatrice/src/counter.h @@ -25,9 +25,10 @@ class Counter { protected: QString name; + int color; int count; public: - Counter(QString _name, int _count = 0) : name(_name), count(_count) { } + Counter(QString _name, int _color, int _count = 0) : name(_name), color(_color), count(_count) { } ~Counter() { } int getCount() { return count; } void setCount(int _count) { count = _count; } diff --git a/servatrice/src/serversocket.cpp b/servatrice/src/serversocket.cpp index 7d4619cf..7c513911 100644 --- a/servatrice/src/serversocket.cpp +++ b/servatrice/src/serversocket.cpp @@ -98,10 +98,6 @@ void ServerSocket::setupZones() zones << new PlayerZone("grave", false, true, false, true); zones << new PlayerZone("rfg", false, true, false, true); - // Create life counter - Counter *life = new Counter("life", 20); - counters << life; - // ------------------------------------------------------------------ // Assign card ids and create deck from decklist @@ -118,9 +114,8 @@ void ServerSocket::setupZones() nextCardId = i; PlayerStatus = StatusPlaying; - broadcastEvent(QString("setup_zones|%1|%2|%3").arg(getCounter("life")->getCount()) - .arg(deck->cards.size()) - .arg(getZone("sb")->cards.size()), this); + broadcastEvent(QString("setup_zones|%1|%2").arg(deck->cards.size()) + .arg(sb->cards.size()), this); } void ServerSocket::clearZones() @@ -220,6 +215,9 @@ const ServerSocket::CommandProperties ServerSocket::commandList[ServerSocket::nu << QVariant::String, &ServerSocket::cmdSetCardAttr}, {"inc_counter", true, true, true, QList() << QVariant::String << QVariant::Int, &ServerSocket::cmdIncCounter}, + {"add_counter", true, true, true, QList() << QVariant::String + << QVariant::Int + << QVariant::Int, &ServerSocket::cmdAddCounter}, {"set_counter", true, true, true, QList() << QVariant::String << QVariant::Int, &ServerSocket::cmdSetCounter}, {"del_counter", true, true, true, QList() << QVariant::String, &ServerSocket::cmdDelCounter}, @@ -474,16 +472,29 @@ ReturnMessage::ReturnCode ServerSocket::cmdIncCounter(const QList &par return ReturnMessage::ReturnOk; } +ReturnMessage::ReturnCode ServerSocket::cmdAddCounter(const QList ¶ms) +{ + QString name = params[0].toString(); + if (getCounter(name)) + return ReturnMessage::ReturnContextError; + int color = params[1].toInt(); + int count = params[2].toInt(); + + Counter *c = new Counter(name, color, count); + counters << c; + emit broadcastEvent(QString("add_counter|%1|%2|%3").arg(c->getName()).arg(color).arg(count), this); + + return ReturnMessage::ReturnOk; +} + ReturnMessage::ReturnCode ServerSocket::cmdSetCounter(const QList ¶ms) { Counter *c = getCounter(params[0].toString()); + if (!c) + return ReturnMessage::ReturnContextError; int count = params[1].toInt(); - if (!c) { - c = new Counter(params[0].toString(), count); - counters << c; - } else - c->setCount(count); + c->setCount(count); emit broadcastEvent(QString("set_counter|%1|%2").arg(c->getName()).arg(count), this); return ReturnMessage::ReturnOk; } diff --git a/servatrice/src/serversocket.h b/servatrice/src/serversocket.h index 9aa9553d..471746b7 100644 --- a/servatrice/src/serversocket.h +++ b/servatrice/src/serversocket.h @@ -55,7 +55,7 @@ private: QList paramTypes; CommandHandler handler; }; - static const int numberCommands = 23; + static const int numberCommands = 24; static const CommandProperties commandList[numberCommands]; ReturnMessage::ReturnCode cmdLogin(const QList ¶ms); @@ -73,6 +73,7 @@ private: ReturnMessage::ReturnCode cmdCreateToken(const QList ¶ms); ReturnMessage::ReturnCode cmdSetCardAttr(const QList ¶ms); ReturnMessage::ReturnCode cmdIncCounter(const QList ¶ms); + ReturnMessage::ReturnCode cmdAddCounter(const QList ¶ms); ReturnMessage::ReturnCode cmdSetCounter(const QList ¶ms); ReturnMessage::ReturnCode cmdDelCounter(const QList ¶ms); ReturnMessage::ReturnCode cmdListCounters(const QList ¶ms);