Update copyright headers
[qt:qt.git] / demos / sub-attaq / states.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the QtCore module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 or version 3 as published by the Free
20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
22 ** following information to ensure the GNU Lesser General Public License
23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 **
26 ** As a special exception, The Qt Company gives you certain additional
27 ** rights. These rights are described in The Qt Company LGPL Exception
28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 **
30 ** GNU General Public License Usage
31 ** Alternatively, this file may be used under the terms of the GNU
32 ** General Public License version 3.0 as published by the Free Software
33 ** Foundation and appearing in the file LICENSE.GPL included in the
34 ** packaging of this file.  Please review the following information to
35 ** ensure the GNU General Public License version 3.0 requirements will be
36 ** met: http://www.gnu.org/copyleft/gpl.html.
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef STATES_H
43 #define STATES_H
44
45 //Qt
46 #include <QtCore/QState>
47 #include <QtCore/QSignalTransition>
48 #include <QtCore/QPropertyAnimation>
49 #include <QtGui/QKeyEventTransition>
50 #include <QtCore/QSet>
51
52 class GraphicsScene;
53 class Boat;
54 class SubMarine;
55 QT_BEGIN_NAMESPACE
56 class QStateMachine;
57 QT_END_NAMESPACE
58
59 class PlayState : public QState
60 {
61 public:
62     PlayState(GraphicsScene *scene, QState *parent = 0);
63     ~PlayState();
64
65  protected:
66     void onEntry(QEvent *);
67
68 private :
69     GraphicsScene *scene;
70     QStateMachine *machine;
71     int currentLevel;
72     int score;
73     QState *parallelChild;
74
75     friend class UpdateScoreState;
76     friend class UpdateScoreTransition;
77     friend class WinTransition;
78     friend class CustomSpaceTransition;
79     friend class WinState;
80     friend class LostState;
81     friend class LevelState;
82 };
83
84 class LevelState : public QState
85 {
86 public:
87     LevelState(GraphicsScene *scene, PlayState *game, QState *parent = 0);
88 protected:
89     void onEntry(QEvent *);
90 private :
91     void initializeLevel();
92     GraphicsScene *scene;
93     PlayState *game;
94 };
95
96 class PauseState : public QState
97 {
98 public:
99     PauseState(GraphicsScene *scene, QState *parent = 0);
100
101 protected:
102     void onEntry(QEvent *);
103     void onExit(QEvent *);
104 private :
105     GraphicsScene *scene;
106     Boat *boat;
107 };
108
109 class LostState : public QState
110 {
111 public:
112     LostState(GraphicsScene *scene, PlayState *game, QState *parent = 0);
113
114 protected:
115     void onEntry(QEvent *);
116     void onExit(QEvent *);
117 private :
118     GraphicsScene *scene;
119     PlayState *game;
120 };
121
122 class WinState : public QState
123 {
124 public:
125     WinState(GraphicsScene *scene, PlayState *game, QState *parent = 0);
126
127 protected:
128     void onEntry(QEvent *);
129     void onExit(QEvent *);
130 private :
131     GraphicsScene *scene;
132     PlayState *game;
133 };
134
135 class UpdateScoreState : public QState
136 {
137 public:
138     UpdateScoreState(PlayState *game, QState *parent);
139 private:
140     QPropertyAnimation *scoreAnimation;
141     PlayState *game;
142 };
143
144 //These transtion is used to update the score
145 class UpdateScoreTransition : public QSignalTransition
146 {
147 public:
148     UpdateScoreTransition(GraphicsScene *scene, PlayState *game, QAbstractState *target);
149 protected:
150     virtual bool eventTest(QEvent *event);
151 private:
152     PlayState * game;
153     GraphicsScene *scene;
154 };
155
156 //These transtion test if we have won the game
157 class WinTransition : public QSignalTransition
158 {
159 public:
160     WinTransition(GraphicsScene *scene, PlayState *game, QAbstractState *target);
161 protected:
162     virtual bool eventTest(QEvent *event);
163 private:
164     PlayState * game;
165     GraphicsScene *scene;
166 };
167
168 //These transtion is true if one level has been completed and the player want to continue
169  class CustomSpaceTransition : public QKeyEventTransition
170 {
171 public:
172     CustomSpaceTransition(QWidget *widget, PlayState *game, QEvent::Type type, int key);
173 protected:
174     virtual bool eventTest(QEvent *event);
175 private:
176     PlayState *game;
177     int key;
178 };
179
180 #endif // STATES_H