/* * in game menu_loop, will called every game loop. * As long as this menu is displayed the gamekeys will not work. * * the drawings will be done from the main loop. So we won't * have to draw anything on our own. * * Pressing ESC will bring you back to the game. */ void game_menu_loop (SDL_Event * event, int eventstate) { int done; if (menu == NULL) return; menu_draw (menu); done = menu_event_loop (menu, event, eventstate); /* * check if one of the buttons was pressed */ if (done != 0) { if (menu->focus->id == 2 && (GT_MP_PTPM || GT_SP)) { /* End Round */ bman.timeout = -GAME_OVERTIMEOUT; } else if (menu->focus->id == 3) { /* End Game */ /* send network update */ if (GT_MP) net_game_send_delplayer (bman.p_nr); bman.state = GS_quit; } else { /* Quit Menu */ menu_delete (menu); menu = NULL; gfx_blitdraw (); draw_field (); } } };
/* singleplayer menü with some options you can make */ void single_menu () { int i, p, eventstate = 0, done = 0, second_player = 0; _charlist nrplayerlist[MAX_PLAYERS + 1]; _charlist *selnrplayer = &nrplayerlist[bman.ai_players]; _menu *menu; _menuitem *aiplayer = NULL; SDL_Event event; /* fill in the nrplayerlist */ for (p = 0, i = 0; p < MAX_PLAYERS + 1; i++) { sprintf (nrplayerlist[i].text, "%d", p); if (p < MAX_PLAYERS - 1) nrplayerlist[i].next = &nrplayerlist[i + 1]; else nrplayerlist[i].next = NULL; p++; } game_resetdata (); menu = menu_new ("Single Game", 380,240); menu_create_text (menu, "numpl", 20, 50, 12, 2, COLOR_yellow, "Number of\nAI Players"); aiplayer = menu_create_list (menu, "AI Players", 40, 90, 50, 100, nrplayerlist, &selnrplayer, 3); menu_create_button (menu,"Change Playernames" ,160, 50, 210, 4); menu_create_bool (menu, "Use Second Player", 160, 90, 210, &second_player, 5); menu_create_button (menu, "Game Options", 180, 130, 150, 6); menu_create_button (menu, "Map Options", 180, 170, 150, 7); menu_create_button (menu, "Main Menu", 30, 220, 150, 1); menu_create_button (menu, "Start", 220, 220, 150, 2); menu_focus_id (menu, 2); menu->looprunning = 1; menu_draw (menu); do { gfx_blitdraw (); eventstate = s_fetchevent (&event); done = menu_event_loop (menu, &event, eventstate); if (done > 0 && menu->focus->id == 6) { done = 0; mapgamesetting (); } if (done > 0 && menu->focus->id == 7) { done = 0; mapmenu (); } if (done > 0 && menu->focus->id == 4) { done = 0; playernamemenu (); } if (done > 0 && menu->focus->id == 3) done = 0; s_calctimesync (); } while (!done); bman.ai_players = selnrplayer - &nrplayerlist[0]; if (menu->focus->id == 2) single_playergame (second_player, bman.ai_players); menu_delete (menu); };