Cockatrice 2026-09-01-Development-3.1.0-beta.10
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 <QElapsedTimer>
10#include <QGraphicsItem>
11#include <QPainterPath>
12#include <QPointer>
13#include <QSharedPointer>
14
15class CardItem;
16class QGraphicsSceneMouseEvent;
17class PlayerLogic;
18
19class ArrowItem : public QObject, public QGraphicsItem, public IAnimatedItem
20{
21 Q_OBJECT
22 Q_INTERFACES(QGraphicsItem)
23signals:
24 void requestDeletion(int creatorId, int id);
25
26private:
27 QPainterPath path;
28 QPainterPath bodyPath;
29 QPainterPath headPath;
30 QPainterPath shaftOutlinePath;
31 QPainterPath centerLine;
32 qreal headBaseFraction = 1.0;
33 QElapsedTimer animationClock;
36 qreal drawProgress = 1.0;
37 qreal glowAlpha = 0.0;
38 bool animationStarted = false;
39
40 static constexpr qreal glowExtent = 12.0;
41
42protected:
43 QSharedPointer<const ArrowData> data;
44 QPointer<ArrowTarget> startItem;
45 QPointer<ArrowTarget> targetItem;
46 bool targetLocked = false;
47 bool fullColor = true;
48
49 void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
50
51public:
52 enum
53 {
55 };
56 [[nodiscard]] int type() const override
57 {
58 return Type;
59 }
60 ArrowItem(QSharedPointer<const ArrowData> _data, ArrowTarget *_startItem, ArrowTarget *_targetItem);
61 ~ArrowItem() override;
62
63 void onTargetDestroyed();
64 void delArrow();
65 void updatePath();
66 void updatePath(const QPointF &endPoint);
67 void startDrawAnimation();
68 bool animationEvent() override;
69
70 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
71 [[nodiscard]] QRectF boundingRect() const override
72 {
73 return path.boundingRect().adjusted(-glowExtent, -glowExtent, glowExtent, glowExtent);
74 }
75 [[nodiscard]] QPainterPath shape() const override
76 {
77 return path;
78 }
79 [[nodiscard]] int getId() const
80 {
81 return data->id;
82 }
83 [[nodiscard]] int getCreatorId() const
84 {
85 return data->creatorId;
86 }
87 [[nodiscard]] ArrowTarget *getStartItem() const
88 {
89 return startItem;
90 }
91 [[nodiscard]] ArrowTarget *getTargetItem() const
92 {
93 return targetItem;
94 }
95 void setTargetLocked(bool _targetLocked)
96 {
97 targetLocked = _targetLocked;
98 }
99};
100
102{
103 Q_OBJECT
104private:
107 QList<ArrowDragItem *> childArrows;
108 QMetaObject::Connection positionConnection;
109
110public:
111 ArrowDragItem(PlayerLogic *_owner, ArrowTarget *_startItem, const QColor &_color, int _deleteInPhase);
112 void addChildArrow(ArrowDragItem *child);
113
114protected:
115 void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
116 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
117};
118
120{
121 Q_OBJECT
122private:
124 QList<ArrowAttachItem *> childArrows;
125 QMetaObject::Connection positionConnection;
126 void attachCards(CardItem *startCard, const CardItem *targetCard);
127
128public:
129 explicit ArrowAttachItem(ArrowTarget *_startItem);
130 void addChildArrow(ArrowAttachItem *child);
131
132protected:
133 void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
134 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
135};
136
137#endif
Interface for scene items driven by GameScene's shared animation timer.
QMetaObject::Connection positionConnection
Definition arrow_item.h:125
PlayerLogic * player
Definition arrow_item.h:123
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
Definition arrow_item.cpp:478
ArrowAttachItem(ArrowTarget *_startItem)
Definition arrow_item.cpp:461
void addChildArrow(ArrowAttachItem *child)
Definition arrow_item.cpp:473
QList< ArrowAttachItem * > childArrows
Definition arrow_item.h:124
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
Definition arrow_item.cpp:521
void attachCards(CardItem *startCard, const CardItem *targetCard)
Definition arrow_item.cpp:553
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
Definition arrow_item.cpp:344
QList< ArrowDragItem * > childArrows
Definition arrow_item.h:107
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
Definition arrow_item.cpp:392
QMetaObject::Connection positionConnection
Definition arrow_item.h:108
void addChildArrow(ArrowDragItem *child)
Definition arrow_item.cpp:339
PlayerLogic * player
Definition arrow_item.h:105
int deleteInPhase
Definition arrow_item.h:106
ArrowDragItem(PlayerLogic *_owner, ArrowTarget *_startItem, const QColor &_color, int _deleteInPhase)
Definition arrow_item.cpp:328
ArrowTarget * getStartItem() const
Definition arrow_item.h:87
void setTargetLocked(bool _targetLocked)
Definition arrow_item.h:95
qreal strokeDurationMs
Definition arrow_item.h:34
static constexpr qreal glowExtent
Definition arrow_item.h:40
qreal glowFadeDurationMs
Definition arrow_item.h:35
QElapsedTimer animationClock
Definition arrow_item.h:33
void onTargetDestroyed()
Definition arrow_item.cpp:76
QRectF boundingRect() const override
Definition arrow_item.h:71
int type() const override
Definition arrow_item.h:56
int getCreatorId() const
Definition arrow_item.h:83
QPainterPath bodyPath
Definition arrow_item.h:28
void startDrawAnimation()
Definition arrow_item.cpp:188
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
Definition arrow_item.cpp:306
QPainterPath centerLine
Definition arrow_item.h:31
qreal glowAlpha
Definition arrow_item.h:37
bool fullColor
Definition arrow_item.h:47
QPainterPath path
Definition arrow_item.h:27
QPointer< ArrowTarget > startItem
Definition arrow_item.h:44
int getId() const
Definition arrow_item.h:79
ArrowItem(QSharedPointer< const ArrowData > _data, ArrowTarget *_startItem, ArrowTarget *_targetItem)
Definition arrow_item.cpp:44
ArrowTarget * getTargetItem() const
Definition arrow_item.h:91
QSharedPointer< const ArrowData > data
Definition arrow_item.h:43
bool targetLocked
Definition arrow_item.h:46
qreal drawProgress
Definition arrow_item.h:36
QPainterPath shape() const override
Definition arrow_item.h:75
QPainterPath headPath
Definition arrow_item.h:29
bool animationStarted
Definition arrow_item.h:38
~ArrowItem() override
Definition arrow_item.cpp:69
void updatePath()
Definition arrow_item.cpp:97
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
Definition arrow_item.cpp:236
@ Type
Definition arrow_item.h:54
QPainterPath shaftOutlinePath
Definition arrow_item.h:30
qreal headBaseFraction
Definition arrow_item.h:32
QPointer< ArrowTarget > targetItem
Definition arrow_item.h:45
bool animationEvent() override
Advances the item's animation by one timer tick.
Definition arrow_item.cpp:210
void delArrow()
Definition arrow_item.cpp:89
void requestDeletion(int creatorId, int id)
Definition arrow_target.h:18
Definition card_item.h:27
Definition animated_item.h:15
Definition player_logic.h:65
@ typeArrow
Definition graphics_item_type.h:20