doubleclick on cards in hand
This commit is contained in:
parent
9749423d62
commit
44c64322d3
8 changed files with 91 additions and 15 deletions
|
@ -104,6 +104,18 @@ QString CardInfo::getMainCardType() const
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CardInfo::getTableRow() const
|
||||||
|
{
|
||||||
|
QString mainCardType = getMainCardType();
|
||||||
|
if (mainCardType == "Land")
|
||||||
|
return 0;
|
||||||
|
if ((mainCardType == "Sorcery") || (mainCardType == "Instant"))
|
||||||
|
return 2;
|
||||||
|
if (mainCardType == "Creature")
|
||||||
|
return 3;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void CardInfo::addToSet(CardSet *set)
|
void CardInfo::addToSet(CardSet *set)
|
||||||
{
|
{
|
||||||
set->append(this);
|
set->append(this);
|
||||||
|
@ -337,7 +349,6 @@ int CardDatabase::loadFromFile(const QString &fileName)
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
setHash.reserve(setCount);
|
setHash.reserve(setCount);
|
||||||
qDebug(QString("setCount = %1").arg(setCount).toLatin1());
|
|
||||||
for (unsigned int i = 0; i < setCount; i++) {
|
for (unsigned int i = 0; i < setCount; i++) {
|
||||||
CardSet *newSet = new CardSet;
|
CardSet *newSet = new CardSet;
|
||||||
newSet->loadFromStream(in);
|
newSet->loadFromStream(in);
|
||||||
|
|
|
@ -60,6 +60,7 @@ public:
|
||||||
QString getPowTough() const { return powtough; }
|
QString getPowTough() const { return powtough; }
|
||||||
QStringList getText() const { return text; }
|
QStringList getText() const { return text; }
|
||||||
QString getMainCardType() const;
|
QString getMainCardType() const;
|
||||||
|
int getTableRow() const;
|
||||||
void addToSet(CardSet *set);
|
void addToSet(CardSet *set);
|
||||||
QPixmap *loadPixmap();
|
QPixmap *loadPixmap();
|
||||||
QPixmap *getPixmap(QSize size);
|
QPixmap *getPixmap(QSize size);
|
||||||
|
|
|
@ -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)
|
||||||
: AbstractGraphicsItem(parent), db(_db), name(_name), id(_cardid), tapped(false), attacking(false), facedown(false), counters(0), doesntUntap(false), dragItem(NULL)
|
: AbstractGraphicsItem(parent), db(_db), info(db->getCard(_name)), name(_name), id(_cardid), tapped(false), attacking(false), facedown(false), counters(0), doesntUntap(false), dragItem(NULL)
|
||||||
{
|
{
|
||||||
setCursor(Qt::OpenHandCursor);
|
setCursor(Qt::OpenHandCursor);
|
||||||
setFlag(ItemIsSelectable);
|
setFlag(ItemIsSelectable);
|
||||||
|
@ -34,7 +34,7 @@ void CardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||||
QSizeF translatedSize = option->matrix.mapRect(boundingRect()).size();
|
QSizeF translatedSize = option->matrix.mapRect(boundingRect()).size();
|
||||||
if (tapped)
|
if (tapped)
|
||||||
translatedSize.transpose();
|
translatedSize.transpose();
|
||||||
QPixmap *translatedPixmap = db->getCard(name)->getPixmap(translatedSize.toSize());
|
QPixmap *translatedPixmap = info->getPixmap(translatedSize.toSize());
|
||||||
painter->save();
|
painter->save();
|
||||||
if (translatedPixmap) {
|
if (translatedPixmap) {
|
||||||
painter->resetTransform();
|
painter->resetTransform();
|
||||||
|
@ -70,6 +70,7 @@ void CardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||||
void CardItem::setName(const QString &_name)
|
void CardItem::setName(const QString &_name)
|
||||||
{
|
{
|
||||||
name = _name;
|
name = _name;
|
||||||
|
info = db->getCard(name);
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +129,7 @@ CardDragItem *CardItem::createDragItem(int _id, const QPointF &_pos, const QPoin
|
||||||
deleteDragItem();
|
deleteDragItem();
|
||||||
dragItem = new CardDragItem(this, _id, _pos, faceDown);
|
dragItem = new CardDragItem(this, _id, _pos, faceDown);
|
||||||
scene()->addItem(dragItem);
|
scene()->addItem(dragItem);
|
||||||
dragItem->updatePosition(_scenePos/* - dragItem->getHotSpot()*/);
|
dragItem->updatePosition(_scenePos);
|
||||||
|
|
||||||
return dragItem;
|
return dragItem;
|
||||||
}
|
}
|
||||||
|
@ -181,11 +182,6 @@ void CardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent */*event*/)
|
||||||
|
|
||||||
void CardItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
void CardItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
||||||
{
|
{
|
||||||
if (!isSelected()) {
|
|
||||||
// Unselect all items, then select this one
|
|
||||||
scene()->setSelectionArea(QPainterPath());
|
|
||||||
setSelected(true);
|
|
||||||
}
|
|
||||||
event->accept();
|
event->accept();
|
||||||
|
|
||||||
CardZone *zone = (CardZone *) parentItem();
|
CardZone *zone = (CardZone *) parentItem();
|
||||||
|
@ -193,7 +189,11 @@ void CardItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
||||||
if (!zone->getPlayer()->getLocal())
|
if (!zone->getPlayer()->getLocal())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (zone->getHasCardAttr())
|
if (zone->getName() == "hand") {
|
||||||
|
TableZone *table = (TableZone *) zone->getPlayer()->getZones()->findZone("table");
|
||||||
|
QPoint gridPoint = table->getFreeGridPoint(info->getTableRow());
|
||||||
|
table->handleDropEvent(id, zone, table->mapFromGrid(gridPoint).toPoint(), false);
|
||||||
|
} else if (zone->getName() == "table")
|
||||||
((TableZone *) zone)->toggleTapped();
|
((TableZone *) zone)->toggleTapped();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
class CardDatabase;
|
class CardDatabase;
|
||||||
class CardDragItem;
|
class CardDragItem;
|
||||||
class CardZone;
|
class CardZone;
|
||||||
|
class CardInfo;
|
||||||
|
|
||||||
const int CARD_WIDTH = 72;
|
const int CARD_WIDTH = 72;
|
||||||
const int CARD_HEIGHT = 102;
|
const int CARD_HEIGHT = 102;
|
||||||
|
@ -22,6 +23,7 @@ enum CardItemType {
|
||||||
class CardItem : public AbstractGraphicsItem {
|
class CardItem : public AbstractGraphicsItem {
|
||||||
private:
|
private:
|
||||||
CardDatabase *db;
|
CardDatabase *db;
|
||||||
|
CardInfo *info;
|
||||||
QString name;
|
QString name;
|
||||||
int id;
|
int id;
|
||||||
bool tapped;
|
bool tapped;
|
||||||
|
@ -30,6 +32,7 @@ private:
|
||||||
int counters;
|
int counters;
|
||||||
QString annotation;
|
QString annotation;
|
||||||
bool doesntUntap;
|
bool doesntUntap;
|
||||||
|
QPoint gridPoint;
|
||||||
CardDragItem *dragItem;
|
CardDragItem *dragItem;
|
||||||
public:
|
public:
|
||||||
enum { Type = typeCard };
|
enum { Type = typeCard };
|
||||||
|
@ -38,6 +41,8 @@ public:
|
||||||
~CardItem();
|
~CardItem();
|
||||||
QRectF boundingRect() const;
|
QRectF boundingRect() const;
|
||||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||||
|
QPoint getGridPoint() const { return gridPoint; }
|
||||||
|
void setGridPoint(const QPoint &_gridPoint) { gridPoint = _gridPoint; }
|
||||||
int getId() const { return id; }
|
int getId() const { return id; }
|
||||||
void setId(int _id) { id = _id; }
|
void setId(int _id) { id = _id; }
|
||||||
QString getName() const { return name; }
|
QString getName() const { return name; }
|
||||||
|
|
|
@ -11,7 +11,7 @@ HandZone::HandZone(Player *_p, QGraphicsItem *parent)
|
||||||
|
|
||||||
QRectF HandZone::boundingRect() const
|
QRectF HandZone::boundingRect() const
|
||||||
{
|
{
|
||||||
return QRectF(0, 0, 100, 510);
|
return QRectF(0, 0, 100, 578);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandZone::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/, QWidget */*widget*/)
|
void HandZone::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/, QWidget */*widget*/)
|
||||||
|
|
|
@ -4,9 +4,52 @@
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
|
|
||||||
TableZone::TableZone(Player *_p, QGraphicsItem *parent)
|
TableZone::TableZone(Player *_p, QGraphicsItem *parent)
|
||||||
: CardZone(_p, "table", true, false, parent), width(864), height(510)
|
: CardZone(_p, "table", true, false, parent), width(864), height(578)
|
||||||
{
|
{
|
||||||
cards = new CardList(true);
|
cards = new CardList(true);
|
||||||
|
|
||||||
|
gridPoints << (QList<QPoint>() << QPoint(8, 12)
|
||||||
|
<< QPoint(9, 13)
|
||||||
|
<< QPoint(10, 14)
|
||||||
|
<< QPoint(12, 12)
|
||||||
|
<< QPoint(13, 13)
|
||||||
|
<< QPoint(14, 14)
|
||||||
|
<< QPoint(4, 12)
|
||||||
|
<< QPoint(5, 13)
|
||||||
|
<< QPoint(6, 14)
|
||||||
|
<< QPoint(16, 12)
|
||||||
|
<< QPoint(17, 13)
|
||||||
|
<< QPoint(18, 14)
|
||||||
|
<< QPoint(0, 12)
|
||||||
|
<< QPoint(1, 13)
|
||||||
|
<< QPoint(2, 14)
|
||||||
|
<< QPoint(20, 12)
|
||||||
|
<< QPoint(21, 13)
|
||||||
|
<< QPoint(22, 14))
|
||||||
|
<< (QList<QPoint>() << QPoint(10, 8)
|
||||||
|
<< QPoint(13, 8)
|
||||||
|
<< QPoint(7, 8)
|
||||||
|
<< QPoint(16, 8)
|
||||||
|
<< QPoint(4, 8)
|
||||||
|
<< QPoint(19, 8)
|
||||||
|
<< QPoint(1, 8)
|
||||||
|
<< QPoint(22, 8))
|
||||||
|
<< (QList<QPoint>() << QPoint(10, 4)
|
||||||
|
<< QPoint(13, 4)
|
||||||
|
<< QPoint(7, 4)
|
||||||
|
<< QPoint(16, 4)
|
||||||
|
<< QPoint(4, 4)
|
||||||
|
<< QPoint(19, 4)
|
||||||
|
<< QPoint(1, 4)
|
||||||
|
<< QPoint(22, 4))
|
||||||
|
<< (QList<QPoint>() << QPoint(10, 0)
|
||||||
|
<< QPoint(13, 0)
|
||||||
|
<< QPoint(7, 0)
|
||||||
|
<< QPoint(16, 0)
|
||||||
|
<< QPoint(4, 0)
|
||||||
|
<< QPoint(19, 0)
|
||||||
|
<< QPoint(1, 0)
|
||||||
|
<< QPoint(22, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
QRectF TableZone::boundingRect() const
|
QRectF TableZone::boundingRect() const
|
||||||
|
@ -31,8 +74,8 @@ void TableZone::addCardImpl(CardItem *card, int _x, int _y)
|
||||||
y = height - CARD_HEIGHT - y;
|
y = height - CARD_HEIGHT - y;
|
||||||
card->setPos(x, y);
|
card->setPos(x, y);
|
||||||
// }
|
// }
|
||||||
|
card->setGridPoint(QPoint(_x, _y));
|
||||||
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->update();
|
||||||
|
@ -65,7 +108,10 @@ void TableZone::toggleTapped()
|
||||||
|
|
||||||
CardItem *TableZone::getCardFromGrid(const QPoint &gridPoint) const
|
CardItem *TableZone::getCardFromGrid(const QPoint &gridPoint) const
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < cards->size(); i++)
|
||||||
|
if (cards->at(i)->getGridPoint() == gridPoint)
|
||||||
|
return cards->at(i);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
QPointF TableZone::mapFromGrid(const QPoint &gridPoint) const
|
QPointF TableZone::mapFromGrid(const QPoint &gridPoint) const
|
||||||
|
@ -89,3 +135,14 @@ QPoint TableZone::mapToGrid(const QPointF &mapPoint) const
|
||||||
|
|
||||||
return QPoint(round(((double) x * gridPointsPerCardX) / CARD_WIDTH), round(((double) y * gridPointsPerCardY) / CARD_HEIGHT));
|
return QPoint(round(((double) x * gridPointsPerCardX) / CARD_WIDTH), round(((double) y * gridPointsPerCardY) / CARD_HEIGHT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QPoint TableZone::getFreeGridPoint(int row) const
|
||||||
|
{
|
||||||
|
Q_ASSERT(row < gridPoints.size());
|
||||||
|
|
||||||
|
QList<QPoint> pointList = gridPoints[row];
|
||||||
|
for (int i = 0; i < pointList.size(); i++)
|
||||||
|
if (!getCardFromGrid(pointList[i]))
|
||||||
|
return pointList[i];
|
||||||
|
return QPoint(0, 0);
|
||||||
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
class TableZone : public CardZone {
|
class TableZone : public CardZone {
|
||||||
private:
|
private:
|
||||||
int width, height;
|
int width, height;
|
||||||
|
QList<QList<QPoint> > gridPoints;
|
||||||
public:
|
public:
|
||||||
static const int gridPointsPerCardX = 2;
|
static const int gridPointsPerCardX = 2;
|
||||||
static const int gridPointsPerCardY = 3;
|
static const int gridPointsPerCardY = 3;
|
||||||
|
@ -19,6 +20,7 @@ public:
|
||||||
CardItem *getCardFromGrid(const QPoint &gridPoint) const;
|
CardItem *getCardFromGrid(const QPoint &gridPoint) const;
|
||||||
QPointF mapFromGrid(const QPoint &gridPoint) const;
|
QPointF mapFromGrid(const QPoint &gridPoint) const;
|
||||||
QPoint mapToGrid(const QPointF &mapPoint) const;
|
QPoint mapToGrid(const QPointF &mapPoint) const;
|
||||||
|
QPoint getFreeGridPoint(int row) const;
|
||||||
protected:
|
protected:
|
||||||
void addCardImpl(CardItem *card, int x, int y);
|
void addCardImpl(CardItem *card, int x, int y);
|
||||||
};
|
};
|
||||||
|
|
|
@ -232,7 +232,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||||
// db->importOracleDir();
|
// db->importOracleDir();
|
||||||
// db->saveToFile("../cards.dat");
|
// db->saveToFile("../cards.dat");
|
||||||
|
|
||||||
scene = new QGraphicsScene(0, 0, 1096, 1024, this);
|
scene = new QGraphicsScene(0, 0, 1096, 1160, this);
|
||||||
view = new GameView(scene);
|
view = new GameView(scene);
|
||||||
|
|
||||||
// view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
|
// view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
|
||||||
|
|
Loading…
Reference in a new issue