1 /* 2 SPDX-FileCopyrightText: 2008-2010 Stefan Majewsky <majewsky@gmx.net> 3 4 SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #ifndef KDIAMOND_BOARD_H 8 #define KDIAMOND_BOARD_H 9 10 class Diamond; 11 12 class QAbstractAnimation; 13 #include <QGraphicsItem> 14 class KGameRenderer; 15 16 namespace KDiamond 17 { 18 class Board : public QGraphicsObject 19 { 20 Q_OBJECT 21 public: 22 explicit Board(KGameRenderer *renderer); 23 24 int gridSize() const; 25 Diamond *diamond(const QPoint &point) const; 26 27 bool hasDiamond(const QPoint &point) const; 28 bool hasRunningAnimations() const; 29 QList<QPoint> selections() const; 30 bool hasSelection(const QPoint &point) const; 31 void setSelection(const QPoint &point, bool selected); 32 void clearSelection(); 33 34 void removeDiamond(const QPoint &point); 35 void swapDiamonds(const QPoint &point1, const QPoint &point2); 36 void fillGaps(); 37 38 KGameRenderer *renderer() const; 39 40 QRectF boundingRect() const override; 41 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; 42 public Q_SLOTS: 43 void setPaused(bool paused); 44 Q_SIGNALS: 45 void animationsFinished(); 46 void clicked(const QPoint &point); 47 void dragged(const QPoint &point, const QPoint &direction); 48 private Q_SLOTS: 49 void slotAnimationFinished(); 50 void slotClicked(); 51 void slotDragged(const QPoint &direction); 52 private: 53 struct MoveAnimSpec { 54 Diamond *diamond; 55 QPointF from, to; 56 }; 57 QPoint findDiamond(Diamond *diamond) const; 58 Diamond *&rDiamond(const QPoint &point); 59 Diamond *spawnDiamond(int color); 60 void spawnMoveAnimations(const QList<MoveAnimSpec> &specs); 61 62 static const int MoveDuration; 63 static const int RemoveDuration; 64 65 int m_difficultyIndex, m_size, m_colorCount; 66 QList<QPoint> m_selections; 67 bool m_paused; 68 69 KGameRenderer *m_renderer; 70 QVector<Diamond *> m_diamonds; 71 QList<Diamond *> m_activeSelectors, m_inactiveSelectors; 72 QList<QAbstractAnimation *> m_runningAnimations; 73 }; 74 } 75 76 #endif // KDIAMOND_BOARD_H 77