Navigation Menu

Skip to content

Commit

Permalink
Refactor|Game Menu: Dynamically construct the "InventoryOptions" page
Browse files Browse the repository at this point in the history
  • Loading branch information
danij-deng committed Jun 29, 2012
1 parent f452ae9 commit 688e7f7
Showing 1 changed file with 243 additions and 41 deletions.
284 changes: 243 additions & 41 deletions doomsday/plugins/common/src/hu_menu.c
Expand Up @@ -678,46 +678,6 @@ static mn_object_t HudMenuObjects[] = {
{ MN_NONE }
};

#if __JHERETIC__ || __JHEXEN__
mndata_slider_t sld_inv_uptime = { 0, 30, 0, 1.f, true, "hud-inventory-timer", "Disabled", NULL, " second", " seconds" };
mndata_slider_t sld_inv_maxvisslots = { 0, 16, 0, 1, false, "hud-inventory-slot-max", "Automatic" };

mndata_text_t txt_inv_select_mode = { "Select Mode" };
mndata_text_t txt_inv_wrap_around = { "Wrap Around" };
mndata_text_t txt_inv_choose_and_use = { "Choose And Use" };
mndata_text_t txt_inv_next_if_failed = { "Select Next If Use Failed" };
mndata_text_t txt_inv_autohide = { "AutoHide" };
mndata_text_t txt_inv_fullscreen = { "Fullscreen HUD" };
mndata_text_t txt_inv_full_max_visible_slots = { "Max Visible Slots" };
mndata_text_t txt_inv_full_show_empty_slots = { "Show Empty Slots" };

mndata_button_t btn_inv_select_mode = { true, "ctl-inventory-mode" };
mndata_button_t btn_inv_wrap_around = { true, "ctl-inventory-wrap" };
mndata_button_t btn_inv_choose_and_use = { true, "ctl-inventory-use-immediate" };
mndata_button_t btn_inv_next_if_failed = { true, "ctl-inventory-use-next" };
mndata_button_t btn_inv_full_show_empty_slots = { true, "hud-inventory-slot-showempty" };

static mn_object_t InventoryMenuObjects[] = {
{ MN_TEXT, 0, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR1, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_inv_select_mode },
{ MN_BUTTON, 0, 0, { 0, 0 }, 's',MENU_FONT1, MENU_COLOR3, MNButton_Ticker, MNButton_UpdateGeometry, MNButton_Drawer, { Hu_MenuCvarButton, NULL, NULL, NULL, NULL, Hu_MenuDefaultFocusAction }, MNButton_CommandResponder, NULL, NULL, &btn_inv_select_mode },
{ MN_TEXT, 0, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR1, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_inv_wrap_around },
{ MN_BUTTON, 0, 0, { 0, 0 }, 'w',MENU_FONT1, MENU_COLOR3, MNButton_Ticker, MNButton_UpdateGeometry, MNButton_Drawer, { Hu_MenuCvarButton, NULL, NULL, NULL, NULL, Hu_MenuDefaultFocusAction }, MNButton_CommandResponder, NULL, NULL, &btn_inv_wrap_around },
{ MN_TEXT, 0, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR1, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_inv_choose_and_use },
{ MN_BUTTON, 0, 0, { 0, 0 }, 'c',MENU_FONT1, MENU_COLOR3, MNButton_Ticker, MNButton_UpdateGeometry, MNButton_Drawer, { Hu_MenuCvarButton, NULL, NULL, NULL, NULL, Hu_MenuDefaultFocusAction }, MNButton_CommandResponder, NULL, NULL, &btn_inv_choose_and_use },
{ MN_TEXT, 0, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR1, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_inv_next_if_failed },
{ MN_BUTTON, 0, 0, { 0, 0 }, 'n',MENU_FONT1, MENU_COLOR3, MNButton_Ticker, MNButton_UpdateGeometry, MNButton_Drawer, { Hu_MenuCvarButton, NULL, NULL, NULL, NULL, Hu_MenuDefaultFocusAction }, MNButton_CommandResponder, NULL, NULL, &btn_inv_next_if_failed },
{ MN_TEXT, 0, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR1, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_inv_autohide },
{ MN_SLIDER, 0, 0, { 0, 0 }, 'h',MENU_FONT1, MENU_COLOR3, MNSlider_Ticker, MNSlider_TextualValueUpdateGeometry, MNSlider_TextualValueDrawer, { Hu_MenuCvarSlider, NULL, NULL, NULL, NULL, Hu_MenuDefaultFocusAction }, MNSlider_CommandResponder, NULL, NULL, &sld_inv_uptime },

{ MN_TEXT, 1, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR2, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_inv_fullscreen },
{ MN_TEXT, 1, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR1, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_inv_full_max_visible_slots },
{ MN_SLIDER, 1, 0, { 0, 0 }, 'v',MENU_FONT1, MENU_COLOR3, MNSlider_Ticker, MNSlider_TextualValueUpdateGeometry, MNSlider_TextualValueDrawer, { Hu_MenuCvarSlider, NULL, NULL, NULL, NULL, Hu_MenuDefaultFocusAction }, MNSlider_CommandResponder, NULL, NULL, &sld_inv_maxvisslots },
{ MN_TEXT, 1, 0, { 0, 0 }, 0, MENU_FONT1, MENU_COLOR1, MNText_Ticker, MNText_UpdateGeometry, MNText_Drawer, { NULL }, NULL, NULL, NULL, &txt_inv_full_show_empty_slots },
{ MN_BUTTON, 1, 0, { 0, 0 }, 'e',MENU_FONT1, MENU_COLOR3, MNButton_Ticker, MNButton_UpdateGeometry, MNButton_Drawer, { Hu_MenuCvarButton, NULL, NULL, NULL, NULL, Hu_MenuDefaultFocusAction }, MNButton_CommandResponder, NULL, NULL, &btn_inv_full_show_empty_slots },
{ MN_NONE }
};
#endif

mndata_listitem_t listit_weapons_order[NUM_WEAPON_TYPES] = {
#if __JDOOM__ || __JDOOM64__
{ (const char*)TXT_WEAPON1, WT_FIRST },
Expand Down Expand Up @@ -2497,13 +2457,255 @@ void Hu_MenuInitWeaponsPage(void)
void Hu_MenuInitInventoryOptionsPage(void)
{
const Point2Raw origin = { 78, 48 };
mn_object_t* objects, *ob;
const uint numObjects = 16;
mn_page_t* page;

page = Hu_MenuNewPage("InventoryOptions", &origin, 0, Hu_MenuPageTicker, NULL, NULL, NULL);
MNPage_SetTitle(page, "Inventory Options");
MNPage_SetPredefinedFont(page, MENU_FONT1, FID(GF_FONTA));
MNPage_SetPreviousPage(page, Hu_MenuFindPageByName("Options"));
page->objects = InventoryMenuObjects;

objects = Z_Calloc(sizeof(*objects) * numObjects, PU_GAMESTATIC, 0);

if(!objects) Con_Error("Hu_MenuInitInventoryPage: Failed on allocation of %lu bytes for menu objects.", (unsigned long) (sizeof(*objects) * numObjects));
ob = objects;

ob->_type = MN_TEXT;
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR1;
ob->ticker = MNText_Ticker;
ob->updateGeometry = MNText_UpdateGeometry;
ob->drawer = MNText_Drawer;
ob->_typedata = Z_Calloc(sizeof(mndata_text_t), PU_GAMESTATIC, 0);
{ mndata_text_t* text = (mndata_text_t*)ob->_typedata;
text->text = "Select Mode";
}
ob++;

ob->_type = MN_BUTTON;
ob->_shortcut = 's';
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR3;
ob->ticker = MNButton_Ticker;
ob->updateGeometry = MNButton_UpdateGeometry;
ob->drawer = MNButton_Drawer;
ob->actions[MNA_MODIFIED].callback = Hu_MenuCvarButton;
ob->actions[MNA_FOCUS].callback = Hu_MenuDefaultFocusAction;
ob->cmdResponder = MNButton_CommandResponder;
ob->_typedata = Z_Calloc(sizeof(mndata_button_t), PU_GAMESTATIC, 0);
{ mndata_button_t* btn = (mndata_button_t*)ob->_typedata;
btn->staydownMode = true;
btn->data = "ctl-inventory-mode";
}
ob++;

ob->_type = MN_TEXT;
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR1;
ob->ticker = MNText_Ticker;
ob->updateGeometry = MNText_UpdateGeometry;
ob->drawer = MNText_Drawer;
ob->_typedata = Z_Calloc(sizeof(mndata_text_t), PU_GAMESTATIC, 0);
{ mndata_text_t* text = (mndata_text_t*)ob->_typedata;
text->text = "Wrap Around";
}
ob++;

ob->_type = MN_BUTTON;
ob->_shortcut = 'w';
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR3;
ob->ticker = MNButton_Ticker;
ob->updateGeometry = MNButton_UpdateGeometry;
ob->drawer = MNButton_Drawer;
ob->actions[MNA_MODIFIED].callback = Hu_MenuCvarButton;
ob->actions[MNA_FOCUS].callback = Hu_MenuDefaultFocusAction;
ob->cmdResponder = MNButton_CommandResponder;
ob->_typedata = Z_Calloc(sizeof(mndata_button_t), PU_GAMESTATIC, 0);
{ mndata_button_t* btn = (mndata_button_t*)ob->_typedata;
btn->staydownMode = true;
btn->data = "ctl-inventory-wrap";
}
ob++;

ob->_type = MN_TEXT;
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR1;
ob->ticker = MNText_Ticker;
ob->updateGeometry = MNText_UpdateGeometry;
ob->drawer = MNText_Drawer;
ob->_typedata = Z_Calloc(sizeof(mndata_text_t), PU_GAMESTATIC, 0);
{ mndata_text_t* text = (mndata_text_t*)ob->_typedata;
text->text = "Choose And Use";
}
ob++;

ob->_type = MN_BUTTON;
ob->_shortcut = 'c';
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR3;
ob->ticker = MNButton_Ticker;
ob->updateGeometry = MNButton_UpdateGeometry;
ob->drawer = MNButton_Drawer;
ob->actions[MNA_MODIFIED].callback = Hu_MenuCvarButton;
ob->actions[MNA_FOCUS].callback = Hu_MenuDefaultFocusAction;
ob->cmdResponder = MNButton_CommandResponder;
ob->_typedata = Z_Calloc(sizeof(mndata_button_t), PU_GAMESTATIC, 0);
{ mndata_button_t* btn = (mndata_button_t*)ob->_typedata;
btn->staydownMode = true;
btn->data = "ctl-inventory-use-immediate";
}
ob++;

ob->_type = MN_TEXT;
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR1;
ob->ticker = MNText_Ticker;
ob->updateGeometry = MNText_UpdateGeometry;
ob->drawer = MNText_Drawer;
ob->_typedata = Z_Calloc(sizeof(mndata_text_t), PU_GAMESTATIC, 0);
{ mndata_text_t* text = (mndata_text_t*)ob->_typedata;
text->text = "Select Next If Use Failed";
}
ob++;

ob->_type = MN_BUTTON;
ob->_shortcut = 'n';
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR3;
ob->ticker = MNButton_Ticker;
ob->updateGeometry = MNButton_UpdateGeometry;
ob->drawer = MNButton_Drawer;
ob->actions[MNA_MODIFIED].callback = Hu_MenuCvarButton;
ob->actions[MNA_FOCUS].callback = Hu_MenuDefaultFocusAction;
ob->cmdResponder = MNButton_CommandResponder;
ob->_typedata = Z_Calloc(sizeof(mndata_button_t), PU_GAMESTATIC, 0);
{ mndata_button_t* btn = (mndata_button_t*)ob->_typedata;
btn->staydownMode = true;
btn->data = "ctl-inventory-use-next";
}
ob++;

ob->_type = MN_TEXT;
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR1;
ob->ticker = MNText_Ticker;
ob->updateGeometry = MNText_UpdateGeometry;
ob->drawer = MNText_Drawer;
ob->_typedata = Z_Calloc(sizeof(mndata_text_t), PU_GAMESTATIC, 0);
{ mndata_text_t* text = (mndata_text_t*)ob->_typedata;
text->text = "AutoHide";
}
ob++;

ob->_type = MN_SLIDER;
ob->_shortcut = 'h';
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR3;
ob->ticker = MNSlider_Ticker;
ob->updateGeometry = MNSlider_TextualValueUpdateGeometry;
ob->drawer = MNSlider_TextualValueDrawer;
ob->actions[MNA_MODIFIED].callback = Hu_MenuCvarSlider;
ob->actions[MNA_FOCUS].callback = Hu_MenuDefaultFocusAction;
ob->cmdResponder = MNSlider_CommandResponder;
ob->_typedata = Z_Calloc(sizeof(mndata_slider_t), PU_GAMESTATIC, 0);
{ mndata_slider_t* sld = (mndata_slider_t*)ob->_typedata;
sld->min = 0;
sld->max = 30;
sld->value = 0;
sld->step = 1.f;
sld->floatMode = true;
sld->data1 = "hud-inventory-timer";
sld->data2 = "Disabled";
sld->data4 = " second";
sld->data5 = " seconds";
}
ob++;

ob->_type = MN_TEXT;
ob->_group = 1;
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR2;
ob->ticker = MNText_Ticker;
ob->updateGeometry = MNText_UpdateGeometry;
ob->drawer = MNText_Drawer;
ob->_typedata = Z_Calloc(sizeof(mndata_text_t), PU_GAMESTATIC, 0);
{ mndata_text_t* text = (mndata_text_t*)ob->_typedata;
text->text = "Fullscreen HUD";
}
ob++;

ob->_type = MN_TEXT;
ob->_group = 1;
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR1;
ob->ticker = MNText_Ticker;
ob->updateGeometry = MNText_UpdateGeometry;
ob->drawer = MNText_Drawer;
ob->_typedata = Z_Calloc(sizeof(mndata_text_t), PU_GAMESTATIC, 0);
{ mndata_text_t* text = (mndata_text_t*)ob->_typedata;
text->text = "Max Visible Slots";
}
ob++;

ob->_type = MN_SLIDER;
ob->_group = 1;
ob->_shortcut = 'v';
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR3;
ob->ticker = MNSlider_Ticker;
ob->updateGeometry = MNSlider_TextualValueUpdateGeometry;
ob->drawer = MNSlider_TextualValueDrawer;
ob->actions[MNA_MODIFIED].callback = Hu_MenuCvarSlider;
ob->actions[MNA_FOCUS].callback = Hu_MenuDefaultFocusAction;
ob->cmdResponder = MNSlider_CommandResponder;
ob->_typedata = Z_Calloc(sizeof(mndata_slider_t), PU_GAMESTATIC, 0);
{ mndata_slider_t* sld = (mndata_slider_t*)ob->_typedata;
sld->min = 0;
sld->max = 16;
sld->value = 0;
sld->step = 1;
sld->floatMode = false;
sld->data1 = "hud-inventory-slot-max";
sld->data2 = "Automatic";
}
ob++;

ob->_type = MN_TEXT;
ob->_group = 1;
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR1;
ob->ticker = MNText_Ticker;
ob->updateGeometry = MNText_UpdateGeometry;
ob->drawer = MNText_Drawer;
ob->_typedata = Z_Calloc(sizeof(mndata_text_t), PU_GAMESTATIC, 0);
{ mndata_text_t* text = (mndata_text_t*)ob->_typedata;
text->text = "Show Empty Slots";
}
ob++;

ob->_type = MN_BUTTON;
ob->_group = 1;
ob->_shortcut = 'e';
ob->_pageFontIdx = MENU_FONT1;
ob->_pageColorIdx = MENU_COLOR3;
ob->ticker = MNButton_Ticker;
ob->updateGeometry = MNButton_UpdateGeometry;
ob->drawer = MNButton_Drawer;
ob->actions[MNA_MODIFIED].callback = Hu_MenuCvarButton;
ob->actions[MNA_FOCUS].callback = Hu_MenuDefaultFocusAction;
ob->cmdResponder = MNButton_CommandResponder;
ob->_typedata = Z_Calloc(sizeof(mndata_button_t), PU_GAMESTATIC, 0);
{ mndata_button_t* btn = (mndata_button_t*)ob->_typedata;
btn->staydownMode = true;
btn->data = "hud-inventory-slot-showempty";
}
ob++;

ob->_type = MN_NONE;

page->objects = objects;
}
#endif

Expand Down

0 comments on commit 688e7f7

Please sign in to comment.