b03fca10b8e03723f98bc026ba3d0962139beec3
[supertux.git] / src / misc.cpp
1 //  SuperTux
2 //  Copyright (C) 2004 Tobas Glaesser <tobi.web@gmx.de>
3 //
4 //  This program is free software; you can redistribute it and/or
5 //  modify it under the terms of the GNU General Public License
6 //  as published by the Free Software Foundation; either version 2
7 //  of the License, or (at your option) any later version.
8 //
9 //  This program is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 //  GNU General Public License for more details.
13 // 
14 //  You should have received a copy of the GNU General Public License
15 //  along with this program; if not, write to the Free Software
16 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
17
18 #include <config.h>
19
20 #include "misc.h"
21 #include "app/globals.h"
22
23 void MyConfig::customload(LispReader& reader)
24 {
25   reader.read_int ("keyboard-up", keymap.up);
26   reader.read_int ("keyboard-down", keymap.down);
27   reader.read_int ("keyboard-left", keymap.left);
28   reader.read_int ("keyboard-right", keymap.right);
29   reader.read_int ("keyboard-jump", keymap.jump);
30   reader.read_int ("keyboard-power", keymap.power);
31 }
32 void MyConfig::customsave(FILE * config)
33 {
34   fprintf(config, "\t(keyboard-up  %d)\n", keymap.up);
35   fprintf(config, "\t(keyboard-down  %d)\n", keymap.down);
36   fprintf(config, "\t(keyboard-left  %d)\n", keymap.left);
37   fprintf(config, "\t(keyboard-right %d)\n", keymap.right);
38   fprintf(config, "\t(keyboard-jump  %d)\n", keymap.jump);
39   fprintf(config, "\t(keyboard-power  %d)\n", keymap.power);
40 }
41
42 void process_options_menu(void)
43 {
44   switch (options_menu->check())
45     {
46     case MNID_OPENGL:
47 #ifndef NOOPENGL
48       if(use_gl != options_menu->isToggled(MNID_OPENGL))
49         {
50           use_gl = !use_gl;
51           Setup::video(screen->w,screen->h);
52         }
53 #else
54       options_menu->get_item_by_id(MNID_OPENGL).toggled = false;
55 #endif
56       break;
57     case MNID_FULLSCREEN:
58       if(use_fullscreen != options_menu->isToggled(MNID_FULLSCREEN))
59         {
60           use_fullscreen = !use_fullscreen;
61           Setup::video(screen->w,screen->h);
62         }
63       break;
64     case MNID_SOUND:
65       if(SoundManager::get()->sound_enabled() != options_menu->isToggled(MNID_SOUND))
66         SoundManager::get()->enable_sound(!SoundManager::get()->sound_enabled());
67       break;
68     case MNID_MUSIC:
69       if(SoundManager::get()->music_enabled() != options_menu->isToggled(MNID_MUSIC))
70         {
71           SoundManager::get()->enable_music(!SoundManager::get()->music_enabled());
72         }
73       break;
74     case MNID_SHOWFPS:
75       if(show_fps != options_menu->isToggled(MNID_SHOWFPS))
76         show_fps = !show_fps;
77       break;
78     }
79 }
80
81 void st_menu(void)
82 {
83   main_menu      = new Menu();
84   options_menu   = new Menu();
85   options_keys_menu     = new Menu();
86   options_joystick_menu = new Menu();
87   load_game_menu = new Menu();
88   save_game_menu = new Menu();
89   game_menu      = new Menu();
90   highscore_menu = new Menu();
91   contrib_menu   = new Menu();
92   contrib_subset_menu   = new Menu();
93   worldmap_menu  = new Menu();
94
95   main_menu->set_pos(screen->w/2, 335);
96   main_menu->additem(MN_GOTO, _("Start Game"),0,load_game_menu, MNID_STARTGAME);
97   main_menu->additem(MN_GOTO, _("Contrib Levels"),0,contrib_menu, MNID_LEVELS_CONTRIB);
98   main_menu->additem(MN_GOTO, _("Options"),0,options_menu, MNID_OPTIONMENU);
99   main_menu->additem(MN_ACTION, _("Level Editor"),0,0, MNID_LEVELEDITOR);
100   main_menu->additem(MN_ACTION, _("Credits"),0,0, MNID_CREDITS);
101   main_menu->additem(MN_ACTION, _("Quit"),0,0, MNID_QUITMAINMENU);
102
103   options_menu->additem(MN_LABEL,_("Options"),0,0);
104   options_menu->additem(MN_HL,"",0,0);
105 #ifndef NOOPENGL
106   options_menu->additem(MN_TOGGLE,_("OpenGL    "),use_gl,0, MNID_OPENGL);
107 #else
108   options_menu->additem(MN_DEACTIVE,_("OpenGL (not supported)"),use_gl, 0, MNID_OPENGL);
109 #endif
110   options_menu->additem(MN_TOGGLE,_("Fullscreen"),use_fullscreen,0, MNID_FULLSCREEN);
111   if(SoundManager::get()->audio_device_available())
112     {
113       options_menu->additem(MN_TOGGLE,_("Sound     "), SoundManager::get()->sound_enabled(),0, MNID_SOUND);
114       options_menu->additem(MN_TOGGLE,_("Music     "), SoundManager::get()->music_enabled(),0, MNID_MUSIC);
115     }
116   else
117     {
118       options_menu->additem(MN_DEACTIVE,_("Sound     "), false,0, MNID_SOUND);
119       options_menu->additem(MN_DEACTIVE,_("Music     "), false,0, MNID_MUSIC);
120     }
121   options_menu->additem(MN_TOGGLE,_("Show FPS  "),show_fps,0, MNID_SHOWFPS);
122   options_menu->additem(MN_GOTO,_("Setup Keys"),0,options_keys_menu);
123
124   if(use_joystick)
125     options_menu->additem(MN_GOTO,_("Setup Joystick"),0,options_joystick_menu);
126
127   options_menu->additem(MN_HL,"",0,0);
128   options_menu->additem(MN_BACK,_("Back"),0,0);
129   
130   options_keys_menu->additem(MN_LABEL,_("Keyboard Setup"),0,0);
131   options_keys_menu->additem(MN_HL,"",0,0);
132   options_keys_menu->additem(MN_CONTROLFIELD_KB,_("Left move"), 0,0, 0,&keymap.left);
133   options_keys_menu->additem(MN_CONTROLFIELD_KB,_("Right move"), 0,0, 0,&keymap.right);
134   options_keys_menu->additem(MN_CONTROLFIELD_KB,_("Up/Activate"), 0,0, 0,&keymap.up);
135   options_keys_menu->additem(MN_CONTROLFIELD_KB,_("Down/Duck"), 0,0, 0,&keymap.down);
136   options_keys_menu->additem(MN_CONTROLFIELD_KB,_("Jump"), 0,0, 0,&keymap.jump);
137   options_keys_menu->additem(MN_CONTROLFIELD_KB,_("Power/Run"), 0,0, 0,&keymap.power);
138   options_keys_menu->additem(MN_HL,"",0,0);
139   options_keys_menu->additem(MN_BACK,_("Back"),0,0);
140
141   if(use_joystick)
142     {
143     options_joystick_menu->additem(MN_LABEL,_("Joystick Setup"),0,0);
144     options_joystick_menu->additem(MN_HL,"",0,0);
145     //options_joystick_menu->additem(MN_CONTROLFIELD_JS,"X axis", 0,0, 0,&joystick_keymap.x_axis);
146     //options_joystick_menu->additem(MN_CONTROLFIELD_JS,"Y axis", 0,0, 0,&joystick_keymap.y_axis);
147     options_joystick_menu->additem(MN_CONTROLFIELD_JS,_("A button"), 0,0, 0,&joystick_keymap.a_button);
148     options_joystick_menu->additem(MN_CONTROLFIELD_JS,_("B button"), 0,0, 0,&joystick_keymap.b_button);
149     //options_joystick_menu->additem(MN_CONTROLFIELD_JS,"Start", 0,0, 0,&joystick_keymap.start_button);
150     //options_joystick_menu->additem(MN_CONTROLFIELD_JS,"DeadZone", 0,0, 0,&joystick_keymap.dead_zone);
151     options_joystick_menu->additem(MN_HL,"",0,0);
152     options_joystick_menu->additem(MN_BACK,_("Back"),0,0);
153     }
154   
155   load_game_menu->additem(MN_LABEL,_("Start Game"),0,0);
156   load_game_menu->additem(MN_HL,"",0,0);
157   load_game_menu->additem(MN_DEACTIVE,"Slot 1",0,0, 1);
158   load_game_menu->additem(MN_DEACTIVE,"Slot 2",0,0, 2);
159   load_game_menu->additem(MN_DEACTIVE,"Slot 3",0,0, 3);
160   load_game_menu->additem(MN_DEACTIVE,"Slot 4",0,0, 4);
161   load_game_menu->additem(MN_DEACTIVE,"Slot 5",0,0, 5);
162   load_game_menu->additem(MN_HL,"",0,0);
163   load_game_menu->additem(MN_BACK,_("Back"),0,0);
164
165   save_game_menu->additem(MN_LABEL,_("Save Game"),0,0);
166   save_game_menu->additem(MN_HL,"",0,0);
167   save_game_menu->additem(MN_DEACTIVE,"Slot 1",0,0, 1);
168   save_game_menu->additem(MN_DEACTIVE,"Slot 2",0,0, 2);
169   save_game_menu->additem(MN_DEACTIVE,"Slot 3",0,0, 3);
170   save_game_menu->additem(MN_DEACTIVE,"Slot 4",0,0, 4);
171   save_game_menu->additem(MN_DEACTIVE,"Slot 5",0,0, 5);
172   save_game_menu->additem(MN_HL,"",0,0);
173   save_game_menu->additem(MN_BACK,"Back",0,0);
174
175   game_menu->additem(MN_LABEL,_("Pause"),0,0);
176   game_menu->additem(MN_HL,"",0,0);
177   game_menu->additem(MN_ACTION,_("Continue"),0,0,MNID_CONTINUE);
178   game_menu->additem(MN_GOTO,_("Options"),0,options_menu);
179   game_menu->additem(MN_HL,"",0,0);
180   game_menu->additem(MN_ACTION,_("Abort Level"),0,0,MNID_ABORTLEVEL);
181
182   worldmap_menu->additem(MN_LABEL,_("Pause"),0,0);
183   worldmap_menu->additem(MN_HL,"",0,0);
184   worldmap_menu->additem(MN_ACTION,_("Continue"),0,0, WorldMapNS::MNID_RETURNWORLDMAP);
185   worldmap_menu->additem(MN_GOTO,_("Options"),0, options_menu);
186   worldmap_menu->additem(MN_HL,"",0,0);
187   worldmap_menu->additem(MN_ACTION,_("Quit Game"),0,0, WorldMapNS::MNID_QUITWORLDMAP);
188
189   highscore_menu->additem(MN_TEXTFIELD,_("Enter your name:"),0,0);
190 }
191
192 /* Free menus */
193 void st_menu_free()
194 {
195   delete worldmap_menu;
196   delete main_menu;
197   delete game_menu;
198   delete options_menu;
199   delete options_keys_menu;
200   delete options_joystick_menu;
201   delete highscore_menu;
202   delete contrib_menu;
203   delete contrib_subset_menu;
204   delete save_game_menu;
205   delete load_game_menu;
206 }