Removed SurfingNet global and made tabs a parameter of newmenu_dotiny; Same procedure with MenuReordering which is replaced with newmenu_doreorder to set reordering flag specifically

This commit is contained in:
zicodxx 2010-06-30 15:26:27 +00:00
parent e0d95f4f1c
commit bff24ced0d
7 changed files with 69 additions and 41 deletions

View file

@ -3,6 +3,7 @@ D1X-Rebirth Changelog
20100630
--------
main/gameseq.c: If multi_level_sync() fails, restart menu music since level music is playing already
main/game.c, main/net_ipx.c, main/net_udp.c, main/newmenu.c, main/newmenu.h, main/weapon.c: Removed SurfingNet global and made tabs a parameter of newmenu_dotiny; Same procedure with MenuReordering which is replaced with newmenu_doreorder to set reordering flag specifically
20100629
--------

View file

@ -797,7 +797,7 @@ void show_help()
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "(Use \x85-# for F#. e.g. \x85-1 for F1)";
#endif
newmenu_dotiny( NULL, TXT_KEYS, nitems, m, free_help, NULL );
newmenu_dotiny( NULL, TXT_KEYS, nitems, m, 0, free_help, NULL );
}
void show_netgame_help()
@ -827,7 +827,7 @@ void show_netgame_help()
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "kick: (*)\t KICK PLAYER (*) FROM GAME (Host-only)";
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "KillReactor\t BLOW UP THE MINE (Host-only)";
newmenu_dotiny( NULL, TXT_KEYS, nitems, m, free_help, NULL );
newmenu_dotiny( NULL, TXT_KEYS, nitems, m, 0, free_help, NULL );
}
void show_newdemo_help()
@ -857,7 +857,7 @@ void show_newdemo_help()
m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "(Use \x85-# for F#. e.g. \x85-1 for F1)";
#endif
newmenu_dotiny( NULL, "DEMO PLAYBACK CONTROLS", nitems, m, free_help, NULL );
newmenu_dotiny( NULL, "DEMO PLAYBACK CONTROLS", nitems, m, 0, free_help, NULL );
}
//temp function until Matt cleans up game sequencing

View file

@ -93,7 +93,6 @@ int IPX_Socket=0;
int IPX_allow_socket_changes = 1;
IPX_sequence_packet IPX_Seq;
extern obj_position Player_init[MAX_PLAYERS];
extern ubyte SurfingNet;
extern void game_disable_cheats();
int net_ipx_wait_for_snyc();
@ -3241,7 +3240,6 @@ int net_ipx_join_poll( newmenu *menu, d_event *event, void *menu_text )
break;
case EVENT_WINDOW_CLOSE:
SurfingNet=0;
d_free(menu_text);
d_free(menus);
@ -3513,8 +3511,7 @@ void net_ipx_join_game()
}
num_active_ipx_changed = 1;
SurfingNet=1;
newmenu_dotiny("NETGAMES", NULL,IPX_MAX_NETGAMES+2, m, net_ipx_join_poll, menu_text);
newmenu_dotiny("NETGAMES", NULL,IPX_MAX_NETGAMES+2, m, 1, net_ipx_join_poll, menu_text);
}
void net_ipx_leave_game()

View file

@ -98,7 +98,6 @@ static int UDP_Socket[2] = { -1, -1 };
static char UDP_MyPort[6] = "";
struct _sockaddr GBcast; // global Broadcast address clients and hosts will use for lite_info exchange over LAN
extern obj_position Player_init[MAX_PLAYERS];
extern ubyte SurfingNet;
/* General UDP functions - START */
// Resolve address
@ -564,7 +563,6 @@ int net_udp_list_join_poll( newmenu *menu, d_event *event, void *menu_text )
break;
}
case EVENT_WINDOW_CLOSE:
SurfingNet=0;
d_free(menu_text);
d_free(menus);
@ -719,8 +717,7 @@ void net_udp_list_join_game()
}
num_active_udp_changed = 1;
SurfingNet=1;
newmenu_dotiny("NETGAMES", NULL,(UDP_NETGAMES_PPAGE+2), m, net_udp_list_join_poll, menu_text);
newmenu_dotiny("NETGAMES", NULL,(UDP_NETGAMES_PPAGE+2), m, 1, net_udp_list_join_poll, menu_text);
}
void net_udp_send_sequence_packet(UDP_sequence_packet seq, struct _sockaddr recv_addr)

View file

@ -84,6 +84,8 @@ struct newmenu
int citem;
char *filename;
int tiny_mode;
int tabs_flag;
int reorderitems;
int scroll_offset, last_scroll_check, max_displayable;
int all_text; //set true if all text items
int is_scroll_box; // Is this a scrolling box? Set to false at init
@ -95,10 +97,8 @@ struct newmenu
grs_bitmap nm_background, nm_background1;
grs_bitmap *nm_background_sub = NULL;
ubyte MenuReordering=0;
ubyte SurfingNet=0;
newmenu *newmenu_do4( char * title, char * subtitle, int nitems, newmenu_item * item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata, int citem, char * filename, int TinyMode );
newmenu *newmenu_do4( char * title, char * subtitle, int nitems, newmenu_item * item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata, int citem, char * filename, int TinyMode, int TabsFlag );
void newmenu_close() {
if (nm_background.bm_data)
@ -197,7 +197,7 @@ void nm_draw_background(int x1, int y1, int x2, int y2 )
}
// Draw a left justfied string
void nm_string( int w1,int x, int y, char * s)
void nm_string( int w1,int x, int y, char * s, int tabs_flag)
{
int w,h,aw,tx=0,t=0,i;
char *p,*s1,*s2,measure[2];
@ -213,7 +213,7 @@ void nm_string( int w1,int x, int y, char * s)
measure[1]=0;
if (!SurfingNet) {
if (!tabs_flag) {
p = strchr( s2, '\t' );
if (p && (w1>0) ) {
*p = '\0';
@ -226,9 +226,9 @@ void nm_string( int w1,int x, int y, char * s)
if (w1 > 0)
w = w1;
if (SurfingNet) {
if (tabs_flag) {
for (i=0;i<strlen(s2);i++) {
if (s2[i]=='\t' && SurfingNet) {
if (s2[i]=='\t' && tabs_flag) {
x=XTabs[t];
t++;
continue;
@ -242,7 +242,7 @@ void nm_string( int w1,int x, int y, char * s)
else
gr_string (x,y,s2);
if (!SurfingNet && p && (w1>0) ) {
if (!tabs_flag && p && (w1>0) ) {
gr_get_string_size(s1, &w, &h, &aw );
gr_string( x+w1-w, y, s1 );
@ -332,7 +332,7 @@ void nm_string_inputbox( int w, int x, int y, char * text, int current )
gr_string( x+w1, y, CURSOR_STRING );
}
void draw_item( newmenu_item *item, int is_current, int tiny )
void draw_item( newmenu_item *item, int is_current, int tiny, int tabs_flag )
{
if (tiny)
{
@ -355,7 +355,7 @@ void draw_item( newmenu_item *item, int is_current, int tiny )
switch( item->type ) {
case NM_TYPE_TEXT:
case NM_TYPE_MENU:
nm_string( item->w, item->x, item->y, item->text );
nm_string( item->w, item->x, item->y, item->text, tabs_flag );
break;
case NM_TYPE_SLIDER:
{
@ -376,7 +376,7 @@ void draw_item( newmenu_item *item, int is_current, int tiny )
case NM_TYPE_INPUT_MENU:
if ( item->group==0 )
{
nm_string( item->w, item->x, item->y, item->text );
nm_string( item->w, item->x, item->y, item->text, tabs_flag );
} else {
nm_string_inputbox( item->w, item->x, item->y, item->text, is_current );
}
@ -385,14 +385,14 @@ void draw_item( newmenu_item *item, int is_current, int tiny )
nm_string_inputbox( item->w, item->x, item->y, item->text, is_current );
break;
case NM_TYPE_CHECK:
nm_string( item->w, item->x, item->y, item->text );
nm_string( item->w, item->x, item->y, item->text, tabs_flag );
if (item->value)
nm_rstring( item->right_offset,item->x, item->y, CHECKED_CHECK_BOX );
else
nm_rstring( item->right_offset,item->x, item->y, NORMAL_CHECK_BOX );
break;
case NM_TYPE_RADIO:
nm_string( item->w, item->x, item->y, item->text );
nm_string( item->w, item->x, item->y, item->text, tabs_flag );
if (item->value)
nm_rstring( item->right_offset, item->x, item->y, CHECKED_RADIO_BOX );
else
@ -403,7 +403,7 @@ void draw_item( newmenu_item *item, int is_current, int tiny )
char text[10];
if (item->value < item->min_value) item->value=item->min_value;
if (item->value > item->max_value) item->value=item->max_value;
nm_string( item->w, item->x, item->y, item->text );
nm_string( item->w, item->x, item->y, item->text, tabs_flag );
sprintf( text, "%d", item->value );
nm_rstring( item->right_offset,item->x, item->y, text );
}
@ -450,9 +450,9 @@ int newmenu_do( char * title, char * subtitle, int nitems, newmenu_item * item,
return newmenu_do2( title, subtitle, nitems, item, subfunction, userdata, 0, NULL );
}
newmenu *newmenu_dotiny( char * title, char * subtitle, int nitems, newmenu_item * item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata )
newmenu *newmenu_dotiny( char * title, char * subtitle, int nitems, newmenu_item * item, int TabsFlag, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata )
{
return newmenu_do4( title, subtitle, nitems, item, subfunction, userdata, 0, NULL, 1 );
return newmenu_do4( title, subtitle, nitems, item, subfunction, userdata, 0, NULL, 1, TabsFlag );
}
@ -491,15 +491,48 @@ int newmenu_do2( char * title, char * subtitle, int nitems, newmenu_item * item,
return rval;
}
// Basically the same as do2 but sets reorderitems flag for weapon priority menu a bit redundant to get lose of a global variable but oh well...
int newmenu_doreorder( char * title, char * subtitle, int nitems, newmenu_item * item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata )
{
newmenu *menu;
window *wind;
int rval = -1;
menu = newmenu_do3( title, subtitle, nitems, item, subfunction, userdata, 0, NULL );
if (!menu)
return -1;
menu->reorderitems = 1;
menu->leave = 0; // no leaving this function until we're finished
wind = menu->wind; // avoid dereferencing a freed 'menu'
// newmenu_do2 and simpler get their own event loop
// This is so the caller doesn't have to provide a callback that responds to EVENT_NEWMENU_SELECTED
while (window_exists(wind))
{
event_process();
if (menu->leave)
{
rval = menu->citem;
if (window_exists(wind) && !window_close(wind))
menu->leave = 0; // user aborted close
}
}
return rval;
}
newmenu *newmenu_do3( char * title, char * subtitle, int nitems, newmenu_item * item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata, int citem, char * filename )
{
set_screen_mode(SCREEN_MENU);//hafta set the screen mode before calling or fonts might get changed/freed up if screen res changes
return newmenu_do4( title, subtitle, nitems, item, subfunction, userdata, citem, filename, 0 );
return newmenu_do4( title, subtitle, nitems, item, subfunction, userdata, citem, filename, 0, 0 );
}
newmenu *newmenu_do_fixedfont( char * title, char * subtitle, int nitems, newmenu_item * item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata, int citem, char * filename){
set_screen_mode(SCREEN_MENU);//hafta set the screen mode before calling or fonts might get changed/freed up if screen res changes
return newmenu_do4( title, subtitle, nitems, item, subfunction, userdata, citem, filename, 0);
return newmenu_do4( title, subtitle, nitems, item, subfunction, userdata, citem, filename, 0, 0);
}
@ -914,7 +947,7 @@ int newmenu_key_command(window *wind, d_event *event, newmenu *menu)
break;
case KEY_SHIFTED+KEY_UP:
if (MenuReordering && menu->citem!=0)
if (menu->reorderitems && menu->citem!=0)
{
Temp=menu->items[menu->citem].text;
TempVal=menu->items[menu->citem].value;
@ -927,7 +960,7 @@ int newmenu_key_command(window *wind, d_event *event, newmenu *menu)
}
break;
case KEY_SHIFTED+KEY_DOWN:
if (MenuReordering && menu->citem!=(menu->nitems-1))
if (menu->reorderitems && menu->citem!=(menu->nitems-1))
{
Temp=menu->items[menu->citem].text;
TempVal=menu->items[menu->citem].value;
@ -1395,7 +1428,7 @@ int newmenu_draw(window *wind, newmenu *menu)
for (i=menu->scroll_offset; i<menu->max_displayable+menu->scroll_offset; i++ )
{
menu->items[i].y-=(((int)LINE_SPACING)*menu->scroll_offset);
draw_item( &menu->items[i], (i==menu->citem && !menu->all_text),menu->tiny_mode );
draw_item( &menu->items[i], (i==menu->citem && !menu->all_text),menu->tiny_mode, menu->tabs_flag );
menu->items[i].y+=(((int)LINE_SPACING)*menu->scroll_offset);
}
@ -1510,7 +1543,7 @@ int newmenu_handler(window *wind, d_event *event, newmenu *menu)
return 0;
}
newmenu *newmenu_do4( char * title, char * subtitle, int nitems, newmenu_item * item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata, int citem, char * filename, int TinyMode )
newmenu *newmenu_do4( char * title, char * subtitle, int nitems, newmenu_item * item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata, int citem, char * filename, int TinyMode, int TabsFlag )
{
window *wind = NULL;
newmenu *menu;
@ -1536,6 +1569,8 @@ newmenu *newmenu_do4( char * title, char * subtitle, int nitems, newmenu_item *
menu->items = item;
menu->filename = filename;
menu->tiny_mode = TinyMode;
menu->tabs_flag = TabsFlag;
menu->reorderitems = 0; // will be set if needed
menu->leave = 1; // Default to leaving newmenu_doX function
menu->userdata = userdata;

View file

@ -72,7 +72,10 @@ extern int newmenu_do2(char *title, char *subtitle, int nitems, newmenu_item *it
extern newmenu *newmenu_do3(char *title, char *subtitle, int nitems, newmenu_item *item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata, int citem, char *filename);
// Tiny menu with GAME_FONT
extern newmenu *newmenu_dotiny(char * title, char * subtitle, int nitems, newmenu_item * item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata);
extern newmenu *newmenu_dotiny(char * title, char * subtitle, int nitems, newmenu_item * item, int TabsFlag, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata);
// Basically the same as do2 but sets reorderitems flag for weapon priority menu a bit redundant to get lose of a global variable but oh well...
extern int newmenu_doreorder(char * title, char * subtitle, int nitems, newmenu_item *item, int (*subfunction)(newmenu *menu, d_event *event, void *userdata), void *userdata);
// Sample Code:
/*

View file

@ -437,10 +437,7 @@ void ReorderPrimary ()
m[i].text=(char *)PRIMARY_WEAPON_NAMES(PlayerCfg.PrimaryOrder[i]);
m[i].value=PlayerCfg.PrimaryOrder[i];
}
MenuReordering=1;
i = newmenu_do("Reorder Primary","Shift+Up/Down arrow to move item", i, m, NULL, NULL);
MenuReordering=0;
i = newmenu_doreorder("Reorder Primary","Shift+Up/Down arrow to move item", i, m, NULL, NULL);
for (i=0;i<MAX_PRIMARY_WEAPONS+1;i++)
PlayerCfg.PrimaryOrder[i]=m[i].value;
}
@ -459,9 +456,7 @@ void ReorderSecondary ()
m[i].text=(char *)SECONDARY_WEAPON_NAMES(PlayerCfg.SecondaryOrder[i]);
m[i].value=PlayerCfg.SecondaryOrder[i];
}
MenuReordering=1;
i = newmenu_do("Reorder Secondary","Shift+Up/Down arrow to move item", i, m, NULL, NULL);
MenuReordering=0;
i = newmenu_doreorder("Reorder Secondary","Shift+Up/Down arrow to move item", i, m, NULL, NULL);
for (i=0;i<MAX_SECONDARY_WEAPONS+1;i++)
PlayerCfg.SecondaryOrder[i]=m[i].value;
}