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