minor changes, implemented 'doesn't untap' and facedown cards
This commit is contained in:
parent
e6d6162426
commit
a429a4a004
37 changed files with 198 additions and 101 deletions
|
@ -65,7 +65,7 @@ private:
|
||||||
Qt::SortOrder order;
|
Qt::SortOrder order;
|
||||||
public:
|
public:
|
||||||
CardInfoCompare(int _column, Qt::SortOrder _order) : column(_column), order(_order) { }
|
CardInfoCompare(int _column, Qt::SortOrder _order) : column(_column), order(_order) { }
|
||||||
bool operator()(CardInfo *a, CardInfo *b) const
|
inline bool operator()(CardInfo *a, CardInfo *b) const
|
||||||
{
|
{
|
||||||
bool result;
|
bool result;
|
||||||
switch (column) {
|
switch (column) {
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
#include "cardzone.h"
|
#include "cardzone.h"
|
||||||
#include <QtGui>
|
#include <QtGui>
|
||||||
|
|
||||||
CardDragItem::CardDragItem(QGraphicsScene *scene, CardZone *_startZone, QPixmap *_image, int _id, const QPointF &_hotSpot, QGraphicsItem *parent)
|
CardDragItem::CardDragItem(QGraphicsScene *scene, CardZone *_startZone, QPixmap *_image, int _id, const QPointF &_hotSpot, bool _faceDown, QGraphicsItem *parent)
|
||||||
: QGraphicsItem(parent), image(_image), id(_id), hotSpot(_hotSpot), startZone(_startZone)
|
: QGraphicsItem(parent), image(_image), id(_id), hotSpot(_hotSpot), startZone(_startZone), faceDown(_faceDown)
|
||||||
{
|
{
|
||||||
if ((hotSpot.x() < 0) || (hotSpot.y() < 0)) {
|
if ((hotSpot.x() < 0) || (hotSpot.y() < 0)) {
|
||||||
qDebug(QString("CardDragItem: coordinate overflow: x = %1, y = %2").arg(hotSpot.x()).arg(hotSpot.y()).toLatin1());
|
qDebug(QString("CardDragItem: coordinate overflow: x = %1, y = %2").arg(hotSpot.x()).arg(hotSpot.y()).toLatin1());
|
||||||
|
@ -16,7 +16,8 @@ CardDragItem::CardDragItem(QGraphicsScene *scene, CardZone *_startZone, QPixmap
|
||||||
setZValue(2000000000);
|
setZValue(2000000000);
|
||||||
setCacheMode(DeviceCoordinateCache);
|
setCacheMode(DeviceCoordinateCache);
|
||||||
|
|
||||||
scene->addItem(this);
|
if (!parent)
|
||||||
|
scene->addItem(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
CardDragItem::~CardDragItem()
|
CardDragItem::~CardDragItem()
|
||||||
|
@ -82,16 +83,13 @@ void CardDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dropZone) {
|
if (dropZone) {
|
||||||
dropZone->handleDropEvent(id, startZone, (sp - dropZone->scenePos()).toPoint());
|
dropZone->handleDropEvent(id, startZone, (sp - dropZone->scenePos()).toPoint(), faceDown);
|
||||||
QList<QGraphicsItem *> childList = childItems();
|
QList<QGraphicsItem *> childList = childItems();
|
||||||
for (int i = 0; i < childList.size(); i++) {
|
for (int i = 0; i < childList.size(); i++) {
|
||||||
CardDragItem *c = qgraphicsitem_cast<CardDragItem *>(childList.at(i));
|
CardDragItem *c = qgraphicsitem_cast<CardDragItem *>(childList.at(i));
|
||||||
if (!c)
|
dropZone->handleDropEvent(c->id, startZone, (sp - dropZone->scenePos() + c->pos()).toPoint(), faceDown);
|
||||||
QMessageBox::critical(0, "fehler", "null");
|
|
||||||
dropZone->handleDropEvent(c->id, startZone, (sp - dropZone->scenePos() + c->pos()).toPoint());
|
|
||||||
}
|
}
|
||||||
} else
|
}
|
||||||
QMessageBox::critical(0, "fehler", "fehler");
|
|
||||||
|
|
||||||
event->accept();
|
event->accept();
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,10 +12,11 @@ private:
|
||||||
int id;
|
int id;
|
||||||
QPointF hotSpot;
|
QPointF hotSpot;
|
||||||
CardZone *startZone;
|
CardZone *startZone;
|
||||||
|
bool faceDown;
|
||||||
public:
|
public:
|
||||||
enum { Type = typeCardDrag };
|
enum { Type = typeCardDrag };
|
||||||
int type() const { return Type; }
|
int type() const { return Type; }
|
||||||
CardDragItem(QGraphicsScene *scene, CardZone *_startZone, QPixmap *_image, int _id, const QPointF &_hotSpot, QGraphicsItem *parent = 0);
|
CardDragItem(QGraphicsScene *scene, CardZone *_startZone, QPixmap *_image, int _id, const QPointF &_hotSpot, bool _faceDown, QGraphicsItem *parent = 0);
|
||||||
~CardDragItem();
|
~CardDragItem();
|
||||||
QRectF boundingRect() const;
|
QRectF boundingRect() const;
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
|
|
||||||
CardItem::CardItem(CardDatabase *_db, const QString &_name, int _cardid, QGraphicsItem *parent)
|
CardItem::CardItem(CardDatabase *_db, const QString &_name, int _cardid, QGraphicsItem *parent)
|
||||||
: QGraphicsItem(parent), db(_db), name(_name), id(_cardid), tapped(false), attacking(false), facedown(false), counters(0), dragItem(NULL)
|
: QGraphicsItem(parent), db(_db), name(_name), id(_cardid), tapped(false), attacking(false), facedown(false), counters(0), doesntUntap(false), dragItem(NULL)
|
||||||
{
|
{
|
||||||
width = CARD_WIDTH;
|
width = CARD_WIDTH;
|
||||||
height = CARD_HEIGHT;
|
height = CARD_HEIGHT;
|
||||||
|
@ -21,6 +21,7 @@ CardItem::CardItem(CardDatabase *_db, const QString &_name, int _cardid, QGraphi
|
||||||
|
|
||||||
CardItem::~CardItem()
|
CardItem::~CardItem()
|
||||||
{
|
{
|
||||||
|
deleteDragItem();
|
||||||
qDebug(QString("CardItem destructor: %1").arg(name).toLatin1());
|
qDebug(QString("CardItem destructor: %1").arg(name).toLatin1());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +81,7 @@ void CardItem::setAttacking(bool _attacking)
|
||||||
update(boundingRect());
|
update(boundingRect());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CardItem::setFacedown(bool _facedown)
|
void CardItem::setFaceDown(bool _facedown)
|
||||||
{
|
{
|
||||||
facedown = _facedown;
|
facedown = _facedown;
|
||||||
update(boundingRect());
|
update(boundingRect());
|
||||||
|
@ -98,6 +99,11 @@ void CardItem::setAnnotation(const QString &_annotation)
|
||||||
update(boundingRect());
|
update(boundingRect());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CardItem::setDoesntUntap(bool _doesntUntap)
|
||||||
|
{
|
||||||
|
doesntUntap = _doesntUntap;
|
||||||
|
}
|
||||||
|
|
||||||
void CardItem::resetState()
|
void CardItem::resetState()
|
||||||
{
|
{
|
||||||
attacking = false;
|
attacking = false;
|
||||||
|
@ -105,12 +111,14 @@ void CardItem::resetState()
|
||||||
counters = 0;
|
counters = 0;
|
||||||
annotation = QString();
|
annotation = QString();
|
||||||
setTapped(false);
|
setTapped(false);
|
||||||
|
setDoesntUntap(false);
|
||||||
update(boundingRect());
|
update(boundingRect());
|
||||||
}
|
}
|
||||||
|
|
||||||
CardDragItem *CardItem::createDragItem(CardZone *startZone, int _id, const QPointF &_pos, const QPointF &_scenePos)
|
CardDragItem *CardItem::createDragItem(CardZone *startZone, int _id, const QPointF &_pos, const QPointF &_scenePos, bool faceDown)
|
||||||
{
|
{
|
||||||
dragItem = new CardDragItem(scene(), startZone, image, _id, _pos);
|
deleteDragItem();
|
||||||
|
dragItem = new CardDragItem(scene(), startZone, image, _id, _pos, faceDown);
|
||||||
dragItem->setPos(_scenePos - dragItem->getHotSpot());
|
dragItem->setPos(_scenePos - dragItem->getHotSpot());
|
||||||
|
|
||||||
return dragItem;
|
return dragItem;
|
||||||
|
@ -140,8 +148,9 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||||
{
|
{
|
||||||
if ((event->screenPos() - event->buttonDownScreenPos(Qt::LeftButton)).manhattanLength() < QApplication::startDragDistance())
|
if ((event->screenPos() - event->buttonDownScreenPos(Qt::LeftButton)).manhattanLength() < QApplication::startDragDistance())
|
||||||
return;
|
return;
|
||||||
|
bool faceDown = event->modifiers().testFlag(Qt::ShiftModifier);
|
||||||
|
|
||||||
createDragItem((CardZone *) parentItem(), id, event->pos(), event->scenePos());
|
createDragItem((CardZone *) parentItem(), id, event->pos(), event->scenePos(), faceDown);
|
||||||
dragItem->grabMouse();
|
dragItem->grabMouse();
|
||||||
|
|
||||||
QList<QGraphicsItem *> sel = scene()->selectedItems();
|
QList<QGraphicsItem *> sel = scene()->selectedItems();
|
||||||
|
@ -149,7 +158,7 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||||
CardItem *c = (CardItem *) sel.at(i);
|
CardItem *c = (CardItem *) sel.at(i);
|
||||||
if (c == this)
|
if (c == this)
|
||||||
continue;
|
continue;
|
||||||
CardDragItem *drag = new CardDragItem(scene(), (CardZone *) parentItem(), c->getImage(), c->getId(), QPointF(), dragItem);
|
CardDragItem *drag = new CardDragItem(scene(), (CardZone *) parentItem(), c->getImage(), c->getId(), QPointF(), false, dragItem);
|
||||||
drag->setPos(c->pos() - pos());
|
drag->setPos(c->pos() - pos());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ private:
|
||||||
bool facedown;
|
bool facedown;
|
||||||
int counters;
|
int counters;
|
||||||
QString annotation;
|
QString annotation;
|
||||||
|
bool doesntUntap;
|
||||||
CardDragItem *dragItem;
|
CardDragItem *dragItem;
|
||||||
public:
|
public:
|
||||||
enum { Type = typeCard };
|
enum { Type = typeCard };
|
||||||
|
@ -58,15 +59,17 @@ public:
|
||||||
void setTapped(bool _tapped);
|
void setTapped(bool _tapped);
|
||||||
bool getAttacking() const { return attacking; }
|
bool getAttacking() const { return attacking; }
|
||||||
void setAttacking(bool _attacking);
|
void setAttacking(bool _attacking);
|
||||||
bool getFacedown() const { return facedown; }
|
bool getFaceDown() const { return facedown; }
|
||||||
void setFacedown(bool _facedown);
|
void setFaceDown(bool _facedown);
|
||||||
int getCounters() const { return counters; }
|
int getCounters() const { return counters; }
|
||||||
void setCounters(int _counters);
|
void setCounters(int _counters);
|
||||||
QString getAnnotation() const { return annotation; }
|
QString getAnnotation() const { return annotation; }
|
||||||
void setAnnotation(const QString &_annotation);
|
void setAnnotation(const QString &_annotation);
|
||||||
|
bool getDoesntUntap() const { return doesntUntap; }
|
||||||
|
void setDoesntUntap(bool _doesntUntap);
|
||||||
void resetState();
|
void resetState();
|
||||||
|
|
||||||
CardDragItem *createDragItem(CardZone *startZone, int _id, const QPointF &_pos, const QPointF &_scenePos);
|
CardDragItem *createDragItem(CardZone *startZone, int _id, const QPointF &_pos, const QPointF &_scenePos, bool faceDown);
|
||||||
void deleteDragItem();
|
void deleteDragItem();
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
||||||
|
|
|
@ -56,14 +56,17 @@ CardItem *CardZone::getCard(int cardId, const QString &cardName)
|
||||||
|
|
||||||
CardItem *CardZone::takeCard(int position, int cardId, const QString &cardName)
|
CardItem *CardZone::takeCard(int position, int cardId, const QString &cardName)
|
||||||
{
|
{
|
||||||
|
if (position >= cards->size())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
CardItem *c = cards->takeAt(position);
|
CardItem *c = cards->takeAt(position);
|
||||||
for (int i = 0; i < views.size(); i++)
|
for (int i = 0; i < views.size(); i++)
|
||||||
views[i]->removeCard(position);
|
views[i]->removeCard(position);
|
||||||
|
|
||||||
if (c->getId() == -1) {
|
// if (c->getId() == -1) {
|
||||||
c->setId(cardId);
|
c->setId(cardId);
|
||||||
c->setName(cardName);
|
c->setName(cardName);
|
||||||
}
|
// }
|
||||||
reorganizeCards();
|
reorganizeCards();
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
enum { Type = typeZone };
|
enum { Type = typeZone };
|
||||||
int type() const { return Type; }
|
int type() const { return Type; }
|
||||||
virtual void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint) = 0;
|
virtual void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown) = 0;
|
||||||
CardZone(Player *_player, const QString &_name, QGraphicsItem *parent = 0, bool isView = false);
|
CardZone(Player *_player, const QString &_name, QGraphicsItem *parent = 0, bool isView = false);
|
||||||
~CardZone();
|
~CardZone();
|
||||||
void clearContents();
|
void clearContents();
|
||||||
|
|
|
@ -254,11 +254,11 @@ int Client::drawCards(unsigned int number)
|
||||||
return cmd(QString("draw_cards|%1").arg(number));
|
return cmd(QString("draw_cards|%1").arg(number));
|
||||||
}
|
}
|
||||||
|
|
||||||
int Client::moveCard(int cardid, const QString &startzone, const QString &targetzone, int x, int y)
|
int Client::moveCard(int cardid, const QString &startzone, const QString &targetzone, int x, int y, bool faceDown)
|
||||||
{
|
{
|
||||||
// if startzone is public: cardid is the card's id
|
// if startzone is public: cardid is the card's id
|
||||||
// else: cardid is the position of the card in the zone (e.g. deck)
|
// else: cardid is the position of the card in the zone (e.g. deck)
|
||||||
return cmd(QString("move_card|%1|%2|%3|%4|%5").arg(cardid).arg(startzone).arg(targetzone).arg(x).arg(y));
|
return cmd(QString("move_card|%1|%2|%3|%4|%5|%6").arg(cardid).arg(startzone).arg(targetzone).arg(x).arg(y).arg(faceDown ? 1 : 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
int Client::createToken(const QString &zone, const QString &name, const QString &powtough, int x, int y)
|
int Client::createToken(const QString &zone, const QString &name, const QString &powtough, int x, int y)
|
||||||
|
|
|
@ -70,7 +70,7 @@ public:
|
||||||
int shuffle();
|
int shuffle();
|
||||||
int rollDice(unsigned int sides);
|
int rollDice(unsigned int sides);
|
||||||
int drawCards(unsigned int number);
|
int drawCards(unsigned int number);
|
||||||
int moveCard(int cardid, const QString &startzone, const QString &targetzone, int x, int y = 0);
|
int moveCard(int cardid, const QString &startzone, const QString &targetzone, int x, int y = 0, bool faceDown = false);
|
||||||
int createToken(const QString &zone, const QString &name, const QString &powtough, int x, int y);
|
int createToken(const QString &zone, const QString &name, const QString &powtough, int x, int y);
|
||||||
int setCardAttr(const QString &zone, int cardid, const QString &aname, const QString &avalue);
|
int setCardAttr(const QString &zone, int cardid, const QString &aname, const QString &avalue);
|
||||||
int readyStart();
|
int readyStart();
|
||||||
|
|
|
@ -66,6 +66,8 @@ Game::Game(CardDatabase *_db, Client *_client, QGraphicsScene *_scene, QMenu *_a
|
||||||
connect(aTap, SIGNAL(triggered()), this, SLOT(actTap()));
|
connect(aTap, SIGNAL(triggered()), this, SLOT(actTap()));
|
||||||
aUntap = new QAction(tr("&Untap"), this);
|
aUntap = new QAction(tr("&Untap"), this);
|
||||||
connect(aUntap, SIGNAL(triggered()), this, SLOT(actUntap()));
|
connect(aUntap, SIGNAL(triggered()), this, SLOT(actUntap()));
|
||||||
|
aDoesntUntap = new QAction(tr("Toggle &normal untapping"), this);
|
||||||
|
connect(aDoesntUntap, SIGNAL(triggered()), this, SLOT(actDoesntUntap()));
|
||||||
aAddCounter = new QAction(tr("&Add counter"), this);
|
aAddCounter = new QAction(tr("&Add counter"), this);
|
||||||
connect(aAddCounter, SIGNAL(triggered()), this, SLOT(actAddCounter()));
|
connect(aAddCounter, SIGNAL(triggered()), this, SLOT(actAddCounter()));
|
||||||
aRemoveCounter = new QAction(tr("&Remove counter"), this);
|
aRemoveCounter = new QAction(tr("&Remove counter"), this);
|
||||||
|
@ -77,6 +79,8 @@ Game::Game(CardDatabase *_db, Client *_client, QGraphicsScene *_scene, QMenu *_a
|
||||||
|
|
||||||
cardMenu->addAction(aTap);
|
cardMenu->addAction(aTap);
|
||||||
cardMenu->addAction(aUntap);
|
cardMenu->addAction(aUntap);
|
||||||
|
cardMenu->addAction(aDoesntUntap);
|
||||||
|
cardMenu->addSeparator();
|
||||||
cardMenu->addAction(aAddCounter);
|
cardMenu->addAction(aAddCounter);
|
||||||
cardMenu->addAction(aRemoveCounter);
|
cardMenu->addAction(aRemoveCounter);
|
||||||
cardMenu->addAction(aSetCounters);
|
cardMenu->addAction(aSetCounters);
|
||||||
|
@ -108,6 +112,7 @@ Player *Game::addPlayer(int playerId, const QString &playerName, QPointF base, b
|
||||||
connect(newPlayer, SIGNAL(logSetCardCounters(QString, QString, int, int)), this, SIGNAL(logSetCardCounters(QString, QString, int, int)));
|
connect(newPlayer, SIGNAL(logSetCardCounters(QString, QString, int, int)), this, SIGNAL(logSetCardCounters(QString, QString, int, int)));
|
||||||
connect(newPlayer, SIGNAL(logSetTapped(QString, QString, bool)), this, SIGNAL(logSetTapped(QString, QString, bool)));
|
connect(newPlayer, SIGNAL(logSetTapped(QString, QString, bool)), this, SIGNAL(logSetTapped(QString, QString, bool)));
|
||||||
connect(newPlayer, SIGNAL(logSetCounter(QString, QString, int, int)), this, SIGNAL(logSetCounter(QString, QString, int, int)));
|
connect(newPlayer, SIGNAL(logSetCounter(QString, QString, int, int)), this, SIGNAL(logSetCounter(QString, QString, int, int)));
|
||||||
|
connect(newPlayer, SIGNAL(logSetDoesntUntap(QString, QString, bool)), this, SIGNAL(logSetDoesntUntap(QString, QString, bool)));
|
||||||
|
|
||||||
players << newPlayer;
|
players << newPlayer;
|
||||||
emit playerAdded(newPlayer);
|
emit playerAdded(newPlayer);
|
||||||
|
@ -147,6 +152,7 @@ void Game::restartGameDialog()
|
||||||
|
|
||||||
void Game::gameEvent(ServerEventData *msg)
|
void Game::gameEvent(ServerEventData *msg)
|
||||||
{
|
{
|
||||||
|
qDebug(QString("game::gameEvent: public=%1, player=%2, name=%3, type=%4, data=%5").arg(msg->getPublic()).arg(msg->getPlayerId()).arg(msg->getPlayerName()).arg(msg->getEventType()).arg(msg->getEventData().join("/")).toLatin1());
|
||||||
if (!msg->getPublic())
|
if (!msg->getPublic())
|
||||||
localPlayer->gameEvent(msg);
|
localPlayer->gameEvent(msg);
|
||||||
else {
|
else {
|
||||||
|
@ -231,9 +237,7 @@ void Game::gameEvent(ServerEventData *msg)
|
||||||
|
|
||||||
void Game::actUntapAll()
|
void Game::actUntapAll()
|
||||||
{
|
{
|
||||||
CardList *const cards = localPlayer->getZones()->findZone("table")->getCards();
|
client->setCardAttr("table", -1, "tapped", "false");
|
||||||
for (int i = 0; i < cards->size(); i++)
|
|
||||||
client->setCardAttr("table", cards->at(i)->getId(), "tapped", "false");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::actIncLife()
|
void Game::actIncLife()
|
||||||
|
@ -308,6 +312,15 @@ void Game::actUntap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Game::actDoesntUntap()
|
||||||
|
{
|
||||||
|
QListIterator<QGraphicsItem *> i(scene->selectedItems());
|
||||||
|
while (i.hasNext()) {
|
||||||
|
CardItem *temp = (CardItem *) i.next();
|
||||||
|
client->setCardAttr(qgraphicsitem_cast<CardZone *>(temp->parentItem())->getName(), temp->getId(), "doesnt_untap", QString::number(!temp->getDoesntUntap()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Game::actAddCounter()
|
void Game::actAddCounter()
|
||||||
{
|
{
|
||||||
QListIterator<QGraphicsItem *> i(scene->selectedItems());
|
QListIterator<QGraphicsItem *> i(scene->selectedItems());
|
||||||
|
|
|
@ -15,7 +15,7 @@ class Game : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
private:
|
private:
|
||||||
QMenu *actionsMenu, *cardMenu;
|
QMenu *actionsMenu, *cardMenu;
|
||||||
QAction *aTap, *aUntap, *aAddCounter, *aRemoveCounter, *aSetCounters, *aRearrange,
|
QAction *aTap, *aUntap, *aDoesntUntap, *aAddCounter, *aRemoveCounter, *aSetCounters, *aRearrange,
|
||||||
*aUntapAll, *aDecLife, *aIncLife, *aSetLife, *aShuffle, *aDraw, *aDrawCards, *aRollDice, *aCreateToken;
|
*aUntapAll, *aDecLife, *aIncLife, *aSetLife, *aShuffle, *aDraw, *aDrawCards, *aRollDice, *aCreateToken;
|
||||||
DlgStartGame *dlgStartGame;
|
DlgStartGame *dlgStartGame;
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ private slots:
|
||||||
void showCardMenu(QPoint p);
|
void showCardMenu(QPoint p);
|
||||||
void actTap();
|
void actTap();
|
||||||
void actUntap();
|
void actUntap();
|
||||||
|
void actDoesntUntap();
|
||||||
void actAddCounter();
|
void actAddCounter();
|
||||||
void actRemoveCounter();
|
void actRemoveCounter();
|
||||||
void actSetCounters();
|
void actSetCounters();
|
||||||
|
@ -69,6 +70,7 @@ signals:
|
||||||
void logSetCardCounters(QString playerName, QString cardName, int value, int oldValue);
|
void logSetCardCounters(QString playerName, QString cardName, int value, int oldValue);
|
||||||
void logSetTapped(QString playerName, QString cardName, bool tapped);
|
void logSetTapped(QString playerName, QString cardName, bool tapped);
|
||||||
void logSetCounter(QString playerName, QString counterName, int value, int oldValue);
|
void logSetCounter(QString playerName, QString counterName, int value, int oldValue);
|
||||||
|
void logSetDoesntUntap(QString playerName, QString cardName, bool doesntUntap);
|
||||||
void logDumpZone(QString playerName, QString zoneName, QString zoneOwner, int numberCards);
|
void logDumpZone(QString playerName, QString zoneName, QString zoneOwner, int numberCards);
|
||||||
public slots:
|
public slots:
|
||||||
void restartGameDialog();
|
void restartGameDialog();
|
||||||
|
|
|
@ -48,7 +48,7 @@ void GraveZone::addCard(CardItem *card, bool reorganize, int x, int y)
|
||||||
reorganizeCards();
|
reorganizeCards();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GraveZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint)
|
void GraveZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown)
|
||||||
{
|
{
|
||||||
player->client->moveCard(cardId, startZone->getName(), getName(), 0, 0);
|
player->client->moveCard(cardId, startZone->getName(), getName(), 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -79,8 +79,9 @@ void GraveZone::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||||
if (cards->empty())
|
if (cards->empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
bool faceDown = event->modifiers().testFlag(Qt::ShiftModifier);
|
||||||
CardItem *card = cards->at(0);
|
CardItem *card = cards->at(0);
|
||||||
CardDragItem *drag = card->createDragItem(this, card->getId(), event->pos(), event->scenePos());
|
CardDragItem *drag = card->createDragItem(this, card->getId(), event->pos(), event->scenePos(), faceDown);
|
||||||
drag->grabMouse();
|
drag->grabMouse();
|
||||||
setCursor(Qt::OpenHandCursor);
|
setCursor(Qt::OpenHandCursor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ public:
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||||
void addCard(CardItem *card, bool reorganize = true, int x = 0, int y = -1);
|
void addCard(CardItem *card, bool reorganize = true, int x = 0, int y = -1);
|
||||||
void reorganizeCards();
|
void reorganizeCards();
|
||||||
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint);
|
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown);
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
||||||
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
||||||
|
|
|
@ -66,7 +66,7 @@ void HandZone::addCard(CardItem *card, bool reorganize, int x, int y)
|
||||||
reorganizeCards();
|
reorganizeCards();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint)
|
void HandZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown)
|
||||||
{
|
{
|
||||||
Q_UNUSED(dropPoint);
|
Q_UNUSED(dropPoint);
|
||||||
player->client->moveCard(cardId, startZone->getName(), getName(), cards->size(), 0);
|
player->client->moveCard(cardId, startZone->getName(), getName(), cards->size(), 0);
|
||||||
|
|
|
@ -11,7 +11,7 @@ public:
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||||
void addCard(CardItem *card, bool reorganize = true, int x = -1, int y = -1);
|
void addCard(CardItem *card, bool reorganize = true, int x = -1, int y = -1);
|
||||||
void reorganizeCards();
|
void reorganizeCards();
|
||||||
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint);
|
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -57,7 +57,7 @@ void LibraryZone::addCard(CardItem *card, bool reorganize, int x, int y)
|
||||||
reorganizeCards();
|
reorganizeCards();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LibraryZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint)
|
void LibraryZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown)
|
||||||
{
|
{
|
||||||
player->client->moveCard(cardId, startZone->getName(), getName(), 0, 0);
|
player->client->moveCard(cardId, startZone->getName(), getName(), 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -88,8 +88,9 @@ void LibraryZone::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||||
if (cards->empty())
|
if (cards->empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
bool faceDown = event->modifiers().testFlag(Qt::ShiftModifier);
|
||||||
CardItem *card = cards->at(0);
|
CardItem *card = cards->at(0);
|
||||||
CardDragItem *drag = card->createDragItem(this, 0, event->pos(), event->scenePos());
|
CardDragItem *drag = card->createDragItem(this, 0, event->pos(), event->scenePos(), faceDown);
|
||||||
drag->grabMouse();
|
drag->grabMouse();
|
||||||
setCursor(Qt::OpenHandCursor);
|
setCursor(Qt::OpenHandCursor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ public:
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||||
void addCard(CardItem *card, bool reorganize = true, int x = 0, int y = -1);
|
void addCard(CardItem *card, bool reorganize = true, int x = 0, int y = -1);
|
||||||
void reorganizeCards();
|
void reorganizeCards();
|
||||||
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint);
|
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown);
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
||||||
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
||||||
|
|
|
@ -112,6 +112,14 @@ void MessageLogWidget::logSetCounter(QString playerName, QString counterName, in
|
||||||
appendAndScroll(tr("%1 sets counter \"%2\" to %3 (%4%5)").arg(playerName).arg(counterName).arg(value).arg(value > oldValue ? "+" : "").arg(value - oldValue));
|
appendAndScroll(tr("%1 sets counter \"%2\" to %3 (%4%5)").arg(playerName).arg(counterName).arg(value).arg(value > oldValue ? "+" : "").arg(value - oldValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessageLogWidget::logSetDoesntUntap(QString playerName, QString cardName, bool doesntUntap)
|
||||||
|
{
|
||||||
|
if (doesntUntap)
|
||||||
|
appendAndScroll(tr("%1 sets %2 to not untap normally.").arg(playerName).arg(cardName));
|
||||||
|
else
|
||||||
|
appendAndScroll(tr("%1 sets %2 to untap normally.").arg(playerName).arg(cardName));
|
||||||
|
}
|
||||||
|
|
||||||
void MessageLogWidget::logDumpZone(QString playerName, QString zoneName, QString zoneOwner, int numberCards)
|
void MessageLogWidget::logDumpZone(QString playerName, QString zoneName, QString zoneOwner, int numberCards)
|
||||||
{
|
{
|
||||||
if (numberCards)
|
if (numberCards)
|
||||||
|
@ -137,6 +145,7 @@ void MessageLogWidget::connectToGame(Game *game)
|
||||||
connect(game, SIGNAL(logSetCardCounters(QString, QString, int, int)), this, SLOT(logSetCardCounters(QString, QString, int, int)));
|
connect(game, SIGNAL(logSetCardCounters(QString, QString, int, int)), this, SLOT(logSetCardCounters(QString, QString, int, int)));
|
||||||
connect(game, SIGNAL(logSetTapped(QString, QString, bool)), this, SLOT(logSetTapped(QString, QString, bool)));
|
connect(game, SIGNAL(logSetTapped(QString, QString, bool)), this, SLOT(logSetTapped(QString, QString, bool)));
|
||||||
connect(game, SIGNAL(logSetCounter(QString, QString, int, int)), this, SLOT(logSetCounter(QString, QString, int, int)));
|
connect(game, SIGNAL(logSetCounter(QString, QString, int, int)), this, SLOT(logSetCounter(QString, QString, int, int)));
|
||||||
|
connect(game, SIGNAL(logSetDoesntUntap(QString, QString, bool)), this, SLOT(logSetDoesntUntap(QString, QString, bool)));
|
||||||
connect(game, SIGNAL(logDumpZone(QString, QString, QString, int)), this, SLOT(logDumpZone(QString, QString, QString, int)));
|
connect(game, SIGNAL(logDumpZone(QString, QString, QString, int)), this, SLOT(logDumpZone(QString, QString, QString, int)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ private slots:
|
||||||
void logSetCardCounters(QString playerName, QString cardName, int value, int oldValue);
|
void logSetCardCounters(QString playerName, QString cardName, int value, int oldValue);
|
||||||
void logSetTapped(QString playerName, QString cardName, bool tapped);
|
void logSetTapped(QString playerName, QString cardName, bool tapped);
|
||||||
void logSetCounter(QString playerName, QString counterName, int value, int oldValue);
|
void logSetCounter(QString playerName, QString counterName, int value, int oldValue);
|
||||||
|
void logSetDoesntUntap(QString playerName, QString cardName, bool doesntUntap);
|
||||||
void logDumpZone(QString playerName, QString zoneName, QString zoneOwner, int numberCards);
|
void logDumpZone(QString playerName, QString zoneName, QString zoneOwner, int numberCards);
|
||||||
private:
|
private:
|
||||||
void appendAndScroll(const QString &s);
|
void appendAndScroll(const QString &s);
|
||||||
|
|
|
@ -128,6 +128,31 @@ void Player::addCounter(Counter *c)
|
||||||
counters << c;
|
counters << c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Player::setCardAttrHelper(CardItem *card, const QString &aname, const QString &avalue, bool allCards)
|
||||||
|
{
|
||||||
|
if (aname == "tapped") {
|
||||||
|
bool tapped = avalue == "1";
|
||||||
|
if (!(!tapped && card->getDoesntUntap() && allCards)) {
|
||||||
|
emit logSetTapped(name, card->getName(), tapped);
|
||||||
|
card->setTapped(tapped);
|
||||||
|
}
|
||||||
|
} else if (aname == "attacking")
|
||||||
|
card->setAttacking(avalue == "1");
|
||||||
|
else if (aname == "facedown")
|
||||||
|
card->setFaceDown(avalue == "1");
|
||||||
|
else if (aname == "counters") {
|
||||||
|
int value = avalue.toInt();
|
||||||
|
emit logSetCardCounters(name, card->getName(), value, card->getCounters());
|
||||||
|
card->setCounters(value);
|
||||||
|
} else if (aname == "annotation")
|
||||||
|
card->setAnnotation(avalue);
|
||||||
|
else if (aname == "doesnt_untap") {
|
||||||
|
bool value = (avalue == "1");
|
||||||
|
emit logSetDoesntUntap(name, card->getName(), value);
|
||||||
|
card->setDoesntUntap(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Player::gameEvent(ServerEventData *event)
|
void Player::gameEvent(ServerEventData *event)
|
||||||
{
|
{
|
||||||
QStringList data = event->getEventData();
|
QStringList data = event->getEventData();
|
||||||
|
@ -171,7 +196,7 @@ void Player::gameEvent(ServerEventData *event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case eventMoveCard: {
|
case eventMoveCard: {
|
||||||
if (data.size() != 7) {
|
if (data.size() != 8) {
|
||||||
qDebug("error");
|
qDebug("error");
|
||||||
// XXX
|
// XXX
|
||||||
}
|
}
|
||||||
|
@ -186,13 +211,16 @@ void Player::gameEvent(ServerEventData *event)
|
||||||
qDebug(QString("target zone invalid: %1").arg(data[4]).toLatin1());
|
qDebug(QString("target zone invalid: %1").arg(data[4]).toLatin1());
|
||||||
int x = data[5].toInt();
|
int x = data[5].toInt();
|
||||||
int y = data[6].toInt();
|
int y = data[6].toInt();
|
||||||
|
bool facedown = data[7].toInt();
|
||||||
// XXX Mehr Fehlerbehandlung
|
// XXX Mehr Fehlerbehandlung
|
||||||
|
|
||||||
CardItem *card = startZone->takeCard(position, cardId, cardName);
|
CardItem *card = startZone->takeCard(position, cardId, cardName);
|
||||||
if (!card) // XXX
|
if (!card) // XXX
|
||||||
qDebug("null");
|
qDebug("moveCard: card not found");
|
||||||
|
|
||||||
card->deleteDragItem();
|
card->deleteDragItem();
|
||||||
|
|
||||||
|
card->setFaceDown(facedown);
|
||||||
|
|
||||||
// The log event has to be sent before the card is added to the target zone
|
// The log event has to be sent before the card is added to the target zone
|
||||||
// because the addCard function can modify the card object.
|
// because the addCard function can modify the card object.
|
||||||
|
@ -227,25 +255,18 @@ void Player::gameEvent(ServerEventData *event)
|
||||||
}
|
}
|
||||||
CardZone *zone = zones.findZone(data[0]);
|
CardZone *zone = zones.findZone(data[0]);
|
||||||
int cardId = data[1].toInt();
|
int cardId = data[1].toInt();
|
||||||
CardItem *card = zone->getCard(cardId, "");
|
|
||||||
QString aname = data[2];
|
QString aname = data[2];
|
||||||
QString avalue = data[3];
|
QString avalue = data[3];
|
||||||
// XXX Fehlerbehandlung
|
// XXX Fehlerbehandlung
|
||||||
|
|
||||||
if (aname == "tapped") {
|
if (cardId == -1) {
|
||||||
bool tapped = avalue == "1";
|
CardList *const cards = zone->getCards();
|
||||||
emit logSetTapped(name, card->getName(), tapped);
|
for (int i = 0; i < cards->size(); i++)
|
||||||
card->setTapped(tapped);
|
setCardAttrHelper(cards->at(i), aname, avalue, true);
|
||||||
} else if (aname == "attacking")
|
} else {
|
||||||
card->setAttacking(avalue == "1");
|
CardItem *card = zone->getCard(cardId, "");
|
||||||
else if (aname == "facedown")
|
setCardAttrHelper(card, aname, avalue, false);
|
||||||
card->setFacedown(avalue == "1");
|
}
|
||||||
else if (aname == "counters") {
|
|
||||||
int value = avalue.toInt();
|
|
||||||
emit logSetCardCounters(name, card->getName(), value, card->getCounters());
|
|
||||||
card->setCounters(value);
|
|
||||||
} else if (aname == "annotation")
|
|
||||||
card->setAnnotation(avalue);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case eventSetCounter: {
|
case eventSetCounter: {
|
||||||
|
|
|
@ -26,6 +26,7 @@ signals:
|
||||||
void logSetCardCounters(QString playerName, QString cardName, int value, int oldValue);
|
void logSetCardCounters(QString playerName, QString cardName, int value, int oldValue);
|
||||||
void logSetTapped(QString playerName, QString cardName, bool tapped);
|
void logSetTapped(QString playerName, QString cardName, bool tapped);
|
||||||
void logSetCounter(QString playerName, QString counterName, int value, int oldValue);
|
void logSetCounter(QString playerName, QString counterName, int value, int oldValue);
|
||||||
|
void logSetDoesntUntap(QString playerName, QString cardName, bool doesntUntap);
|
||||||
private slots:
|
private slots:
|
||||||
void actMoveHandToTopLibrary();
|
void actMoveHandToTopLibrary();
|
||||||
void actMoveHandToBottomLibrary();
|
void actMoveHandToBottomLibrary();
|
||||||
|
@ -53,6 +54,7 @@ private:
|
||||||
ZoneList zones;
|
ZoneList zones;
|
||||||
CounterList counters;
|
CounterList counters;
|
||||||
CardDatabase *db;
|
CardDatabase *db;
|
||||||
|
void setCardAttrHelper(CardItem *card, const QString &aname, const QString &avalue, bool allCards);
|
||||||
public:
|
public:
|
||||||
Client *client;
|
Client *client;
|
||||||
void addZone(CardZone *z);
|
void addZone(CardZone *z);
|
||||||
|
|
|
@ -48,7 +48,7 @@ void RfgZone::addCard(CardItem *card, bool reorganize, int x, int y)
|
||||||
reorganizeCards();
|
reorganizeCards();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RfgZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint)
|
void RfgZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown)
|
||||||
{
|
{
|
||||||
player->client->moveCard(cardId, startZone->getName(), getName(), 0, 0);
|
player->client->moveCard(cardId, startZone->getName(), getName(), 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -79,8 +79,9 @@ void RfgZone::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
|
||||||
if (cards->empty())
|
if (cards->empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
bool faceDown = event->modifiers().testFlag(Qt::ShiftModifier);
|
||||||
CardItem *card = cards->at(0);
|
CardItem *card = cards->at(0);
|
||||||
CardDragItem *drag = card->createDragItem(this, card->getId(), event->pos(), event->scenePos());
|
CardDragItem *drag = card->createDragItem(this, card->getId(), event->pos(), event->scenePos(), faceDown);
|
||||||
drag->grabMouse();
|
drag->grabMouse();
|
||||||
setCursor(Qt::OpenHandCursor);
|
setCursor(Qt::OpenHandCursor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ public:
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||||
void addCard(CardItem *card, bool reorganize = true, int x = 0, int y = -1);
|
void addCard(CardItem *card, bool reorganize = true, int x = 0, int y = -1);
|
||||||
void reorganizeCards();
|
void reorganizeCards();
|
||||||
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint);
|
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown);
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
||||||
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
||||||
|
|
|
@ -42,7 +42,7 @@ void SideboardZone::addCard(CardItem *card, bool reorganize, int x, int y)
|
||||||
reorganizeCards();
|
reorganizeCards();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SideboardZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint)
|
void SideboardZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown)
|
||||||
{
|
{
|
||||||
player->client->moveCard(cardId, startZone->getName(), getName(), 0, 0);
|
player->client->moveCard(cardId, startZone->getName(), getName(), 0, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ public:
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||||
void addCard(CardItem *card, bool reorganize = true, int x = 0, int y = -1);
|
void addCard(CardItem *card, bool reorganize = true, int x = 0, int y = -1);
|
||||||
void reorganizeCards();
|
void reorganizeCards();
|
||||||
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint);
|
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -31,17 +31,16 @@ void TableZone::addCard(CardItem *card, bool reorganize, int x, int y)
|
||||||
y = height - CARD_HEIGHT - y;
|
y = height - CARD_HEIGHT - y;
|
||||||
card->setPos(x, y);
|
card->setPos(x, y);
|
||||||
}
|
}
|
||||||
qDebug(QString("zValue = %1, x = %2, y = %3").arg((y + CARD_HEIGHT) * width + x + 1000).arg(x).arg(y).toLatin1());
|
|
||||||
card->setZValue((y + CARD_HEIGHT) * width + x + 1000);
|
card->setZValue((y + CARD_HEIGHT) * width + x + 1000);
|
||||||
|
qDebug(QString("table: appended %1 at pos %2: zValue = %3, x = %4, y = %5").arg(card->getName()).arg(cards->size() - 1).arg(card->zValue()).arg(x).arg(y).toLatin1());
|
||||||
card->setParentItem(this);
|
card->setParentItem(this);
|
||||||
card->setVisible(true);
|
card->setVisible(true);
|
||||||
card->update(card->boundingRect());
|
card->update(card->boundingRect());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TableZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint)
|
void TableZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown)
|
||||||
{
|
{
|
||||||
player->client->moveCard(cardId, startZone->getName(), getName(), dropPoint.x(), dropPoint.y());
|
player->client->moveCard(cardId, startZone->getName(), getName(), dropPoint.x(), dropPoint.y(), faceDown);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TableZone::reorganizeCards()
|
void TableZone::reorganizeCards()
|
||||||
|
|
|
@ -16,7 +16,7 @@ public:
|
||||||
void addCard(CardItem *card, bool reorganize = true, int x = -1, int y = -1);
|
void addCard(CardItem *card, bool reorganize = true, int x = -1, int y = -1);
|
||||||
void reorganizeCards();
|
void reorganizeCards();
|
||||||
void toggleTapped();
|
void toggleTapped();
|
||||||
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint);
|
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -17,7 +17,6 @@ WndDeckEditor::WndDeckEditor(CardDatabase *_db, QWidget *parent)
|
||||||
deckModel = new DeckListModel(db, this);
|
deckModel = new DeckListModel(db, this);
|
||||||
deckView = new QTreeView();
|
deckView = new QTreeView();
|
||||||
deckView->setModel(deckModel);
|
deckView->setModel(deckModel);
|
||||||
// deckView->setSortingEnabled(true);
|
|
||||||
connect(deckView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateCardInfoRight(const QModelIndex &, const QModelIndex &)));
|
connect(deckView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateCardInfoRight(const QModelIndex &, const QModelIndex &)));
|
||||||
|
|
||||||
cardInfo = new CardInfoWidget(db);
|
cardInfo = new CardInfoWidget(db);
|
||||||
|
@ -99,6 +98,8 @@ void WndDeckEditor::actSaveDeck()
|
||||||
void WndDeckEditor::actSaveDeckAs()
|
void WndDeckEditor::actSaveDeckAs()
|
||||||
{
|
{
|
||||||
QString fileName = QFileDialog::getSaveFileName(this, tr("Save deck as"), QString(), tr("Deck files (*.dec)"));
|
QString fileName = QFileDialog::getSaveFileName(this, tr("Save deck as"), QString(), tr("Deck files (*.dec)"));
|
||||||
|
if (fileName.isEmpty())
|
||||||
|
return;
|
||||||
if (!fileName.endsWith(".dec"))
|
if (!fileName.endsWith(".dec"))
|
||||||
fileName.append(".dec");
|
fileName.append(".dec");
|
||||||
if (deckModel->saveToFile(fileName))
|
if (deckModel->saveToFile(fileName))
|
||||||
|
|
|
@ -85,7 +85,7 @@ void ZoneViewZone::addCard(CardItem *card, bool reorganize, int x, int y)
|
||||||
reorganizeCards();
|
reorganizeCards();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZoneViewZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint)
|
void ZoneViewZone::handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown)
|
||||||
{
|
{
|
||||||
Q_UNUSED(dropPoint);
|
Q_UNUSED(dropPoint);
|
||||||
qDebug(QString("handleDropEvent id=%1").arg(cardId).toLatin1());
|
qDebug(QString("handleDropEvent id=%1").arg(cardId).toLatin1());
|
||||||
|
|
|
@ -9,7 +9,7 @@ class ZoneViewWidget;
|
||||||
class ZoneViewZone : public CardZone {
|
class ZoneViewZone : public CardZone {
|
||||||
private:
|
private:
|
||||||
int numberCards;
|
int numberCards;
|
||||||
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint);
|
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown);
|
||||||
CardZone *origZone;
|
CardZone *origZone;
|
||||||
signals:
|
signals:
|
||||||
void removeZoneViewWidget(ZoneViewWidget *zv);
|
void removeZoneViewWidget(ZoneViewWidget *zv);
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#include "playerzone.h"
|
#include "playerzone.h"
|
||||||
|
|
||||||
PlayerZone::PlayerZone(QString _name, bool _has_coords, bool _is_public, bool _id_access)
|
PlayerZone::PlayerZone(QString _name, bool _has_coords, bool _is_public, bool _is_private, bool _id_access)
|
||||||
: name(_name), has_coords(_has_coords), is_public(_is_public), id_access(_id_access)
|
: name(_name), has_coords(_has_coords), is_public(_is_public), is_private(_is_private), id_access(_id_access)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,8 @@ class PlayerZone {
|
||||||
private:
|
private:
|
||||||
QString name;
|
QString name;
|
||||||
bool has_coords;
|
bool has_coords;
|
||||||
bool is_public; // Contents of the zone are visible for anyone
|
bool is_public; // Contents of the zone are always visible to anyone
|
||||||
|
bool is_private; // Contents of the zone are always visible to the owner
|
||||||
bool id_access; // getCard() finds by id, not by list index
|
bool id_access; // getCard() finds by id, not by list index
|
||||||
// Example: When moving a card from the library to the table,
|
// Example: When moving a card from the library to the table,
|
||||||
// the card has to be found by list index because the client
|
// the card has to be found by list index because the client
|
||||||
|
@ -36,12 +37,13 @@ private:
|
||||||
// to the table, the card can be found by id because the client
|
// to the table, the card can be found by id because the client
|
||||||
// knows the id and the hand does not need to have a specific order.
|
// knows the id and the hand does not need to have a specific order.
|
||||||
public:
|
public:
|
||||||
PlayerZone(QString _name, bool _has_coords, bool _is_public, bool _id_access);
|
PlayerZone(QString _name, bool _has_coords, bool _is_public, bool _is_private, bool _id_access);
|
||||||
~PlayerZone();
|
~PlayerZone();
|
||||||
|
|
||||||
TestCard *getCard(int id, bool remove, int *position = NULL);
|
TestCard *getCard(int id, bool remove, int *position = NULL);
|
||||||
|
|
||||||
bool isPublic() { return is_public; }
|
bool isPublic() { return is_public; }
|
||||||
|
bool isPrivate() { return is_private; }
|
||||||
bool hasCoords() { return has_coords; }
|
bool hasCoords() { return has_coords; }
|
||||||
bool hasIdAccess() { return id_access; }
|
bool hasIdAccess() { return id_access; }
|
||||||
QString getName() { return name; }
|
QString getName() { return name; }
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include "testcard.h"
|
#include "testcard.h"
|
||||||
|
|
||||||
TestCard::TestCard(QString _name, int _id, int _coord_x, int _coord_y)
|
TestCard::TestCard(QString _name, int _id, int _coord_x, int _coord_y)
|
||||||
: id(_id), coord_x(_coord_x), coord_y(_coord_y), name(_name), counters(0), tapped(false), attacking(false)
|
: id(_id), coord_x(_coord_x), coord_y(_coord_y), name(_name), counters(0), tapped(false), attacking(false), facedown(false), annotation(QString()), doesntUntap(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,10 +36,11 @@ void TestCard::resetState()
|
||||||
setTapped(false);
|
setTapped(false);
|
||||||
setAttacking(false);
|
setAttacking(false);
|
||||||
setFaceDown(false);
|
setFaceDown(false);
|
||||||
setAnnotation("");
|
setAnnotation(QString());
|
||||||
|
setDoesntUntap(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TestCard::setAttribute(const QString &aname, const QString &avalue)
|
bool TestCard::setAttribute(const QString &aname, const QString &avalue, bool allCards)
|
||||||
{
|
{
|
||||||
if (!aname.compare("counters")) {
|
if (!aname.compare("counters")) {
|
||||||
bool ok;
|
bool ok;
|
||||||
|
@ -48,13 +49,17 @@ bool TestCard::setAttribute(const QString &aname, const QString &avalue)
|
||||||
return false;
|
return false;
|
||||||
setCounters(tmp_int);
|
setCounters(tmp_int);
|
||||||
} else if (!aname.compare("tapped")) {
|
} else if (!aname.compare("tapped")) {
|
||||||
setTapped(!avalue.compare("1"));
|
bool value = !avalue.compare("1");
|
||||||
|
if (!(!value && allCards && doesntUntap))
|
||||||
|
setTapped(value);
|
||||||
} else if (!aname.compare("attacking")) {
|
} else if (!aname.compare("attacking")) {
|
||||||
setAttacking(!avalue.compare("1"));
|
setAttacking(!avalue.compare("1"));
|
||||||
} else if (!aname.compare("facedown")) {
|
} else if (!aname.compare("facedown")) {
|
||||||
setFaceDown(!avalue.compare("1"));
|
setFaceDown(!avalue.compare("1"));
|
||||||
} else if (!aname.compare("annotation")) {
|
} else if (!aname.compare("annotation")) {
|
||||||
setAnnotation(avalue);
|
setAnnotation(avalue);
|
||||||
|
} else if (!aname.compare("doesnt_untap")) {
|
||||||
|
setDoesntUntap(!avalue.compare("1"));
|
||||||
} else
|
} else
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -21,9 +21,7 @@
|
||||||
#define TESTCARD_H
|
#define TESTCARD_H
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
/**
|
|
||||||
@author Max-Wilhelm Bruker <brukie@laptop>
|
|
||||||
*/
|
|
||||||
class TestCard {
|
class TestCard {
|
||||||
private:
|
private:
|
||||||
int id;
|
int id;
|
||||||
|
@ -34,6 +32,7 @@ private:
|
||||||
bool attacking;
|
bool attacking;
|
||||||
bool facedown;
|
bool facedown;
|
||||||
QString annotation;
|
QString annotation;
|
||||||
|
bool doesntUntap;
|
||||||
public:
|
public:
|
||||||
TestCard(QString _name, int _id, int _coord_x, int _coord_y);
|
TestCard(QString _name, int _id, int _coord_x, int _coord_y);
|
||||||
~TestCard();
|
~TestCard();
|
||||||
|
@ -47,7 +46,9 @@ public:
|
||||||
bool getAttacking() { return attacking; }
|
bool getAttacking() { return attacking; }
|
||||||
bool getFaceDown() { return facedown; }
|
bool getFaceDown() { return facedown; }
|
||||||
QString getAnnotation() { return annotation; }
|
QString getAnnotation() { return annotation; }
|
||||||
|
bool getDoesntUntap() { return doesntUntap; }
|
||||||
|
|
||||||
|
void setId(int _id) { id = _id; }
|
||||||
void setCoords(int x, int y) { coord_x = x; coord_y = y; }
|
void setCoords(int x, int y) { coord_x = x; coord_y = y; }
|
||||||
void setName(const QString &_name) { name = _name; }
|
void setName(const QString &_name) { name = _name; }
|
||||||
void setCounters(int _counters) { counters = _counters; }
|
void setCounters(int _counters) { counters = _counters; }
|
||||||
|
@ -55,9 +56,10 @@ public:
|
||||||
void setAttacking(bool _attacking) { attacking = _attacking; }
|
void setAttacking(bool _attacking) { attacking = _attacking; }
|
||||||
void setFaceDown(bool _facedown) { facedown = _facedown; }
|
void setFaceDown(bool _facedown) { facedown = _facedown; }
|
||||||
void setAnnotation(const QString &_annotation) { annotation = _annotation; }
|
void setAnnotation(const QString &_annotation) { annotation = _annotation; }
|
||||||
|
void setDoesntUntap(bool _doesntUntap) { doesntUntap = _doesntUntap; }
|
||||||
|
|
||||||
void resetState();
|
void resetState();
|
||||||
bool setAttribute(const QString &aname, const QString &avalue);
|
bool setAttribute(const QString &aname, const QString &avalue, bool allCards);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -42,6 +42,11 @@ TestServerSocket::~TestServerSocket()
|
||||||
game->removePlayer(this);
|
game->removePlayer(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TestServerSocket::newCardId()
|
||||||
|
{
|
||||||
|
return nextCardId++;
|
||||||
|
}
|
||||||
|
|
||||||
void TestServerSocket::setName(const QString &name)
|
void TestServerSocket::setName(const QString &name)
|
||||||
{
|
{
|
||||||
emit broadcastEvent(QString("name|%1|%2").arg(PlayerName).arg(name), this);
|
emit broadcastEvent(QString("name|%1|%2").arg(PlayerName).arg(name), this);
|
||||||
|
@ -79,14 +84,14 @@ void TestServerSocket::setupZones()
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
// Create zones
|
// Create zones
|
||||||
PlayerZone *deck = new PlayerZone("deck", false, false, false);
|
PlayerZone *deck = new PlayerZone("deck", false, false, false, false);
|
||||||
zones << deck;
|
zones << deck;
|
||||||
PlayerZone *sb = new PlayerZone("sb", false, false, false);
|
PlayerZone *sb = new PlayerZone("sb", false, false, false, false);
|
||||||
zones << sb;
|
zones << sb;
|
||||||
zones << new PlayerZone("table", true, true, true);
|
zones << new PlayerZone("table", true, true, false, true);
|
||||||
zones << new PlayerZone("hand", false, false, true);
|
zones << new PlayerZone("hand", false, false, true, true);
|
||||||
zones << new PlayerZone("grave", false, true, true);
|
zones << new PlayerZone("grave", false, true, false, true);
|
||||||
zones << new PlayerZone("rfg", false, true, true);
|
zones << new PlayerZone("rfg", false, true, false, true);
|
||||||
|
|
||||||
// Create life counter
|
// Create life counter
|
||||||
Counter *life = new Counter("life", 20);
|
Counter *life = new Counter("life", 20);
|
||||||
|
@ -301,8 +306,8 @@ bool TestServerSocket::parseCommand(QString line)
|
||||||
|
|
||||||
emit broadcastEvent(QString("draw|%1").arg(number), this);
|
emit broadcastEvent(QString("draw|%1").arg(number), this);
|
||||||
} else if (!cmd.compare("move_card", Qt::CaseInsensitive)) {
|
} else if (!cmd.compare("move_card", Qt::CaseInsensitive)) {
|
||||||
// ID Karte, Startzone, Zielzone, Koordinaten X, Y
|
// ID Karte, Startzone, Zielzone, Koordinaten X, Y, Facedown
|
||||||
if (params.size() != 5)
|
if (params.size() != 6)
|
||||||
return remsg->send("syntax", false);
|
return remsg->send("syntax", false);
|
||||||
bool ok;
|
bool ok;
|
||||||
int cardid = params[0].toInt(&ok);
|
int cardid = params[0].toInt(&ok);
|
||||||
|
@ -326,26 +331,43 @@ bool TestServerSocket::parseCommand(QString line)
|
||||||
if (!ok)
|
if (!ok)
|
||||||
return remsg->send("syntax", false);
|
return remsg->send("syntax", false);
|
||||||
}
|
}
|
||||||
targetzone->insertCard(card, x, y);
|
bool facedown = params[5].toInt(&ok);
|
||||||
|
if (!ok)
|
||||||
|
return remsg->send("syntax", false);
|
||||||
remsg->send();
|
remsg->send();
|
||||||
msg(QString("private|||move_card|%1|%2|%3|%4|%5|%6|%7").arg(card->getId())
|
targetzone->insertCard(card, x, y);
|
||||||
.arg(card->getName())
|
|
||||||
|
QString privateCardName, publicCardName;
|
||||||
|
if (facedown)
|
||||||
|
card->setId(newCardId());
|
||||||
|
if ((!facedown && !card->getFaceDown())
|
||||||
|
|| (card->getFaceDown() && !facedown && startzone->isPublic() && targetzone->isPublic()))
|
||||||
|
publicCardName = card->getName();
|
||||||
|
if ((!facedown && !card->getFaceDown())
|
||||||
|
|| (card->getFaceDown() && !facedown && startzone->isPublic() && targetzone->isPublic())
|
||||||
|
|| (!facedown && targetzone->isPrivate()))
|
||||||
|
privateCardName = card->getName();
|
||||||
|
|
||||||
|
card->setFaceDown(facedown);
|
||||||
|
msg(QString("private|||move_card|%1|%2|%3|%4|%5|%6|%7|%8").arg(card->getId())
|
||||||
|
.arg(privateCardName)
|
||||||
.arg(startzone->getName())
|
.arg(startzone->getName())
|
||||||
.arg(position)
|
.arg(position)
|
||||||
.arg(targetzone->getName())
|
.arg(targetzone->getName())
|
||||||
.arg(x)
|
.arg(x)
|
||||||
.arg(y));
|
.arg(y)
|
||||||
// Was ist mit Facedown-Karten?
|
.arg(facedown ? 1 : 0));
|
||||||
if ((startzone->isPublic()) || (targetzone->isPublic()))
|
if ((startzone->isPublic()) || (targetzone->isPublic()))
|
||||||
emit broadcastEvent(QString("move_card|%1|%2|%3|%4|%5|%6|%7").arg(card->getId())
|
emit broadcastEvent(QString("move_card|%1|%2|%3|%4|%5|%6|%7|%8").arg(card->getId())
|
||||||
.arg(card->getName())
|
.arg(publicCardName)
|
||||||
.arg(startzone->getName())
|
.arg(startzone->getName())
|
||||||
.arg(position)
|
.arg(position)
|
||||||
.arg(targetzone->getName())
|
.arg(targetzone->getName())
|
||||||
.arg(x)
|
.arg(x)
|
||||||
.arg(y), this);
|
.arg(y)
|
||||||
|
.arg(facedown ? 1 : 0), this);
|
||||||
else
|
else
|
||||||
emit broadcastEvent(QString("move_card|||%1|%2|%3|%4|%5").arg(startzone->getName())
|
emit broadcastEvent(QString("move_card|||%1|%2|%3|%4|%5|0").arg(startzone->getName())
|
||||||
.arg(position)
|
.arg(position)
|
||||||
.arg(targetzone->getName())
|
.arg(targetzone->getName())
|
||||||
.arg(x)
|
.arg(x)
|
||||||
|
@ -361,7 +383,7 @@ bool TestServerSocket::parseCommand(QString line)
|
||||||
QString cardname = params[1];
|
QString cardname = params[1];
|
||||||
int x = params[3].toInt();
|
int x = params[3].toInt();
|
||||||
int y = params[4].toInt();
|
int y = params[4].toInt();
|
||||||
int cardid = nextCardId++;
|
int cardid = newCardId();
|
||||||
QString powtough = params[2];
|
QString powtough = params[2];
|
||||||
|
|
||||||
remsg->send();
|
remsg->send();
|
||||||
|
@ -389,13 +411,13 @@ bool TestServerSocket::parseCommand(QString line)
|
||||||
if (cardid == -1) {
|
if (cardid == -1) {
|
||||||
QListIterator<TestCard *> CardIterator(zone->cards);
|
QListIterator<TestCard *> CardIterator(zone->cards);
|
||||||
while (CardIterator.hasNext())
|
while (CardIterator.hasNext())
|
||||||
if (!CardIterator.next()->setAttribute(params[2], params[3]))
|
if (!CardIterator.next()->setAttribute(params[2], params[3], true))
|
||||||
return remsg->send("syntax", false);
|
return remsg->send("syntax", false);
|
||||||
} else {
|
} else {
|
||||||
TestCard *card = zone->getCard(cardid, false);
|
TestCard *card = zone->getCard(cardid, false);
|
||||||
if (!card)
|
if (!card)
|
||||||
return remsg->send("game_state", false);
|
return remsg->send("game_state", false);
|
||||||
if (!card->setAttribute(params[2], params[3]))
|
if (!card->setAttribute(params[2], params[3], false))
|
||||||
return remsg->send("syntax", false);
|
return remsg->send("syntax", false);
|
||||||
}
|
}
|
||||||
remsg->send();
|
remsg->send();
|
||||||
|
|
|
@ -54,6 +54,7 @@ private:
|
||||||
QList<Counter *> counters;
|
QList<Counter *> counters;
|
||||||
int PlayerId;
|
int PlayerId;
|
||||||
int nextCardId;
|
int nextCardId;
|
||||||
|
int newCardId();
|
||||||
PlayerZone *getZone(const QString &name);
|
PlayerZone *getZone(const QString &name);
|
||||||
Counter *getCounter(const QString &name);
|
Counter *getCounter(const QString &name);
|
||||||
void setName(const QString &name);
|
void setName(const QString &name);
|
||||||
|
|
|
@ -18,4 +18,4 @@
|
||||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
const char *VERSION_STRING = "Testserver 0.20090304";
|
const char *VERSION_STRING = "Testserver 0.20090407";
|
||||||
|
|
Loading…
Reference in a new issue