ye another sound patch from Duong-Khang NGUYEN <neoneurone@users.sf.net>.
[supertux.git] / src / menu.c
1 /*
2   menu.c
3   
4   Super Tux - Menu
5   
6   by Tobias Glaesser
7   tobi.web@gmx.de
8   http://www.newbreedsoftware.com/supertux/
9   
10   December 20, 2003
11 */
12
13 #ifdef LINUX
14 #include <pwd.h>
15 #include <sys/types.h>
16 #include <ctype.h>
17 #endif
18
19 #include "defines.h"
20 #include "globals.h"
21 #include "menu.h"
22 #include "screen.h"
23 #include "setup.h"
24 #include "sound.h"
25
26
27 /* Set defaults */
28 void initmenu(void)
29 {
30   menu_change = NO;
31   show_menu = NO;
32   menuitem = 0;
33   menumenu = 0;
34   menuaction = -1;
35 }
36
37 /* --- MENU --- */
38 /* Draw the menu and execute the (menu)events */
39 int drawmenu(void)
40 {
41   int quit = 0;
42
43   menu_change = NO;
44
45
46   if(menuaction == MN_UP)
47     {
48       /* Go one menu-item up, if possible */
49       if(menuitem > 0)
50         --menuitem;
51     }
52   else if(menuaction == MN_DOWN)
53     ++menuitem; /* Go one menu-item down */
54
55
56   if(menumenu == MENU_MAIN)
57     {
58       /* Does the menu item exist? If not, we reset to the most down item */
59       if(menuitem > 2)
60         menuitem = 2;
61
62       /*The menu looks different, when the game is started */
63       if(game_started)
64         {
65           if(menuitem == 0)
66             {
67               drawcenteredtext("Return To Game", 192, letters_red, NO_UPDATE);
68               if(menuaction == MN_HIT) /* Don't show the menu anymore, if this item got hit */
69                 show_menu = 0;
70             }
71           else
72             drawcenteredtext("Return To Game", 192, letters_blue, NO_UPDATE);
73         }
74       else
75         {
76           if(menuitem == 0)
77             {
78               drawcenteredtext("Start Game", 192, letters_red, NO_UPDATE);
79               if(menuaction == MN_HIT) /* we are ready to start the game, if this item got hit */
80                 {
81                   game_started = 1;
82                   show_menu = 0;
83                 }
84             }
85           else
86             drawcenteredtext("Start Game", 192, letters_blue, NO_UPDATE);
87         }
88
89       if(menuitem == 1)
90         {
91           drawcenteredtext("Options", 224, letters_red, NO_UPDATE);
92           if(menuaction == MN_HIT) /* Switch to the 'Options' menu */
93             {
94               menumenu = MENU_OPTIONS;
95               menu_change = YES;
96             }
97         }
98       else
99         drawcenteredtext("Options", 224, letters_blue, NO_UPDATE);
100
101       if(menuitem == 2)
102         {
103           if(game_started)
104             drawcenteredtext("Quit Game", 256, letters_red, NO_UPDATE);
105           else
106             drawcenteredtext("Quit", 256, letters_red, NO_UPDATE);
107           if(menuaction == MN_HIT) /* Quit a running game or the application */
108             {
109               quit = 1;
110             }
111         }
112       else
113         {
114           if(game_started)
115             drawcenteredtext("Quit Game", 256, letters_blue, NO_UPDATE);
116           else
117             drawcenteredtext("Quit", 256, letters_blue, NO_UPDATE);
118         }
119
120     }
121   else if(menumenu == MENU_OPTIONS)
122     {
123       if(menuitem > 2)
124         menuitem = 2;
125
126       if(menuitem == 0)
127         {
128           if(use_fullscreen)
129             drawcenteredtext("Fullscreen ON", 192, letters_red, NO_UPDATE);
130           else
131             drawcenteredtext("Fullscreen OFF", 192, letters_red, NO_UPDATE);
132           if(menuaction == MN_HIT) /* Disable/Enable fullscreen */
133             {
134               if(use_fullscreen)
135                 use_fullscreen = 0;
136               else
137                 use_fullscreen = 1;
138               st_setup();
139               menu_change = YES;
140             }
141         }
142       else
143         {
144           if(use_fullscreen)
145             drawcenteredtext("Fullscreen ON", 192, letters_blue, NO_UPDATE);
146           else
147             drawcenteredtext("Fullscreen OFF", 192, letters_blue, NO_UPDATE);
148         }
149
150       if (audio_device == YES)
151         {
152           if(menuitem == 1)
153             {
154               if(use_sound)
155                 drawcenteredtext("Sound ON", 224, letters_red, NO_UPDATE);
156               else
157                 drawcenteredtext("Sound OFF", 224, letters_red, NO_UPDATE);
158               if(menuaction == MN_HIT) /* Disable/Enable sound */
159                 {
160                   if(use_sound)
161                     {
162                       if(playing_music())
163                         halt_music();
164                       use_sound = 0;
165                     }
166                   else
167                     {
168                       use_sound = 1;
169                       if (playing_music())
170                         {
171                           switch (current_music)
172                             {
173                             case LEVEL_MUSIC:
174                               play_music(level_song, 1);
175                               break;
176                             case HERRING_MUSIC:
177                               play_music(herring_song, 1);
178                               break;
179                             case HURRYUP_MUSIC: // keep the compiler happy
180                             case NO_MUSIC:      // keep the compiler happy for the moment :-)
181                             {}
182
183                               /*default:*/
184                             }
185                         }
186                     }
187                   menu_change = YES;
188                 }
189             }
190           else
191             {
192               if(use_sound)
193                 drawcenteredtext("Sound ON", 224, letters_blue, NO_UPDATE);
194               else
195                 drawcenteredtext("Sound OFF", 224, letters_blue, NO_UPDATE);
196             }
197         }
198       else  /* if audio_device != YES */
199         {
200           /* let the user move over the deactivated option */
201           if (menuitem == 1)
202             drawcenteredtext("Sound OFF", 224, letters_red, NO_UPDATE);
203           else
204             drawcenteredtext("Sound OFF", 224, letters_black, NO_UPDATE);
205         }
206
207       if(menuitem == 2)
208         {
209           drawcenteredtext("Back", 256, letters_red, NO_UPDATE);
210           if(menuaction == MN_HIT) /* Go back to main menu. */
211             {
212               menumenu = MENU_MAIN;
213               menu_change = YES;
214             }
215         }
216       else
217         drawcenteredtext("Back", 256, letters_blue, NO_UPDATE);
218
219     }
220
221   menuaction = -1;
222
223   SDL_Flip(screen);
224
225   return quit;
226 }
227
228 /* Check for menu event */
229 void menu_event(SDLKey key)
230 {
231
232
233   if (key == SDLK_UP)
234     {
235       /* Menu Up */
236
237       menuaction = MN_UP;
238       menu_change = YES;
239     }
240   else if (key == SDLK_DOWN)
241     {
242       /* Menu Down */
243
244       menuaction = MN_DOWN;
245       menu_change = YES;
246     }
247   else if (key == SDLK_SPACE || key == SDLK_RETURN)
248     {
249       /* Menu Hit */
250
251       menuaction = MN_HIT;
252       menu_change = YES;
253     }
254
255   /* FIXME: NO JOYSTICK SUPPORT */
256   /*#ifdef JOY_YES
257   else if (event.type == SDL_JOYBUTTONDOWN)
258    {
259       Joystick button: Continue: 
260      
261      done = 1;
262    }
263   #endif*/
264
265 }
266