Make pause box a window
This commit is contained in:
parent
b97e08dfdc
commit
b3b87fc62d
|
@ -1,5 +1,9 @@
|
|||
D1X-Rebirth Changelog
|
||||
|
||||
20100109
|
||||
--------
|
||||
arch/include/window.h, main/game.c, main/gamecntl.c, main/gamerend.c: Make pause box a window
|
||||
|
||||
20100108
|
||||
--------
|
||||
arch/sdl/event.h, main/menu.c, main/newmenu.c, main/newmenu.h: Add EVENT_NEWMENU_SELECTED, allowing a newmenu/listbox selection to be handled in the callback. Demonstrate with "Select Song" menu
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
* -kreator 2009-05-06
|
||||
*/
|
||||
|
||||
#ifndef DESCENT_WINDOW_H
|
||||
#define DESCENT_WINDOW_H
|
||||
|
||||
#include "event.h"
|
||||
#include "gr.h"
|
||||
|
||||
|
@ -23,3 +26,4 @@ extern void window_set_visible(window *wind, int visible);
|
|||
extern int window_is_visible(window *wind);
|
||||
extern grs_canvas *window_get_canvas(window *wind);
|
||||
extern int window_send_event(window *wind, d_event *event);
|
||||
#endif
|
|
@ -1016,7 +1016,7 @@ int game_handler(window *wind, d_event *event, void *data)
|
|||
|
||||
ReadControls(); // will have its own event(s) eventually
|
||||
if (window_get_front() != wind)
|
||||
return 1; // in automap
|
||||
return 1;
|
||||
|
||||
GameProcessFrame();
|
||||
|
||||
|
|
110
main/gamecntl.c
110
main/gamecntl.c
|
@ -26,6 +26,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
#include <stdarg.h>
|
||||
|
||||
#include "pstypes.h"
|
||||
#include "window.h"
|
||||
#include "console.h"
|
||||
#include "inferno.h"
|
||||
#include "game.h"
|
||||
|
@ -222,13 +223,66 @@ void format_time(char *str, int secs_int)
|
|||
|
||||
extern int netplayerinfo_on;
|
||||
|
||||
//Process selected keys until game unpaused. returns key that left pause (p or esc)
|
||||
int do_game_pause()
|
||||
//Process selected keys until game unpaused
|
||||
int pause_handler(window *wind, d_event *event, char *msg)
|
||||
{
|
||||
int key;
|
||||
char msg[1000];
|
||||
|
||||
if (event->type == EVENT_DRAW)
|
||||
{
|
||||
show_boxed_message(msg, 1);
|
||||
return 1;
|
||||
}
|
||||
else if (event->type == EVENT_CLOSE)
|
||||
{
|
||||
game_flush_inputs();
|
||||
reset_cockpit();
|
||||
start_time();
|
||||
if (EXT_MUSIC_ON)
|
||||
ext_music_resume();
|
||||
digi_resume_all();
|
||||
d_free(msg);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
timer_delay2(50);
|
||||
|
||||
key = key_inkey();
|
||||
|
||||
switch (key) {
|
||||
case 0:
|
||||
break;
|
||||
case KEY_ESC:
|
||||
//Function_mode = FMODE_MENU; // Don't like this, just press escape twice (kreatordxx)
|
||||
window_close(wind);
|
||||
break;
|
||||
case KEY_F1:
|
||||
show_help();
|
||||
break;
|
||||
case KEY_PAUSE:
|
||||
window_close(wind);
|
||||
break;
|
||||
case KEY_ALTED+KEY_ENTER:
|
||||
case KEY_ALTED+KEY_PADENTER:
|
||||
gr_toggle_fullscreen();
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int do_game_pause()
|
||||
{
|
||||
char *msg;
|
||||
char total_time[9],level_time[9];
|
||||
int Game_paused;
|
||||
|
||||
MALLOC(msg, char, 1024);
|
||||
if (!msg)
|
||||
return 0;
|
||||
|
||||
#ifdef NETWORK
|
||||
if (Game_mode & GM_MULTI)
|
||||
|
@ -249,50 +303,12 @@ int do_game_pause()
|
|||
sprintf(msg,"PAUSE\n\nSkill level: %s\nHostages on board: %d\nTime on level: %s\nTotal time in game: %s",(*(&TXT_DIFFICULTY_1 + (Difficulty_level))),Players[Player_num].hostages_on_board,level_time,total_time);
|
||||
else
|
||||
sprintf(msg,"PAUSE\n\nSkill level: %s\nHostages on board: %d\n",(*(&TXT_DIFFICULTY_1 + (Difficulty_level))),Players[Player_num].hostages_on_board);
|
||||
Game_paused=1;
|
||||
set_screen_mode(SCREEN_MENU);
|
||||
show_boxed_message(msg, 1);
|
||||
|
||||
while (Game_paused)
|
||||
{
|
||||
timer_delay2(50);
|
||||
#ifdef OGL
|
||||
show_boxed_message(msg, 1);
|
||||
#endif
|
||||
if (!window_create(&grd_curscreen->sc_canvas, 0, 0, SWIDTH, SHEIGHT, (int (*)(window *, d_event *, void *))pause_handler, msg))
|
||||
d_free(msg);
|
||||
|
||||
key = key_inkey();
|
||||
|
||||
switch (key) {
|
||||
case 0:
|
||||
break;
|
||||
case KEY_ESC:
|
||||
Function_mode = FMODE_MENU;
|
||||
Game_paused=0;
|
||||
break;
|
||||
case KEY_F1:
|
||||
show_help();
|
||||
show_boxed_message(TXT_PAUSE, 1);
|
||||
break;
|
||||
case KEY_PAUSE:
|
||||
Game_paused=0;
|
||||
break;
|
||||
case KEY_ALTED+KEY_ENTER:
|
||||
case KEY_ALTED+KEY_PADENTER:
|
||||
gr_toggle_fullscreen();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
game_flush_inputs();
|
||||
reset_cockpit();
|
||||
start_time();
|
||||
if (EXT_MUSIC_ON)
|
||||
ext_music_resume();
|
||||
digi_resume_all();
|
||||
|
||||
return key;
|
||||
return 0 /*key*/; // Keycode returning ripped out (kreatordxx)
|
||||
}
|
||||
|
||||
void HandleEndlevelKey(int key)
|
||||
|
@ -308,10 +324,10 @@ void HandleEndlevelKey(int key)
|
|||
|
||||
#if defined(__APPLE__) || defined(macintosh)
|
||||
if ( key == (KEY_COMMAND+KEY_P) )
|
||||
key = do_game_pause();
|
||||
/*key =*/ do_game_pause();
|
||||
#endif
|
||||
if (key == KEY_PAUSE)
|
||||
key = do_game_pause(); //so esc from pause will end level
|
||||
/*key =*/ do_game_pause(); //so esc from pause will end level. Removed: Don't like this, just press escape twice (kreatordxx)
|
||||
|
||||
if (key == KEY_ESC) {
|
||||
stop_endlevel_sequence();
|
||||
|
|
|
@ -500,9 +500,6 @@ void show_boxed_message(char *msg, int RenderFlag)
|
|||
int w,h,aw;
|
||||
int x,y;
|
||||
|
||||
if (Function_mode==FMODE_GAME && RenderFlag)
|
||||
game_do_render_frame(0);
|
||||
|
||||
gr_set_current_canvas(NULL);
|
||||
gr_set_curfont( MEDIUM1_FONT );
|
||||
gr_set_fontcolor(BM_XRGB(31, 31, 31), -1);
|
||||
|
@ -514,6 +511,9 @@ void show_boxed_message(char *msg, int RenderFlag)
|
|||
nm_draw_background(x-BORDERX,y-BORDERY,x+w+BORDERX,y+h+BORDERY);
|
||||
|
||||
gr_printf( 0x8000, y, msg );
|
||||
|
||||
// If we haven't drawn behind it, need to flip
|
||||
if (!RenderFlag)
|
||||
gr_flip();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue