first item in menu is highlighted by default now.
[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         
151       if(menuitem == 1)
152         {
153           if(use_sound)
154             drawcenteredtext("Sound ON", 224, letters_red, NO_UPDATE);
155           else
156             drawcenteredtext("Sound OFF", 224, letters_red, NO_UPDATE);
157           if(menuaction == MN_HIT) /* Disable/Enable sound */
158             {
159               if(use_sound)
160                 {
161                   if(playing_music())
162                     halt_music();
163                   use_sound = 0;
164                 }
165               else
166                 {
167                   use_sound = 1;
168                   if (playing_music())
169                     {
170                       switch (current_music)
171                         {
172                         case LEVEL_MUSIC:
173                           play_music(level_song, 1);
174                           break;
175                         case HERRING_MUSIC:
176                           play_music(herring_song, 1);
177                           break;
178                         case HURRYUP_MUSIC: // keep the compiler happy
179                         case NO_MUSIC:      // keep the compiler happy for the moment :-)
180                         {}
181                           /*default:*/
182                         }
183                     }
184                 }
185                 menu_change = YES;
186             }
187         }
188       else
189         {
190           if(use_sound)
191             drawcenteredtext("Sound ON", 224, letters_blue, NO_UPDATE);
192           else
193             drawcenteredtext("Sound OFF", 224, letters_blue, NO_UPDATE);
194         }
195
196       if(menuitem == 2)
197         {
198           drawcenteredtext("Back", 256, letters_red, NO_UPDATE);
199           if(menuaction == MN_HIT) /* Go back to main menu. */
200             {
201               menumenu = MENU_MAIN;
202               menu_change = YES;
203             }
204         }
205       else
206         drawcenteredtext("Back", 256, letters_blue, NO_UPDATE);
207
208     }
209
210   menuaction = -1;
211
212   SDL_Flip(screen);
213
214   return quit;
215 }
216
217 /* Check for menu event */
218 void menu_event(SDLKey key)
219 {
220
221
222   if (key == SDLK_UP)
223     {
224       /* Menu Up */
225
226       menuaction = MN_UP;
227       menu_change = YES;
228     }
229   else if (key == SDLK_DOWN)
230     {
231       /* Menu Down */
232
233       menuaction = MN_DOWN;
234       menu_change = YES;
235     }
236   else if (key == SDLK_SPACE || key == SDLK_RETURN)
237     {
238       /* Menu Hit */
239
240       menuaction = MN_HIT;
241       menu_change = YES;
242     }
243     
244   /* FIXME: NO JOYSTICK SUPPORT */
245   /*#ifdef JOY_YES
246   else if (event.type == SDL_JOYBUTTONDOWN)
247    {
248       Joystick button: Continue: 
249      
250      done = 1;
251    }
252   #endif*/
253
254 }
255