1 #ifndef GAMESCENE_H
2 #define GAMESCENE_H
3 
4 #include <QGraphicsScene>
5 #include <QList>
6 #include <QPointer>
7 #include <QSet>
8 
9 class Player;
10 class ZoneViewWidget;
11 class CardZone;
12 class AbstractCardItem;
13 class CardItem;
14 class ServerInfo_Card;
15 class PhasesToolbar;
16 class QBasicTimer;
17 
18 class GameScene : public QGraphicsScene
19 {
20     Q_OBJECT
21 private:
22     static const int playerAreaSpacing = 5;
23 
24     PhasesToolbar *phasesToolbar;
25     QList<Player *> players;
26     QList<QList<Player *>> playersByColumn;
27     QList<ZoneViewWidget *> zoneViews;
28     QSize viewSize;
29     QPointer<CardItem> hoveredCard;
30     QBasicTimer *animationTimer;
31     QSet<CardItem *> cardsToAnimate;
32     int playerRotation;
33     void updateHover(const QPointF &scenePos);
34 
35 public:
36     GameScene(PhasesToolbar *_phasesToolbar, QObject *parent = nullptr);
37     ~GameScene();
38     void retranslateUi();
39     void processViewSizeChange(const QSize &newSize);
40     QTransform getViewTransform() const;
41     QTransform getViewportTransform() const;
42 
43     void startRubberBand(const QPointF &selectionOrigin);
44     void resizeRubberBand(const QPointF &cursorPoint);
45     void stopRubberBand();
46 
47     void registerAnimationItem(AbstractCardItem *item);
48     void unregisterAnimationItem(AbstractCardItem *card);
49 public slots:
50     void toggleZoneView(Player *player, const QString &zoneName, int numberCards);
51     void addRevealedZoneView(Player *player,
52                              CardZone *zone,
53                              const QList<const ServerInfo_Card *> &cardList,
54                              bool withWritePermission);
55     void removeZoneView(ZoneViewWidget *item);
56     void addPlayer(Player *player);
57     void removePlayer(Player *player);
58     void clearViews();
59     void closeMostRecentZoneView();
60     void adjustPlayerRotation(int rotationAdjustment);
61     void rearrange();
62 
63 protected:
64     bool event(QEvent *event);
65     void timerEvent(QTimerEvent *event);
66 signals:
67     void sigStartRubberBand(const QPointF &selectionOrigin);
68     void sigResizeRubberBand(const QPointF &cursorPoint);
69     void sigStopRubberBand();
70 };
71 
72 #endif
73