Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
arrow_item.h
Go to the documentation of this file.
1#ifndef ARROWITEM_H
2#define ARROWITEM_H
3
5#include "../animated_item.h"
6#include "arrow_target.h"
8
9#include <QColor>
10#include <QElapsedTimer>
11#include <QGraphicsItem>
12#include <QList>
13#include <QMetaObject>
14#include <QObject>
15#include <QPainterPath>
16#include <QPointF>
17#include <QPointer>
18#include <QRectF>
19#include <QSharedPointer>
20#include <QtGlobal>
21#include <qtmetamacros.h>
22
23class CardItem;
24class PlayerLogic;
25template <class T> class QSharedPointer;
26
27class ArrowItem : public QObject, public QGraphicsItem, public IAnimatedItem
28{
29 Q_OBJECT
30 Q_INTERFACES(QGraphicsItem)
31signals:
32 void requestDeletion(int creatorId, int id);
33
34private:
35 QPainterPath path;
36 QPainterPath bodyPath;
37 QPainterPath headPath;
38 QPainterPath shaftOutlinePath;
39 QPainterPath centerLine;
40 qreal headBaseFraction = 1.0;
41 QElapsedTimer animationClock;
44 qreal drawProgress = 1.0;
45 qreal glowAlpha = 0.0;
46 bool animationStarted = false;
47
48 static constexpr qreal glowExtent = 12.0;
49
50protected:
52 QPointer<ArrowTarget> startItem;
53 QPointer<ArrowTarget> targetItem;
54 bool targetLocked = false;
55 bool fullColor = true;
56
57 void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
58
59public:
60 enum
61 {
63 };
64 [[nodiscard]] int type() const override
65 {
66 return Type;
67 }
68 ArrowItem(QSharedPointer<const ArrowData> _data, ArrowTarget *_startItem, ArrowTarget *_targetItem);
69 ~ArrowItem() override;
70
71 void onTargetDestroyed();
72 void delArrow();
73 void updatePath();
74 void updatePath(const QPointF &endPoint);
75 void startDrawAnimation();
76 bool animationEvent() override;
77
78 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
79 [[nodiscard]] QRectF boundingRect() const override
80 {
81 return path.boundingRect().adjusted(-glowExtent, -glowExtent, glowExtent, glowExtent);
82 }
83 [[nodiscard]] QPainterPath shape() const override
84 {
85 return path;
86 }
87 [[nodiscard]] int getId() const
88 {
89 return data->id;
90 }
91 [[nodiscard]] int getCreatorId() const
92 {
93 return data->creatorId;
94 }
95 [[nodiscard]] ArrowTarget *getStartItem() const
96 {
97 return startItem;
98 }
99 [[nodiscard]] ArrowTarget *getTargetItem() const
100 {
101 return targetItem;
102 }
103 void setTargetLocked(bool _targetLocked)
104 {
105 targetLocked = _targetLocked;
106 }
107};
108
110{
111 Q_OBJECT
112private:
116 QMetaObject::Connection positionConnection;
117
118public:
119 ArrowDragItem(PlayerLogic *_owner, ArrowTarget *_startItem, const QColor &_color, int _deleteInPhase);
120 void addChildArrow(ArrowDragItem *child);
121
122protected:
123 void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
124 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
125};
126
128{
129 Q_OBJECT
130private:
133 QMetaObject::Connection positionConnection;
134 void attachCards(CardItem *startCard, const CardItem *targetCard);
135
136public:
137 explicit ArrowAttachItem(ArrowTarget *_startItem);
138 void addChildArrow(ArrowAttachItem *child);
139
140protected:
141 void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
142 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
143};
144
145#endif
Interface for scene items driven by GameScene's shared animation timer.
QMetaObject::Connection positionConnection
Definition arrow_item.h:133
PlayerLogic * player
Definition arrow_item.h:131
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
Definition arrow_item.cpp:492
ArrowAttachItem(ArrowTarget *_startItem)
Definition arrow_item.cpp:475
void addChildArrow(ArrowAttachItem *child)
Definition arrow_item.cpp:487
QList< ArrowAttachItem * > childArrows
Definition arrow_item.h:132
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
Definition arrow_item.cpp:535
void attachCards(CardItem *startCard, const CardItem *targetCard)
Definition arrow_item.cpp:567
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
Definition arrow_item.cpp:358
QList< ArrowDragItem * > childArrows
Definition arrow_item.h:115
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
Definition arrow_item.cpp:406
QMetaObject::Connection positionConnection
Definition arrow_item.h:116
void addChildArrow(ArrowDragItem *child)
Definition arrow_item.cpp:353
PlayerLogic * player
Definition arrow_item.h:113
int deleteInPhase
Definition arrow_item.h:114
ArrowDragItem(PlayerLogic *_owner, ArrowTarget *_startItem, const QColor &_color, int _deleteInPhase)
Definition arrow_item.cpp:342
Definition arrow_item.h:28
ArrowTarget * getStartItem() const
Definition arrow_item.h:95
void setTargetLocked(bool _targetLocked)
Definition arrow_item.h:103
qreal strokeDurationMs
Definition arrow_item.h:42
static constexpr qreal glowExtent
Definition arrow_item.h:48
qreal glowFadeDurationMs
Definition arrow_item.h:43
QElapsedTimer animationClock
Definition arrow_item.h:41
void onTargetDestroyed()
Definition arrow_item.cpp:90
QRectF boundingRect() const override
Definition arrow_item.h:79
int type() const override
Definition arrow_item.h:64
int getCreatorId() const
Definition arrow_item.h:91
QPainterPath bodyPath
Definition arrow_item.h:36
void startDrawAnimation()
Definition arrow_item.cpp:202
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
Definition arrow_item.cpp:320
QPainterPath centerLine
Definition arrow_item.h:39
qreal glowAlpha
Definition arrow_item.h:45
bool fullColor
Definition arrow_item.h:55
QPainterPath path
Definition arrow_item.h:35
QPointer< ArrowTarget > startItem
Definition arrow_item.h:52
int getId() const
Definition arrow_item.h:87
ArrowItem(QSharedPointer< const ArrowData > _data, ArrowTarget *_startItem, ArrowTarget *_targetItem)
Definition arrow_item.cpp:58
ArrowTarget * getTargetItem() const
Definition arrow_item.h:99
QSharedPointer< const ArrowData > data
Definition arrow_item.h:51
bool targetLocked
Definition arrow_item.h:54
qreal drawProgress
Definition arrow_item.h:44
QPainterPath shape() const override
Definition arrow_item.h:83
QPainterPath headPath
Definition arrow_item.h:37
bool animationStarted
Definition arrow_item.h:46
void updatePath()
Definition arrow_item.cpp:111
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
Definition arrow_item.cpp:250
@ Type
Definition arrow_item.h:62
QPainterPath shaftOutlinePath
Definition arrow_item.h:38
qreal headBaseFraction
Definition arrow_item.h:40
QPointer< ArrowTarget > targetItem
Definition arrow_item.h:53
bool animationEvent() override
Advances the item's animation by one timer tick.
Definition arrow_item.cpp:224
void delArrow()
Definition arrow_item.cpp:103
void requestDeletion(int creatorId, int id)
Definition arrow_target.h:18
Definition card_item.h:33
Definition animated_item.h:15
Definition player_logic.h:56
Definition remote_connection_controller.h:20
Definition arrow_registry.h:10
@ typeArrow
Definition graphics_item_type.h:20