Incendie
firewidget.h
1 #ifndef FIREWIDGET_H
2 #define FIREWIDGET_H
3 
4 #include <QtCore/QByteArray>
5 #include <QtCore/QPoint>
6 
7 #include <QtWidgets/QWidget>
8 #include <QtWidgets/QRubberBand>
9 #include <QtWidgets/QProgressBar>
10 #include <QtGui/QImage>
11 #include <QtGui/QPainter>
12 #include <QtGui/QColor>
13 #include <QtGui/qevent.h> // IMPROVEIT pas d'equivalent sans .h ?
14 
15 #include <vector>
16 #include <fstream>
17 
18 // Macros
19 #include "../Moteur/actions.h"
20 #include "../debug.h"
21 
22 #include "../Moteur/foret.h"
23 #include "fwelcome.h"
24 #include "loadwindow.h"
25 
26 
27 enum Colors{Gray, Red, Orange, BlueTrans, BrownCut, Brownie, NBColorsBeforeGreens, Green0, Green1};
28 
29 
37 class FireWidget : public QWidget {
38  Q_OBJECT
39 private:
40  Foret* forest;
41  QImage* buffer;
42  QColor* color;
43  QPainter* bufferPainter;
44  QImage* pictureForest; // Image de fond
45 
46  QPoint origin;
47  QRubberBand* rubber;
48  // Points de départ et d'arrivée de la zone de selection (redondance pour origine mais normal pour l'instant)
49  QPoint depart;
50  QPoint arrivee;
51 
52  qreal tailleCell;
53  long temps;
54  bool running;
55 
56 private:
57  void initRubber(QMouseEvent* event);
58 
59 public:
60  /* Constructeur et desctructeur */
70  FireWidget();
71  virtual ~FireWidget();
72 
73  /* Initialisations */
80  void initialise(int largeur, int hauteur, float proba = 0.60, float coef_brulure=1.0, std::time_t graine=std::time(0));
81 
93  bool tryInitialise(int largeur, int hauteur, std::ifstream* file);
94 
105  bool tryInitialise(int largeur, int hauteur, QImage* imageForet, float coef_brulure);
106 
107 private:
108  LoadWindow* createProgressWindow() const;
114  void setColor(Colors colorIndice);
115 
122  void setColor(const Essence* essence);
123 
124  // Setters
125 public slots:
131  void setWind(int angle, int vitesse) { forest->setWind(angle, vitesse); }
132 public:
133  void razRubber() { rubber= NULL; }
134  /* Gestion Foret */
140  void delForest();
145  void delPicture();
146 
147  /* Getters */
148  int getTailleCell() const { return tailleCell; };
149  Foret* getForet() const { return forest; };
150 
151  /* Gestion Sauvegardes */
159  void loadFromPicture(int largeurImage, int hauteurImage, QImage* imageForet, float coef_brulure);
160 
167  bool trySaveForest(std::string& filePath) const;
173  bool trySaveSeed(std::string& filePath) const;
174 
181  bool trySaveImage(QString filename) const;
182 
183  /* Modifications de l'état des arbres */
190  // bool tryEteindreFeu(int colonne, int ligne);
198  bool tryAllumerFeu(int colonne, int ligne);
206  bool tryFinirFeu(int colonne, int ligne);
207 
208  /* Affichage */
214  void drawCell(int colonne, int ligne);
221  void drawTree(const Arbre* ab);
227  void drawList(std::list< Arbre* >* arbres);
232  void drawForest();
238  bool tryDrawPicture();
244  bool tryDrawPictureForest();
250  // IMPROVEIT faire une fonction qui prend une couleur et une liste d'arbres, qui "imprime" les arbres avec cette couleur ?
251  void drawChanged();
256  void redraw();
257 
259  // void reset(int _larg, int _haut, float proba, float coef);
260 
261 protected:
262  /* Events */
263  // TODO comments
264  void mousePressEvent(QMouseEvent *event);
265  void mouseMoveEvent(QMouseEvent *event);
266  void mouseReleaseEvent(QMouseEvent *event);
267  void resizeEvent(QResizeEvent * event);
268  void paintEvent(QPaintEvent* event);
269 
270 public slots:
276  bool next();
282  void actionReceived(int x);
283 
284 signals:
291  void releaseSignal(); // Vers firescreen
292 
293 };
294 
295 #endif // FIREWIDGET_H
Definition: foret.h:21
void drawList(std::list< Arbre * > *arbres)
Definition: firewidget.cpp:320
void loadFromPicture(int largeurImage, int hauteurImage, QImage *imageForet, float coef_brulure)
Definition: firewidget.cpp:188
bool tryDrawPicture()
Definition: firewidget.cpp:400
void setWind(int angle, int vitesse)
Definition: firewidget.h:131
bool tryAllumerFeu(int colonne, int ligne)
Definition: firewidget.cpp:251
void delPicture()
Definition: firewidget.cpp:178
void redraw()
Definition: firewidget.cpp:501
bool trySaveForest(std::string &filePath) const
Definition: firewidget.cpp:220
bool tryInitialise(int largeur, int hauteur, std::ifstream *file)
void delForest()
Definition: firewidget.cpp:170
bool trySaveSeed(std::string &filePath) const
Definition: firewidget.cpp:225
Definition: loadwindow.h:14
void actionReceived(int x)
Definition: firewidget.cpp:699
bool next()
Definition: firewidget.cpp:660
bool tryFinirFeu(int colonne, int ligne)
Definition: firewidget.cpp:275
Definition: firewidget.h:37
void drawChanged()
Definition: firewidget.cpp:469
void releaseSignal()
Definition: moc_firewidget.cpp:142
void resizeEvent(QResizeEvent *event)
Definition: firewidget.cpp:533
void initialise(int largeur, int hauteur, float proba=0.60, float coef_brulure=1.0, std::time_t graine=std::time(0))
Definition: firewidget.cpp:34
void drawCell(int colonne, int ligne)
Definition: firewidget.cpp:303
Definition: essence.h:7
Definition: arbre.h:14
void drawTree(const Arbre *ab)
Definition: firewidget.cpp:311
bool trySaveImage(QString filename) const
Definition: firewidget.cpp:230
void drawForest()
Definition: firewidget.cpp:328
void setWind(int angle, int vitesse)
Definition: foret.cpp:135
void mousePressEvent(QMouseEvent *event)
Definition: firewidget.cpp:560
bool tryDrawPictureForest()
Definition: firewidget.cpp:412
FireWidget()
Definition: firewidget.cpp:9