1 
2 /**
3  *
4  * @file gamemode.h
5  *
6  * Part of the OpenJazz project
7  *
8  * @par History:
9  * - 23rd August 2005: Created OpenJazz.h
10  * - 2nd March 2009: Created network.h from parts of OpenJazz.h
11  * - 9th February 2009: Renamed network.h to game.h
12  * - 2nd August 2009: Created gamemode.h from parts of game.h
13  *
14  * @par Licence:
15  * Copyright (c) 2005-2017 Alister Thomson
16  *
17  * OpenJazz is distributed under the terms of
18  * the GNU General Public License, version 2.0
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
23  *
24  */
25 
26 
27 #ifndef _GAMEMODE_H
28 #define _GAMEMODE_H
29 
30 
31 // Constants
32 
33 #define MAX_PLAYERS (MAX_CLIENTS + 1)
34 
35 
36 // Enum
37 
38 /// Game mode identifier
39 enum GameModeType {
40 
41 	M_SINGLE = 0, ///< Single-player mode
42 	M_COOP = 1, ///< Co-operative mode
43 	M_BATTLE = 2, ///< Battle mode
44 	M_TEAMBATTLE = 3, ///< Team battle mode
45 	M_RACE = 4 ///< Race mode
46 
47 };
48 
49 
50 // Classes
51 
52 class Font;
53 class Game;
54 class Player;
55 
56 /// Game mode base class
57 class GameMode {
58 
59 	public:
60         virtual ~GameMode ();
61 
62 		virtual GameModeType  getMode    () = 0;
63 		virtual unsigned char chooseTeam () = 0;
64 		virtual void          drawScore  (Font* font) = 0;
65 		virtual bool          hit        (Player *source, Player *victim);
66 		virtual bool          kill       (Game* game, Player *source, Player *victim);
67 		virtual bool          endOfLevel (Game* game, Player *player, int gridX, int gridY);
68 		virtual void          outOfTime  ();
69 
70 };
71 
72 /// Single-player game mode
73 class SingleGameMode : public GameMode {
74 
75 	public:
76 		GameModeType  getMode    ();
77 		unsigned char chooseTeam ();
78 		void          drawScore  (Font* font);
79 
80 };
81 
82 /// Co-operative game mode base class
83 class CooperativeGameMode : public GameMode {
84 
85 	public:
86 		unsigned char chooseTeam ();
87 		virtual void  drawScore  (Font* font);
88 
89 };
90 
91 /// Free-for-all game mode base class
92 class FreeForAllGameMode : public GameMode {
93 
94 	public:
95 		unsigned char chooseTeam ();
96 		virtual void  drawScore  (Font* font);
97 
98 };
99 
100 /// Team-based game mode base class
101 class TeamGameMode : public GameMode {
102 
103 	public:
104 		unsigned char chooseTeam ();
105 		virtual void  drawScore  (Font* font);
106 
107 };
108 
109 /// Co-operative game mode
110 class CoopGameMode : public CooperativeGameMode {
111 
112 	public:
113 		GameModeType getMode ();
114 
115 };
116 
117 /// Battle game mode
118 class BattleGameMode : public FreeForAllGameMode {
119 
120 	private:
121 		int targetKills; ///< Number of kills required for a player to win
122 
123 	public:
124 		GameModeType getMode ();
125 
126 };
127 
128 /// Team battle game mode
129 class TeamBattleGameMode : public TeamGameMode {
130 
131 	private:
132 		int targetKills; ///< Number of kills required for a team to win
133 
134 	public:
135 		GameModeType getMode ();
136 
137 };
138 
139 /// Race game mode
140 class RaceGameMode : public FreeForAllGameMode {
141 
142 	private:
143 		int targetLaps; ///< Number of laps required for a player to win
144 
145 	public:
146 		GameModeType getMode    ();
147 		bool         hit        (Player *source, Player *victim);
148 		bool         endOfLevel (Game* game, Player *player, int gridX, int gridY);
149 
150 };
151 
152 #endif
153 
154