* Fix for #4284 -> The menus have the update menu thing emitted when they get triggered. | -> works surprising well https://youtu.be/KOOmhxvHA2c is a demo on a 10000ish card deck * changed my comment to make sense * fix to the issues that @ebbit1q found what caued them idk * Revert "fix to the issues that @ebbit1q found" This reverts commit 20b1ad9f7a675fd3b0d1be7452f71160ce06de71. * actual fix for the issues @ebbit1q found * its dirty but works * fix cards in zoneviews not having a menu * deleted isempty check as it is updated after the check * key binds should work now -> menus updated on zone change/attach/retranslate UI if selected * clangify * remove updateCardMenu from carditem entirely updateCardMenu is done by the player and having it in carditem led to it often being run multiple times, I've opted to instead run it in the player and remove the signal entirely the new logic updates the cardMenu every time a card is set as the activeCard in the game tab additionally a cardmenu can change while selected if the selected card: moves zone, is flipped, or is attached (it receives the unattach action) this is done in the player instead now, checking if the card is the activeCard this however exposes a flaw in the selection management where if you unselect a card the activeCard is set to nullptr, this was an existing bug and causes the action on selected cards to suddenly disappear, even if there are other cards selected! * revert null test of aCardMenu Co-authored-by: ebbit1q <ebbit1q@gmail.com>
168 lines
3.7 KiB
C++
168 lines
3.7 KiB
C++
#ifndef CARDITEM_H
|
|
#define CARDITEM_H
|
|
|
|
#include "abstractcarditem.h"
|
|
|
|
class CardDatabase;
|
|
class CardDragItem;
|
|
class CardZone;
|
|
class ServerInfo_Card;
|
|
class Player;
|
|
class QAction;
|
|
class QColor;
|
|
|
|
const int MAX_COUNTERS_ON_CARD = 999;
|
|
const float CARD_WIDTH_HALF = CARD_WIDTH / 2;
|
|
const float CARD_HEIGHT_HALF = CARD_HEIGHT / 2;
|
|
const int ROTATION_DEGREES_PER_FRAME = 10;
|
|
|
|
class CardItem : public AbstractCardItem
|
|
{
|
|
Q_OBJECT
|
|
private:
|
|
CardZone *zone;
|
|
bool revealedCard;
|
|
bool attacking;
|
|
QMap<int, int> counters;
|
|
QString annotation;
|
|
QString pt;
|
|
bool destroyOnZoneChange;
|
|
bool doesntUntap;
|
|
QPoint gridPoint;
|
|
CardDragItem *dragItem;
|
|
CardItem *attachedTo;
|
|
QList<CardItem *> attachedCards;
|
|
|
|
QMenu *cardMenu, *ptMenu, *moveMenu;
|
|
|
|
void prepareDelete();
|
|
public slots:
|
|
void deleteLater();
|
|
|
|
public:
|
|
enum
|
|
{
|
|
Type = typeCard
|
|
};
|
|
int type() const
|
|
{
|
|
return Type;
|
|
}
|
|
CardItem(Player *_owner,
|
|
const QString &_name = QString(),
|
|
int _cardid = -1,
|
|
bool revealedCard = false,
|
|
QGraphicsItem *parent = nullptr,
|
|
CardZone *_zone = nullptr);
|
|
~CardItem();
|
|
void retranslateUi();
|
|
CardZone *getZone() const
|
|
{
|
|
return zone;
|
|
}
|
|
void setZone(CardZone *_zone);
|
|
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
|
QPoint getGridPoint() const
|
|
{
|
|
return gridPoint;
|
|
}
|
|
void setGridPoint(const QPoint &_gridPoint)
|
|
{
|
|
gridPoint = _gridPoint;
|
|
}
|
|
QPoint getGridPos() const
|
|
{
|
|
return gridPoint;
|
|
}
|
|
Player *getOwner() const
|
|
{
|
|
return owner;
|
|
}
|
|
void setOwner(Player *_owner)
|
|
{
|
|
owner = _owner;
|
|
}
|
|
bool getRevealedCard() const
|
|
{
|
|
return revealedCard;
|
|
}
|
|
bool getAttacking() const
|
|
{
|
|
return attacking;
|
|
}
|
|
void setAttacking(bool _attacking);
|
|
const QMap<int, int> &getCounters() const
|
|
{
|
|
return counters;
|
|
}
|
|
void setCounter(int _id, int _value);
|
|
QString getAnnotation() const
|
|
{
|
|
return annotation;
|
|
}
|
|
void setAnnotation(const QString &_annotation);
|
|
bool getDoesntUntap() const
|
|
{
|
|
return doesntUntap;
|
|
}
|
|
void setDoesntUntap(bool _doesntUntap);
|
|
QString getPT() const
|
|
{
|
|
return pt;
|
|
}
|
|
void setPT(const QString &_pt);
|
|
bool getDestroyOnZoneChange() const
|
|
{
|
|
return destroyOnZoneChange;
|
|
}
|
|
void setDestroyOnZoneChange(bool _destroy)
|
|
{
|
|
destroyOnZoneChange = _destroy;
|
|
}
|
|
CardItem *getAttachedTo() const
|
|
{
|
|
return attachedTo;
|
|
}
|
|
void setAttachedTo(CardItem *_attachedTo);
|
|
void addAttachedCard(CardItem *card)
|
|
{
|
|
attachedCards.append(card);
|
|
}
|
|
void removeAttachedCard(CardItem *card)
|
|
{
|
|
attachedCards.removeAt(attachedCards.indexOf(card));
|
|
}
|
|
const QList<CardItem *> &getAttachedCards() const
|
|
{
|
|
return attachedCards;
|
|
}
|
|
void resetState();
|
|
void processCardInfo(const ServerInfo_Card &info);
|
|
|
|
QMenu *getCardMenu() const
|
|
{
|
|
return cardMenu;
|
|
}
|
|
QMenu *getPTMenu() const
|
|
{
|
|
return ptMenu;
|
|
}
|
|
QMenu *getMoveMenu() const
|
|
{
|
|
return moveMenu;
|
|
}
|
|
|
|
bool animationEvent();
|
|
CardDragItem *createDragItem(int _id, const QPointF &_pos, const QPointF &_scenePos, bool faceDown);
|
|
void deleteDragItem();
|
|
void drawArrow(const QColor &arrowColor);
|
|
void playCard(bool faceDown);
|
|
|
|
protected:
|
|
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
|
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
|
|
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
|
|
QVariant itemChange(GraphicsItemChange change, const QVariant &value);
|
|
};
|
|
|
|
#endif
|