- added a customization hook class for the menu.

Currently the only thing it does is abstracting the menu caption, but more can be added here.
Not exposed to modding yet, though, that's for later.
This commit is contained in:
Christoph Oelckers 2020-10-05 00:14:55 +02:00
parent 35ff0a42a6
commit a08d87beb3
8 changed files with 27 additions and 9 deletions

View file

@ -100,6 +100,8 @@ float BackbuttonAlpha;
static bool MenuEnabled = true;
DMenu *CurrentMenu;
int MenuTime;
DObject* menuCustomizer;
extern PClass *DefaultListMenuClass;
extern PClass *DefaultOptionMenuClass;
@ -190,7 +192,9 @@ void M_MarkMenus()
GC::Mark(pair->Value);
}
GC::Mark(CurrentMenu);
GC::Mark(menuCustomizer);
}
//============================================================================
//
// DMenu base class
@ -884,6 +888,7 @@ DEFINE_GLOBAL(menuactive)
DEFINE_GLOBAL(BackbuttonTime)
DEFINE_GLOBAL(BackbuttonAlpha)
DEFINE_GLOBAL(GameTicRate)
DEFINE_GLOBAL(menuCustomizer)
DEFINE_FIELD(DMenu, mParentMenu)
DEFINE_FIELD(DMenu, mMouseCapture);

View file

@ -47,6 +47,7 @@ class DMenu;
extern DMenu *CurrentMenu;
extern int MenuTime;
class DMenuItemBase;
extern DObject* menuCustomizer;
//=============================================================================
//

View file

@ -151,6 +151,11 @@ void DeinitMenus()
}
MenuDescriptors.Clear();
OptionValues.Clear();
if (menuCustomizer)
{
menuCustomizer->Destroy();
menuCustomizer = nullptr;
}
}
FTextureID GetMenuTexture(const char* const name)

View file

@ -1261,6 +1261,9 @@ void SetDefaultMenuColors()
OptionSettings.mFontColorHeader = V_FindFontColor(gameinfo.mFontColorHeader);
OptionSettings.mFontColorHighlight = V_FindFontColor(gameinfo.mFontColorHighlight);
OptionSettings.mFontColorSelection = V_FindFontColor(gameinfo.mFontColorSelection);
auto cls = PClass::FindClass("MenuCustomize");
menuCustomizer = cls->CreateNew();
}
CCMD (menu_main)

View file

@ -257,6 +257,7 @@ version "4.5"
#include "zscript/ui/menu/readthis.zs"
#include "zscript/ui/menu/reverbedit.zs"
#include "zscript/ui/menu/textentermenu.zs"
#include "zscript/ui/menu/menucustomize.zs"
#include "zscript/ui/menu/search/menu.zs"
#include "zscript/ui/menu/search/searchfield.zs"

View file

@ -50,6 +50,7 @@ struct _ native // These are the global variables, the struct is only here to av
native readonly @MusPlayingInfo musplaying;
native readonly bool generic_ui;
native readonly int GameTicRate;
native MenuCustomize menuCustomizer;
// sandbox state in multi-level setups:

View file

@ -0,0 +1,10 @@
// This class allows global customization of certain menu aspects, e.g. replacing the menu caption.
class MenuCustomize
{
virtual int DrawCaption(String title, Font fnt, int y, bool drawit)
{
screen.DrawText(fnt, OptionMenuSettings.mTitleColor, (screen.GetWidth() - fnt.StringWidth(title) * CleanXfac_1) / 2, 10 * CleanYfac_1, title, DTA_CleanNoMove_1, true);
return y + fnt.GetHeight();
}
}

View file

@ -433,15 +433,7 @@ class OptionMenu : Menu
let font = generic_ui || !mDesc.mFont ? NewSmallFont : mDesc.mFont;
if (font && mDesc.mTitle.Length() > 0)
{
let font = generic_ui || !mDesc.mFont ? NewSmallFont : mDesc.mFont;
if (drawit)
{
let tt = Stringtable.Localize(title);
screen.DrawText(font, OptionMenuSettings.mTitleColor,
(screen.GetWidth() - font.StringWidth(tt) * CleanXfac_1) / 2, 10 * CleanYfac_1,
tt, DTA_CleanNoMove_1, true);
}
return y + font.GetHeight();
return menuCustomizer.DrawCaption(title, font, y, drawit);
}
else
{