Menus: Add MenuEntryFlag "Hidden", which is safer than setting the entry's position in its parent's EntryList to null.

git-svn-id: https://svn.eduke32.com/eduke32@6676 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
hendricks266 2018-02-20 11:55:07 +00:00
parent 9001ec60a0
commit 60223012be
2 changed files with 31 additions and 13 deletions

View file

@ -1513,6 +1513,13 @@ static void MenuEntry_LookDisabledOnCondition(MenuEntry_t * const entry, const i
else else
entry->flags &= ~MEF_LookDisabled; entry->flags &= ~MEF_LookDisabled;
} }
static void MenuEntry_HideOnCondition(MenuEntry_t * const entry, const int32_t condition)
{
if (condition)
entry->flags |= MEF_Hidden;
else
entry->flags &= ~MEF_Hidden;
}
static int32_t M_RunMenu_Menu(Menu_t *cm, MenuMenu_t *menu, MenuEntry_t *currentry, int32_t state, const vec2_t origin, bool actually_draw = true); static int32_t M_RunMenu_Menu(Menu_t *cm, MenuMenu_t *menu, MenuEntry_t *currentry, int32_t state, const vec2_t origin, bool actually_draw = true);
static void Menu_EntryFocus(/*MenuEntry_t *entry*/); static void Menu_EntryFocus(/*MenuEntry_t *entry*/);
@ -1664,6 +1671,10 @@ void Menu_Init(void)
if (NAM_WW2GI) if (NAM_WW2GI)
ME_NETOPTIONS_MONSTERS.name = "Enemies"; ME_NETOPTIONS_MONSTERS.name = "Enemies";
// prepare cheats
for (i = 0; i < NUMCHEATFUNCS; ++i)
MEL_CHEATS[i+1] = &ME_CheatCodes[i];
// prepare text chat macros // prepare text chat macros
for (i = 0; i < MAXRIDECULE; ++i) for (i = 0; i < MAXRIDECULE; ++i)
{ {
@ -1814,11 +1825,9 @@ void Menu_Init(void)
M_CREDITS.title = M_CREDITS2.title = M_CREDITS3.title = s_Credits; M_CREDITS.title = M_CREDITS2.title = M_CREDITS3.title = s_Credits;
} }
if (G_GetLogoFlags() & LOGO_NOHELP) MenuEntry_HideOnCondition(&ME_MAIN_HELP, G_GetLogoFlags() & LOGO_NOHELP);
MEL_MAIN[3] = MEL_MAIN_INGAME[4] = nullptr;
#ifndef EDUKE32_SIMPLE_MENU #ifndef EDUKE32_SIMPLE_MENU
if (G_GetLogoFlags() & LOGO_NOCREDITS) MenuEntry_HideOnCondition(&ME_MAIN_CREDITS, G_GetLogoFlags() & LOGO_NOCREDITS);
MEL_MAIN[4] = nullptr;
#endif #endif
} }
@ -2018,11 +2027,13 @@ static void Menu_Pre(MenuID_t cm)
} }
} }
MenuEntry_t & entry = ME_CheatCodes[i];
// only show cheats that have been typed in before // only show cheats that have been typed in before
MEL_CHEATS[i+1] = cheatmask ? &ME_CheatCodes[i] : NULL; MenuEntry_HideOnCondition(&entry, !cheatmask);
// disable outside of a single-player game // disable outside of a single-player game
MenuEntry_DisableOnCondition(&ME_CheatCodes[i], menucheatsdisabled); MenuEntry_DisableOnCondition(&entry, menucheatsdisabled);
} }
// refresh display names of quote cheats // refresh display names of quote cheats
@ -3750,7 +3761,7 @@ static void Menu_MaybeSetSelectionToChild(Menu_t * m, MenuID_t id)
for (size_t i = 0, i_end = menu->numEntries; i < i_end; ++i) for (size_t i = 0, i_end = menu->numEntries; i < i_end; ++i)
{ {
MenuEntry_t const * entry = menu->entrylist[i]; MenuEntry_t const * entry = menu->entrylist[i];
if (entry != NULL && entry->type == Link) if (entry != NULL && entry->type == Link && !(entry->flags & MEF_Hidden))
{ {
MenuLink_t const * link = (MenuLink_t const *)entry->entry; MenuLink_t const * link = (MenuLink_t const *)entry->entry;
if (link->linkID == id) if (link->linkID == id)
@ -3911,7 +3922,9 @@ static void Menu_AboutToStartDisplaying(Menu_t * m)
menu->currentEntry = 0; menu->currentEntry = 0;
int32_t i = menu->currentEntry; int32_t i = menu->currentEntry;
while (!menu->entrylist[menu->currentEntry] || ((MenuEntry_t*)menu->entrylist[menu->currentEntry])->type == Spacer) while (!menu->entrylist[menu->currentEntry] ||
(((MenuEntry_t*)menu->entrylist[menu->currentEntry])->flags & MEF_Hidden) ||
((MenuEntry_t*)menu->entrylist[menu->currentEntry])->type == Spacer)
{ {
menu->currentEntry++; menu->currentEntry++;
if (menu->currentEntry >= menu->numEntries) if (menu->currentEntry >= menu->numEntries)
@ -4393,7 +4406,7 @@ static int32_t M_RunMenu_Menu(Menu_t *cm, MenuMenu_t *menu, MenuEntry_t *current
{ {
MenuEntry_t *entry = menu->entrylist[e]; MenuEntry_t *entry = menu->entrylist[e];
if (entry == NULL) if (entry == NULL || (entry->flags & MEF_Hidden))
continue; continue;
++numvalidentries; ++numvalidentries;
@ -4410,7 +4423,7 @@ static int32_t M_RunMenu_Menu(Menu_t *cm, MenuMenu_t *menu, MenuEntry_t *current
{ {
MenuEntry_t *entry = menu->entrylist[e]; MenuEntry_t *entry = menu->entrylist[e];
if (entry == NULL) if (entry == NULL || (entry->flags & MEF_Hidden))
continue; continue;
int32_t const height = entry->getHeight(); int32_t const height = entry->getHeight();
@ -4437,7 +4450,7 @@ static int32_t M_RunMenu_Menu(Menu_t *cm, MenuMenu_t *menu, MenuEntry_t *current
{ {
MenuEntry_t *entry = menu->entrylist[e]; MenuEntry_t *entry = menu->entrylist[e];
if (entry == NULL) if (entry == NULL || (entry->flags & MEF_Hidden))
continue; continue;
int32_t const indent = entry->getIndent(); int32_t const indent = entry->getIndent();
@ -5521,7 +5534,9 @@ static MenuEntry_t *Menu_RunInput_Menu_Movement(MenuMenu_t *menu, MenuMovement_t
if (menu->currentEntry < 0) if (menu->currentEntry < 0)
return Menu_RunInput_Menu_Movement(menu, MM_End); return Menu_RunInput_Menu_Movement(menu, MM_End);
} }
while (!menu->entrylist[menu->currentEntry] || menu->entrylist[menu->currentEntry]->type == Spacer); while (!menu->entrylist[menu->currentEntry] ||
(menu->entrylist[menu->currentEntry]->flags & MEF_Hidden) ||
menu->entrylist[menu->currentEntry]->type == Spacer);
break; break;
case MM_Home: case MM_Home:
@ -5534,7 +5549,9 @@ static MenuEntry_t *Menu_RunInput_Menu_Movement(MenuMenu_t *menu, MenuMovement_t
if (menu->currentEntry >= menu->numEntries) if (menu->currentEntry >= menu->numEntries)
return Menu_RunInput_Menu_Movement(menu, MM_Home); return Menu_RunInput_Menu_Movement(menu, MM_Home);
} }
while (!menu->entrylist[menu->currentEntry] || menu->entrylist[menu->currentEntry]->type == Spacer); while (!menu->entrylist[menu->currentEntry] ||
(menu->entrylist[menu->currentEntry]->flags & MEF_Hidden) ||
menu->entrylist[menu->currentEntry]->type == Spacer);
break; break;
case MM_Swap: case MM_Swap:

View file

@ -312,6 +312,7 @@ enum MenuEntryFlags_t
{ {
MEF_Disabled = 1<<0, MEF_Disabled = 1<<0,
MEF_LookDisabled = 1<<1, MEF_LookDisabled = 1<<1,
MEF_Hidden = 1<<2,
}; };
typedef struct MenuEntry_t typedef struct MenuEntry_t