1 /* 2 SPDX-FileCopyrightText: 2007 Paolo Capriotti <p.capriotti@gmail.com> 3 4 SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #ifndef BATTLEFIELDVIEW_H 8 #define BATTLEFIELDVIEW_H 9 10 #include <QMultiHash> 11 #include <QTime> 12 #include <QWidget> 13 #include <QGraphicsView> 14 #include <QGraphicsLineItem> 15 16 #include <KGameRenderedItem> 17 18 #include "coord.h" 19 #include "spritefactory.h" 20 #include "grid.h" 21 #include "sea.h" 22 23 class KBSRenderer; 24 class Sprite; 25 class Ship; 26 class WelcomeScreen; 27 class Delegate; 28 29 class BattleFieldView : public QGraphicsView 30 { 31 static const qreal PREVIEW_OPACITY; 32 33 KGameRenderedItem* m_background; 34 KGameRenderedItem* m_background_lower; 35 36 QGraphicsLineItem *hlines[11]; 37 QGraphicsLineItem *vlines[11]; 38 39 enum Planes { 40 BACKGROUND = 1, 41 FOREGROUND = 2 42 }; 43 44 WelcomeScreen* m_screen; 45 KBSRenderer* m_renderer; 46 SpriteFactory m_factory; 47 QString m_bgID; 48 int m_gridSize; 49 Sprite* m_impact; 50 Sprite* m_last_hit; 51 bool m_drawGrid; 52 53 Delegate *m_delegate; 54 Sea::Player m_player; 55 Sea::Status m_status; 56 57 struct Preview { 58 Coord pos; 59 Ship* ship; 60 Sprite* sprite; 61 PreviewPreview62 Preview() 63 : pos(-1, -1) 64 , ship(nullptr) 65 , sprite(nullptr) 66 { 67 } 68 } m_preview; 69 70 typedef QMultiHash<Coord, Sprite*> Sprites; 71 Sprites m_sprites; 72 73 private: 74 void addSprite(const Coord& c, Sprite* ship); 75 void loadPreviewSprite(Ship * ship); 76 77 public: 78 BattleFieldView(QWidget* parent, KBSRenderer* renderer, const QString& bgID, int gridSize); 79 80 void toggleGrid(bool show); 81 void refresh(); 82 83 void setPreview(const QPoint &pos); 84 void cancelPreview(); 85 void add(Ship* ship); 86 void hit(const Coord& c); 87 void miss(const Coord& c); 88 void removeImpact(); 89 void sink(Ship* ship); 90 void clear(); 91 92 void setDelegate(Delegate *c); 93 void setPlayer(Sea::Player player); 94 95 WelcomeScreen* screen() const; setStatus(Sea::Status status)96 inline void setStatus(Sea::Status status) { m_status = status; }; 97 protected: 98 void drawGrid(); 99 100 void mousePressEvent(QMouseEvent *) override; 101 void mouseReleaseEvent(QMouseEvent *) override; 102 void mouseMoveEvent(QMouseEvent *) override; 103 void leaveEvent(QEvent *) override; 104 }; 105 106 #endif // BATTLEFIELD_H 107 108