1 /* -*- Mode: C++; c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil -*- 2 * 3 * Quadra, an action puzzle game 4 * Copyright (C) 1998-2000 Ludus Design 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 */ 20 21 #ifndef _HEADER_MENU 22 #define _HEADER_MENU 23 24 #include <vector> 25 26 #include "sound.h" 27 #include "sprite.h" 28 #include "inter.h" 29 #include "listbox.h" 30 #include "zone_list.h" 31 #include "stats.h" 32 #include "net_stuff.h" 33 #include "menu_base.h" 34 #include "score.h" 35 #include "highscores.h" 36 #include "game.h" 37 38 class Pane_option; 39 class Pane_info; 40 41 class Menu_do_nothing: public Menu { 42 public: 43 //It actually does something: 44 // wait for quitting==true and then ret() 45 virtual void step(); 46 }; 47 48 class Menu_intro: public Menu { 49 int warning; 50 Font *font2; 51 bool once; 52 public: 53 Menu_intro(); 54 virtual ~Menu_intro(); 55 virtual void init(); 56 virtual void step(); 57 }; 58 59 class Menu_main: public Menu { 60 Zone_bitmap *z_back; 61 Zone *b_single, *b_multi, *b_setup, *b_help, *b_quit; 62 Zone *b_tut, *b_option, *b_logo, *b_demo; 63 int delay; 64 int old_language; 65 bool version_warning; 66 void reset_delay(); 67 void redraw(); 68 public: 69 Menu_main(); 70 virtual void init(); 71 virtual void step(); 72 }; 73 74 class Menu_quitgame: public Menu_standard { 75 Font *font2; 76 public: 77 Menu_quitgame(); 78 virtual ~Menu_quitgame(); 79 virtual void init(); 80 virtual void step(); 81 }; 82 83 class Menu_help: public Menu_standard { 84 Font *font2; 85 Zone *b_quit; 86 Zone *b_www, *b_email, *b_online; 87 void call_internet(const char *s); 88 public: 89 Menu_help(); 90 virtual void init(); 91 virtual void step(); 92 }; 93 94 class Menu_option: public Menu_standard { 95 Bitmap *bit; 96 Font *font2; 97 Zone *b_quit; 98 int old_language,old_music,old_port; 99 char old_server[256]; 100 char old_proxy[128]; 101 public: 102 Menu_option(); 103 virtual ~Menu_option(); 104 virtual void step(); 105 }; 106 107 class Zone_color_select; 108 class Zone_set_key; 109 110 class Menu_setup: public Menu_standard { 111 Zone *b_quit, *b_player, *b_all_key; 112 Zone_text_input *z_nameinput; 113 Zone_text_input *z_passwdinput; 114 Zone_text_input *z_tnameinput; 115 Zone_text_input *z_tpasswdinput; 116 Zone_state_text *z_continuousdown; 117 Zone_state_text *z_h_repeat; 118 Zone_state_text *z_v_repeat; 119 Zone_state_text *z_shadow; 120 Zone_state_text *z_smooth; 121 Zone_set_key* z_key[7]; 122 Zone* b_key[7]; 123 Bitmap *bit; 124 public: 125 Menu_setup(); 126 virtual ~Menu_setup(); 127 virtual void step(); 128 }; 129 130 class Menu_setup_all_key: public Menu { 131 Zone_set_key **key; 132 Bitmap *bit; 133 Zone_text *z_text; 134 int quel; 135 public: 136 Menu_setup_all_key(Inter *in, Zone_set_key *k[]); 137 virtual void step(); 138 }; 139 140 class Menu_setup_key: public Menu { 141 Zone_set_key *key; 142 public: 143 Menu_setup_key(Inter *in, Zone_set_key *k, const char *t); 144 Menu_setup_key(Inter *in, Zone_set_key *k); 145 virtual void init(); 146 virtual void step(); 147 }; 148 149 class Menu_single: public Menu_standard { 150 Zone* normal, *sprint, *cancel; 151 Bitmap *bit; 152 Font *font2; 153 public: 154 Menu_single(); 155 virtual ~Menu_single(); 156 virtual void step(); 157 }; 158 159 class Menu_multi: public Menu_standard { 160 Zone* local, *net_lan, *net_internet, *cancel; 161 Bitmap *bit; 162 Font *font2; 163 public: 164 Menu_multi(); 165 virtual ~Menu_multi(); 166 virtual void step(); 167 }; 168 169 class Menu_multi_join: public Menu, Net_callable { 170 friend class Menu_multi_refresh; 171 friend class Menu_multi_internet; 172 Zone *b_create, *b_refresh, *b_join, *cancel, *b_info, *b_book; 173 Zone *b_refresh_internet; 174 Zone_text_field *z_game_status, *z_game_end, *z_game_minimum, *z_game_level, *z_game_speed, *z_game_type; 175 Zone_listbox *list_game; 176 Zone_listbox *list_player; 177 int selected_game; 178 Bitmap *bit_; 179 Font *font2_; 180 bool local_net; 181 char address[256]; 182 char game_end_text[256]; 183 int game_level_start; 184 void refresh_player(); 185 void clear_game_info(); 186 public: 187 Menu_multi_join(Bitmap *bit, Font *font, Font *font2, const Palette& p, bool plocal); 188 virtual ~Menu_multi_join(); 189 virtual void init(); 190 virtual void step(); 191 void addwatch(); 192 void removewatch(); 193 void refresh(); 194 virtual void net_call(Packet *p2); 195 void join_game(char *nam, Dword adr, int port); 196 }; 197 198 class Zone_input_address: public Zone_text_input { 199 Menu_multi_join *parent; 200 public: Zone_input_address(Menu_multi_join * p,const Palette & pal,Inter * in,char * s,int mlen,int px,int py,int pw)201 Zone_input_address(Menu_multi_join *p, const Palette &pal, Inter* in, char* s, int mlen, int px, int py, int pw): 202 Zone_text_input(in, pal, s, mlen, px, py, pw) { 203 parent = p; 204 } 205 virtual void lost_focus(int cancel); 206 }; 207 208 class Menu_multi_refresh: public Menu { 209 Menu_multi_join *parent; 210 Zone *cancel; 211 void find_local_games(); 212 void find_internet_games(); 213 void resolve(); 214 public: 215 Menu_multi_refresh(Menu_multi_join *p); 216 virtual void init(); 217 virtual void step(); 218 }; 219 220 class Qserv; 221 222 class Menu_multi_internet: public Menu { 223 Menu_multi_join *parent; 224 Zone *cancel; 225 Qserv *request; 226 Attack parse_attack(const char *s); 227 void parsegames(); 228 public: 229 Menu_multi_internet(Menu_multi_join *p); 230 virtual ~Menu_multi_internet(); 231 virtual void init(); 232 virtual void step(); 233 }; 234 235 class Menu_highscore: public Menu_standard { 236 Zone_list list; 237 Bitmap *bit; 238 Font *font2, *courrier, *courrier2; 239 Zone *b_quit, *b_again, *playdemo[MAX_SCORE], *playdemog[MAX_SCORE], *playlast; 240 Zone_text_button *sync; 241 Qserv *sync_request; 242 char *file_name; 243 int *play_again; 244 int time_demo; 245 bool show_playback; 246 Zone_text_field *status; 247 void play_demo(const char *st); 248 void start_sync(); 249 void step_sync(); 250 void stop_sync(); 251 void refresh_global(int& y); 252 public: 253 Menu_highscore(int hscore=-1, int *playagain=NULL, bool show_playb=false); 254 virtual ~Menu_highscore(); 255 virtual void step(); 256 }; 257 258 class Menu_stat: public Menu_standard, public Notifyable { 259 Zone_list list; 260 class Colonne { 261 public: 262 int width, page; 263 CS::Stat_type quel_stat; 264 char titre[32]; 265 Zone_text_button *z_titre; 266 bool sort_me; 267 Colonne(); 268 void set_titre(const char *s); 269 }; 270 std::vector<Colonne*> col; 271 Bitmap *bit; 272 Font *font2; 273 Zone *b_quit, *b_restart, *b_stop; 274 std::vector<Zone_text_button*> b_page; 275 Score score; 276 Font *fcourrier[MAXTEAMS]; 277 int active_sort, active_page; 278 const int c_start; 279 const int c_gap; 280 void display(); 281 void calculate_total(bool force_blit); 282 void add_title(Colonne &col, int *px, Bitmap *bit); 283 void set_sort(int quel); 284 void change_page(int p); 285 void init_columns(Bitmap *bit); 286 void sort(int quel_stat, int new_order[], bool reversed=false); 287 public: 288 Menu_stat(); 289 virtual ~Menu_stat(); 290 virtual void init(); 291 virtual void step(); 292 virtual void notify(); 293 }; 294 295 class Menu_multi_checkip: public Menu { 296 Bitmap *bit_; 297 Zone *cancel; 298 public: 299 Menu_multi_checkip(Bitmap *bit, Font *font, Font *font2, const Palette& p); 300 virtual void step(); 301 }; 302 303 class Menu_multi_book: public Menu { 304 Bitmap *bit_; 305 Font *font2_; 306 Zone *cancel; 307 char buf[10][256]; 308 Zone *b_connect[10]; 309 Zone_text_field *status; 310 bool looking, connect_failed; 311 const char* address; 312 public: 313 Menu_multi_book(Bitmap *bit, Font *font, Font *font2, const Palette& p, const char *adr); 314 virtual void init(); 315 virtual void step(); 316 }; 317 318 class Menu_internet: public Menu { 319 const char *command; 320 public: 321 Menu_internet(const char *c); 322 virtual void init(); 323 virtual void step(); 324 }; 325 326 class Menu_startserver: public Menu_quit { 327 Bitmap *bit; 328 public: 329 Menu_startserver(); 330 virtual ~Menu_startserver(); 331 virtual void step(); 332 }; 333 334 class Menu_startconnect: public Menu_quit { 335 Bitmap *bit; 336 Module *module; 337 Font *font2; 338 public: 339 Menu_startconnect(const char *adr, bool rejoin); 340 virtual ~Menu_startconnect(); 341 virtual void step(); 342 }; 343 344 #endif 345