Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
card_item.h
Go to the documentation of this file.
1
6
7#ifndef CARDITEM_H
8#define CARDITEM_H
9
11#include "abstract_card_item.h"
12#include "graphics_item_type.h"
13
14#include <QList>
15#include <QPoint>
16#include <QPointF>
17#include <QString>
18#include <QVariantList>
19#include <qtmetamacros.h>
20
21class CardDragItem;
22class ServerInfo_Card;
23class PlayerLogic;
24class QColor;
25class CardZoneLogic;
26class QGraphicsItem;
27struct CardRef;
28template <class Key, class T> class QMap;
29
31
33{
34 Q_OBJECT
35private:
37
38 QPoint gridPoint;
41
42 void prepareDelete();
43 void handleClickedToPlay(bool shiftHeld);
44public slots:
45 void deleteLater();
46
47public:
48 enum
49 {
51 };
52 [[nodiscard]] int type() const override
53 {
54 return Type;
55 }
56 explicit CardItem(PlayerLogic *_owner,
57 QGraphicsItem *parent = nullptr,
58 const CardRef &cardRef = {},
59 int _cardid = -1,
60 CardZoneLogic *_zone = nullptr);
61
62 void retranslateUi();
63 [[nodiscard]] CardState *getState() const
64 {
65 return state;
66 }
67 [[nodiscard]] CardZoneLogic *getZone() const
68 {
69 return state->getZone();
70 }
71 void setZone(CardZoneLogic *_zone);
72 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
73 [[nodiscard]] QPoint getGridPoint() const
74 {
75 return gridPoint;
76 }
77 void setGridPoint(const QPoint &_gridPoint)
78 {
79 gridPoint = _gridPoint;
80 }
81 [[nodiscard]] QPoint getGridPos() const
82 {
83 return gridPoint;
84 }
85 [[nodiscard]] PlayerLogic *getOwner() const
86 {
87 return owner;
88 }
89 void setOwner(PlayerLogic *_owner)
90 {
91 owner = _owner;
92 }
93 [[nodiscard]] bool getAttacking() const
94 {
95 return state->getAttacking();
96 }
97 void setAttacking(bool _attacking);
98 [[nodiscard]] const QMap<int, int> &getCounters() const
99 {
100 return state->getCounters();
101 }
102 void setCounter(int _id, int _value);
103 [[nodiscard]] QString getAnnotation() const
104 {
105 return state->getAnnotation();
106 }
107 void setAnnotation(const QString &_annotation);
108 [[nodiscard]] bool getDoesntUntap() const
109 {
110 return state->getDoesntUntap();
111 }
112 void setDoesntUntap(bool _doesntUntap);
113 [[nodiscard]] QString getPT() const
114 {
115 return state->getPT();
116 }
117 void setPT(const QString &_pt);
118 [[nodiscard]] bool getDestroyOnZoneChange() const
119 {
121 }
122 void setDestroyOnZoneChange(bool _destroy)
123 {
124 state->setDestroyOnZoneChange(_destroy);
125 }
126 [[nodiscard]] CardItem *getAttachedTo() const
127 {
128 return state->getAttachedTo();
129 }
130 void setAttachedTo(CardItem *_attachedTo);
132 {
133 attachedCards.append(card);
134 }
136 {
137 attachedCards.removeOne(card);
138 }
139 [[nodiscard]] const QList<CardItem *> &getAttachedCards() const
140 {
141 return attachedCards;
142 }
143 void resetState(bool keepAnnotations = false);
144 void processCardInfo(const ServerInfo_Card &_info);
145
146 bool animationEvent() override;
147 CardDragItem *createDragItem(int _id, const QPointF &_pos, const QPointF &_scenePos, bool forceFaceDown);
148 void deleteDragItem();
149 void drawArrow(const QColor &arrowColor);
150 void drawAttachArrow();
151 void playCard(bool faceDown);
152
171 static QVariantList parsePT(const QString &pt);
172
173protected:
174 void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
175 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
176 void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
177 QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
178 bool doubleClickActsOnSelection() const override;
179};
180
181#endif
Base class for graphical card items, providing shared rendering, identity, and interaction logic.
const int ROTATION_DEGREES_PER_FRAME
Definition card_item.h:30
CardRef cardRef
Definition abstract_card_item.h:34
AbstractCardItem(QGraphicsItem *parent=nullptr, const CardRef &cardRef={}, PlayerLogic *_owner=nullptr, int _id=-1)
Definition abstract_card_item.cpp:45
PlayerLogic * owner
Definition arrow_target.h:21
Definition card_drag_item.h:19
Definition card_item.h:33
void setZone(CardZoneLogic *_zone)
Definition card_item.cpp:97
void deleteDragItem()
Definition card_item.cpp:293
void setOwner(PlayerLogic *_owner)
Definition card_item.h:89
bool animationEvent() override
Default: no per-tick animation. Subclasses override to animate.
Definition card_item.cpp:536
CardItem(PlayerLogic *_owner, QGraphicsItem *parent=nullptr, const CardRef &cardRef={}, int _cardid=-1, CardZoneLogic *_zone=nullptr)
Definition card_item.cpp:51
QPoint getGridPoint() const
Definition card_item.h:73
@ Type
Definition card_item.h:50
void playCard(bool faceDown)
Definition card_item.cpp:418
bool getDoesntUntap() const
Definition card_item.h:108
void handleClickedToPlay(bool shiftHeld)
Definition card_item.cpp:490
const QList< CardItem * > & getAttachedCards() const
Definition card_item.h:139
void processCardInfo(const ServerInfo_Card &_info)
Definition card_item.cpp:260
void setDoesntUntap(bool _doesntUntap)
Definition card_item.cpp:198
void setAttacking(bool _attacking)
Definition card_item.cpp:180
QString getAnnotation() const
Definition card_item.h:103
void removeAttachedCard(CardItem *card)
Definition card_item.h:135
CardZoneLogic * getZone() const
Definition card_item.h:67
void setAnnotation(const QString &_annotation)
Definition card_item.cpp:192
PlayerLogic * getOwner() const
Definition card_item.h:85
void prepareDelete()
Definition card_item.cpp:67
bool doubleClickActsOnSelection() const override
Whether a double-click on this item acts on the whole selection.
Definition card_item.cpp:531
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override
Definition card_item.cpp:519
static QVariantList parsePT(const QString &pt)
Parses a string representing a p/t in order to extract the values from it.
Definition card_item.cpp:441
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
Definition card_item.cpp:106
void resetState(bool keepAnnotations=false)
Resets the fields that should be reset after a zone transition.
Definition card_item.cpp:248
bool getAttacking() const
Definition card_item.h:93
void setGridPoint(const QPoint &_gridPoint)
Definition card_item.h:77
bool getDestroyOnZoneChange() const
Definition card_item.h:118
CardState * getState() const
Definition card_item.h:63
QList< CardItem * > attachedCards
Definition card_item.h:40
void setCounter(int _id, int _value)
Definition card_item.cpp:186
void deleteLater()
Definition card_item.cpp:88
void retranslateUi()
Definition card_item.cpp:102
CardDragItem * createDragItem(int _id, const QPointF &_pos, const QPointF &_scenePos, bool forceFaceDown)
Definition card_item.cpp:281
CardItem * getAttachedTo() const
Definition card_item.h:126
QString getPT() const
Definition card_item.h:113
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
Definition card_item.cpp:358
int type() const override
Definition card_item.h:52
void setPT(const QString &_pt)
Definition card_item.cpp:204
void setDestroyOnZoneChange(bool _destroy)
Definition card_item.h:122
QPoint gridPoint
Definition card_item.h:38
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
Definition card_item.cpp:503
const QMap< int, int > & getCounters() const
Definition card_item.h:98
QPoint getGridPos() const
Definition card_item.h:81
CardState * state
Definition card_item.h:36
void drawAttachArrow()
Definition card_item.cpp:333
void drawArrow(const QColor &arrowColor)
Definition card_item.cpp:301
void setAttachedTo(CardItem *_attachedTo)
Definition card_item.cpp:210
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override
Definition card_item.cpp:564
void addAttachedCard(CardItem *card)
Definition card_item.h:131
CardDragItem * dragItem
Definition card_item.h:39
Definition card_state.h:13
QString getAnnotation() const
Definition card_state.h:70
CardZoneLogic * getZone() const
Definition card_state.h:46
const QMap< int, int > & getCounters() const
Definition card_state.h:59
void setDestroyOnZoneChange(bool _destroyOnZoneChange)
Definition card_state.cpp:94
bool getDoesntUntap() const
Definition card_state.h:84
bool getDestroyOnZoneChange() const
Definition card_state.h:91
CardItem * getAttachedTo() const
Definition card_state.h:98
QString getPT() const
Definition card_state.h:77
bool getAttacking() const
Definition card_state.h:53
Definition card_zone_logic.h:27
Definition player_logic.h:56
Definition remote_connection_controller.h:20
Definition game.h:18
@ typeCard
Definition graphics_item_type.h:14
Definition card_ref.h:14
Definition serverinfo_card.proto:5