Respond to EVENT_NEWMENU_SELECTED for options_menuset and input_menuset, so the input menu will have THE event loop for kconfig
This commit is contained in:
parent
3d41df6447
commit
fc32bff5bc
|
@ -1,5 +1,9 @@
|
||||||
D2X-Rebirth Changelog
|
D2X-Rebirth Changelog
|
||||||
|
|
||||||
|
20100117
|
||||||
|
--------
|
||||||
|
main/menu.c: Respond to EVENT_NEWMENU_SELECTED for options_menuset and input_menuset, so the input menu will have THE event loop for kconfig
|
||||||
|
|
||||||
20100115
|
20100115
|
||||||
--------
|
--------
|
||||||
main/menu.c: For get_filename, put mode and find variables in a structure - fixing 64-bit problem and allowing freeing of PHYSFS file list in callback in future, respectively
|
main/menu.c: For get_filename, put mode and find variables in a structure - fixing 64-bit problem and allowing freeing of PHYSFS file list in callback in future, respectively
|
||||||
|
|
243
main/menu.c
243
main/menu.c
|
@ -257,6 +257,20 @@ int DoMenu()
|
||||||
|
|
||||||
extern void show_order_form(void); // John didn't want this in inferno.h so I just externed it.
|
extern void show_order_form(void); // John didn't want this in inferno.h so I just externed it.
|
||||||
|
|
||||||
|
int select_song_callback(listbox *lb, d_event *event, void *userdata)
|
||||||
|
{
|
||||||
|
int citem = listbox_get_citem(lb);
|
||||||
|
|
||||||
|
userdata = userdata;
|
||||||
|
if (event->type != EVENT_NEWMENU_SELECTED)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (citem > -1)
|
||||||
|
songs_play_song( citem, 0 );
|
||||||
|
|
||||||
|
return 1; // stay in menu until user escapes
|
||||||
|
}
|
||||||
|
|
||||||
//returns flag, true means quit menu
|
//returns flag, true means quit menu
|
||||||
void do_option ( int select)
|
void do_option ( int select)
|
||||||
{
|
{
|
||||||
|
@ -302,20 +316,16 @@ void do_option ( int select)
|
||||||
|
|
||||||
#ifndef RELEASE
|
#ifndef RELEASE
|
||||||
|
|
||||||
case MENU_PLAY_SONG: {
|
case MENU_PLAY_SONG:
|
||||||
int i;
|
{
|
||||||
char * m[MAX_NUM_SONGS];
|
char * m[MAX_NUM_SONGS];
|
||||||
|
int i;
|
||||||
|
|
||||||
for (i=0;i<Num_songs;i++) {
|
for (i=0;i<Num_songs;i++)
|
||||||
m[i] = Songs[i].filename;
|
m[i] = Songs[i].filename;
|
||||||
}
|
newmenu_listbox( "Select Song", Num_songs, m, 1, select_song_callback, NULL );
|
||||||
i = newmenu_listbox( "Select Song", Num_songs, m, 1, NULL, NULL );
|
|
||||||
|
|
||||||
if ( i > -1 ) {
|
|
||||||
songs_play_song( i, 0 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case MENU_LOAD_LEVEL:
|
case MENU_LOAD_LEVEL:
|
||||||
if (Current_mission || select_mission(0, "Load Level\n\nSelect mission"))
|
if (Current_mission || select_mission(0, "Load Level\n\nSelect mission"))
|
||||||
{
|
{
|
||||||
|
@ -682,19 +692,48 @@ try_again:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void do_sound_menu();
|
||||||
|
void input_config();
|
||||||
|
void change_res();
|
||||||
|
void do_graphics_menu();
|
||||||
|
void do_misc_menu();
|
||||||
|
|
||||||
int options_menuset(newmenu *menu, d_event *event, void *userdata)
|
int options_menuset(newmenu *menu, d_event *event, void *userdata)
|
||||||
{
|
{
|
||||||
if (event->type != EVENT_IDLE) // FIXME: Should become EVENT_ITEM_CHANGED later
|
switch (event->type)
|
||||||
return 0;
|
|
||||||
|
|
||||||
if ( newmenu_get_citem(menu)==4)
|
|
||||||
{
|
{
|
||||||
gr_palette_set_gamma(newmenu_get_items(menu)[4].value);
|
case EVENT_IDLE: // FIXME: Should become EVENT_ITEM_CHANGED later
|
||||||
|
if ( newmenu_get_citem(menu)==4)
|
||||||
|
{
|
||||||
|
gr_palette_set_gamma(newmenu_get_items(menu)[4].value);
|
||||||
|
}
|
||||||
|
return 0; // for idle events
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVENT_NEWMENU_SELECTED:
|
||||||
|
switch(newmenu_get_citem(menu))
|
||||||
|
{
|
||||||
|
case 0: do_sound_menu(); break;
|
||||||
|
case 2: input_config(); break;
|
||||||
|
case 5: change_res(); break;
|
||||||
|
case 6: do_graphics_menu(); break;
|
||||||
|
case 8: ReorderPrimary(); break;
|
||||||
|
case 9: ReorderSecondary(); break;
|
||||||
|
case 10: do_misc_menu(); break;
|
||||||
|
}
|
||||||
|
break; // stay in menu until escape
|
||||||
|
|
||||||
|
case EVENT_CLOSE:
|
||||||
|
write_player_file();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
userdata++; //kill warning
|
userdata++; //kill warning
|
||||||
|
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int gcd(int a, int b)
|
int gcd(int a, int b)
|
||||||
|
@ -798,29 +837,71 @@ int input_menuset(newmenu *menu, d_event *event, void *userdata)
|
||||||
int i;
|
int i;
|
||||||
int oc_type = PlayerCfg.ControlType;
|
int oc_type = PlayerCfg.ControlType;
|
||||||
newmenu_item *items = newmenu_get_items(menu);
|
newmenu_item *items = newmenu_get_items(menu);
|
||||||
|
int citem = newmenu_get_citem(menu);
|
||||||
|
|
||||||
if (event->type != EVENT_IDLE) // FIXME: Should become EVENT_ITEM_CHANGED later
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
userdata = userdata;
|
userdata = userdata;
|
||||||
|
|
||||||
for (i=0; i<4; i++ )
|
switch (event->type)
|
||||||
if (items[i].value) PlayerCfg.ControlType = i;
|
{
|
||||||
|
case EVENT_IDLE: // FIXME: Should become EVENT_ITEM_CHANGED later
|
||||||
|
for (i=0; i<4; i++ )
|
||||||
|
if (items[i].value) PlayerCfg.ControlType = i;
|
||||||
|
|
||||||
|
if (PlayerCfg.ControlType == 2) PlayerCfg.ControlType = CONTROL_MOUSE;
|
||||||
|
if (PlayerCfg.ControlType == 3) PlayerCfg.ControlType = CONTROL_JOYMOUSE;
|
||||||
|
|
||||||
|
if (oc_type != PlayerCfg.ControlType) {
|
||||||
|
kc_set_controls();
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerCfg.JoystickSensitivityX = items[10].value;
|
||||||
|
PlayerCfg.JoystickSensitivityY = items[11].value;
|
||||||
|
PlayerCfg.JoystickDeadzone = items[12].value;
|
||||||
|
PlayerCfg.MouseSensitivityX = items[15].value;
|
||||||
|
PlayerCfg.MouseSensitivityY = items[16].value;
|
||||||
|
PlayerCfg.MouseFilter = items[17].value;
|
||||||
|
return 0; // for idle events
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVENT_NEWMENU_SELECTED:
|
||||||
|
i = PlayerCfg.ControlType;
|
||||||
|
if (i == CONTROL_MOUSE) i = 2;
|
||||||
|
if (i == CONTROL_JOYMOUSE) i = 3;
|
||||||
|
|
||||||
if (PlayerCfg.ControlType == 2) PlayerCfg.ControlType = CONTROL_MOUSE;
|
switch (citem)
|
||||||
if (PlayerCfg.ControlType == 3) PlayerCfg.ControlType = CONTROL_JOYMOUSE;
|
{
|
||||||
|
case 5:
|
||||||
if (oc_type != PlayerCfg.ControlType) {
|
kconfig(i, items[i].text);
|
||||||
kc_set_controls();
|
break;
|
||||||
|
case 6:
|
||||||
|
kconfig(0, "KEYBOARD");
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
kconfig(4, "WEAPON KEYS");
|
||||||
|
break;
|
||||||
|
case 19:
|
||||||
|
show_help();
|
||||||
|
break;
|
||||||
|
case 20:
|
||||||
|
show_netgame_help();
|
||||||
|
break;
|
||||||
|
case 21:
|
||||||
|
show_newdemo_help();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break; // stay in menu
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void input_config()
|
void input_config()
|
||||||
{
|
{
|
||||||
newmenu_item m[22];
|
newmenu_item m[22];
|
||||||
int i, i1 = 5, j;
|
int i;
|
||||||
int nitems = 22;
|
int nitems = 22;
|
||||||
|
|
||||||
m[0].type = NM_TYPE_RADIO; m[0].text = "KEYBOARD"; m[0].value = 0; m[0].group = 0;
|
m[0].type = NM_TYPE_RADIO; m[0].text = "KEYBOARD"; m[0].value = 0; m[0].group = 0;
|
||||||
|
@ -846,54 +927,12 @@ void input_config()
|
||||||
m[20].type = NM_TYPE_MENU; m[20].text = "NETGAME SYSTEM KEYS";
|
m[20].type = NM_TYPE_MENU; m[20].text = "NETGAME SYSTEM KEYS";
|
||||||
m[21].type = NM_TYPE_MENU; m[21].text = "DEMO SYSTEM KEYS";
|
m[21].type = NM_TYPE_MENU; m[21].text = "DEMO SYSTEM KEYS";
|
||||||
|
|
||||||
do {
|
i = PlayerCfg.ControlType;
|
||||||
|
if (i == CONTROL_MOUSE) i = 2;
|
||||||
i = PlayerCfg.ControlType;
|
if (i==CONTROL_JOYMOUSE) i = 3;
|
||||||
if (i == CONTROL_MOUSE) i = 2;
|
m[i].value = 1;
|
||||||
if (i==CONTROL_JOYMOUSE) i = 3;
|
|
||||||
m[i].value = 1;
|
|
||||||
|
|
||||||
i1 = newmenu_do1(NULL, TXT_CONTROLS, nitems, m, input_menuset, NULL, i1);
|
|
||||||
|
|
||||||
PlayerCfg.JoystickSensitivityX = m[10].value;
|
|
||||||
PlayerCfg.JoystickSensitivityY = m[11].value;
|
|
||||||
PlayerCfg.JoystickDeadzone = m[12].value;
|
|
||||||
PlayerCfg.MouseSensitivityX = m[15].value;
|
|
||||||
PlayerCfg.MouseSensitivityY = m[16].value;
|
|
||||||
PlayerCfg.MouseFilter = m[17].value;
|
|
||||||
|
|
||||||
for (j = 0; j <= 3; j++)
|
|
||||||
if (m[j].value)
|
|
||||||
PlayerCfg.ControlType = j;
|
|
||||||
i = PlayerCfg.ControlType;
|
|
||||||
if (PlayerCfg.ControlType == 2)
|
|
||||||
PlayerCfg.ControlType = CONTROL_MOUSE;
|
|
||||||
if (PlayerCfg.ControlType == 3)
|
|
||||||
PlayerCfg.ControlType = CONTROL_JOYMOUSE;
|
|
||||||
|
|
||||||
switch (i1) {
|
|
||||||
case 5:
|
|
||||||
kconfig(i, m[i].text);
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
kconfig(0, "KEYBOARD");
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
kconfig(4, "WEAPON KEYS");
|
|
||||||
break;
|
|
||||||
case 19:
|
|
||||||
show_help();
|
|
||||||
break;
|
|
||||||
case 20:
|
|
||||||
show_netgame_help();
|
|
||||||
break;
|
|
||||||
case 21:
|
|
||||||
show_newdemo_help();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
} while (i1>-1);
|
|
||||||
|
|
||||||
|
newmenu_do1(NULL, TXT_CONTROLS, nitems, m, input_menuset, NULL, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_graphics_menu()
|
void do_graphics_menu()
|
||||||
|
@ -1094,45 +1133,29 @@ void do_multi_player_menu()
|
||||||
void do_options_menu()
|
void do_options_menu()
|
||||||
{
|
{
|
||||||
newmenu_item m[11];
|
newmenu_item m[11];
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
do {
|
m[ 0].type = NM_TYPE_MENU; m[ 0].text="Sound effects & music...";
|
||||||
m[ 0].type = NM_TYPE_MENU; m[ 0].text="Sound effects & music...";
|
m[ 1].type = NM_TYPE_TEXT; m[ 1].text="";
|
||||||
m[ 1].type = NM_TYPE_TEXT; m[ 1].text="";
|
m[ 2].type = NM_TYPE_MENU; m[ 2].text=TXT_CONTROLS_;
|
||||||
m[ 2].type = NM_TYPE_MENU; m[ 2].text=TXT_CONTROLS_;
|
m[ 3].type = NM_TYPE_TEXT; m[ 3].text="";
|
||||||
m[ 3].type = NM_TYPE_TEXT; m[ 3].text="";
|
|
||||||
|
|
||||||
m[ 4].type = NM_TYPE_SLIDER;
|
m[ 4].type = NM_TYPE_SLIDER;
|
||||||
m[ 4].text = TXT_BRIGHTNESS;
|
m[ 4].text = TXT_BRIGHTNESS;
|
||||||
m[ 4].value = gr_palette_get_gamma();
|
m[ 4].value = gr_palette_get_gamma();
|
||||||
m[ 4].min_value = 0;
|
m[ 4].min_value = 0;
|
||||||
m[ 4].max_value = 16;
|
m[ 4].max_value = 16;
|
||||||
|
|
||||||
m[ 5].type = NM_TYPE_MENU; m[ 5].text="Screen resolution...";
|
m[ 5].type = NM_TYPE_MENU; m[ 5].text="Screen resolution...";
|
||||||
#ifdef OGL
|
#ifdef OGL
|
||||||
m[ 6].type = NM_TYPE_MENU; m[ 6].text="Graphics Options...";
|
m[ 6].type = NM_TYPE_MENU; m[ 6].text="Graphics Options...";
|
||||||
#else
|
#else
|
||||||
m[ 6].type = NM_TYPE_TEXT; m[ 6].text="";
|
m[ 6].type = NM_TYPE_TEXT; m[ 6].text="";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m[ 7].type = NM_TYPE_TEXT; m[ 7].text="";
|
m[ 7].type = NM_TYPE_TEXT; m[ 7].text="";
|
||||||
m[ 8].type = NM_TYPE_MENU; m[ 8].text="Primary autoselect ordering...";
|
m[ 8].type = NM_TYPE_MENU; m[ 8].text="Primary autoselect ordering...";
|
||||||
m[ 9].type = NM_TYPE_MENU; m[ 9].text="Secondary autoselect ordering...";
|
m[ 9].type = NM_TYPE_MENU; m[ 9].text="Secondary autoselect ordering...";
|
||||||
m[10].type = NM_TYPE_MENU; m[10].text="Misc Options...";
|
m[10].type = NM_TYPE_MENU; m[10].text="Misc Options...";
|
||||||
|
|
||||||
i = newmenu_do1( NULL, TXT_OPTIONS, sizeof(m)/sizeof(*m), m, options_menuset, NULL, i );
|
newmenu_do1( NULL, TXT_OPTIONS, sizeof(m)/sizeof(*m), m, options_menuset, NULL, 0 );
|
||||||
|
|
||||||
switch(i) {
|
|
||||||
case 0: do_sound_menu(); break;
|
|
||||||
case 2: input_config(); break;
|
|
||||||
case 5: change_res(); break;
|
|
||||||
case 6: do_graphics_menu(); break;
|
|
||||||
case 8: ReorderPrimary(); break;
|
|
||||||
case 9: ReorderSecondary(); break;
|
|
||||||
case 10: do_misc_menu(); break;
|
|
||||||
}
|
|
||||||
|
|
||||||
} while( i>-1 );
|
|
||||||
|
|
||||||
write_player_file();
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue