- renamed the Customizer to 'Delegate' because this works very much like a delegate in Objective-C.

- route menu sound calls through the delegate to better deal with differences between games.
This commit is contained in:
Christoph Oelckers 2020-10-07 01:00:43 +02:00
parent 603c3b50ec
commit 0968a9d97e
19 changed files with 86 additions and 50 deletions

View file

@ -87,7 +87,7 @@ static void drawTextScreenBackground(void)
} }
} }
// One these screens get scriptified this should use the version in menuCustomizerBlood. // One these screens get scriptified this should use the version in BloodMenuDelegate.
static void DrawCaption(const char* text) static void DrawCaption(const char* text)
{ {
double scalex = 1.; // Expand the box if the text is longer double scalex = 1.; // Expand the box if the text is longer

View file

@ -1086,3 +1086,11 @@ xx(wrapwidth)
xx(scalefactorx) xx(scalefactorx)
xx(scalefactory) xx(scalefactory)
xx(scalemode) xx(scalemode)
xy(menu_cursor, "menu/cursor")
xy(menu_choose, "menu/choose")
xy(menu_backup, "menu/backup")
xy(menu_clear, "menu/clear")
xy(menu_dismiss, "menu/dismiss")
xy(menu_change, "menu/change")
xy(menu_advance, "menu/advance")

View file

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

View file

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

View file

@ -151,10 +151,10 @@ void DeinitMenus()
} }
MenuDescriptors.Clear(); MenuDescriptors.Clear();
OptionValues.Clear(); OptionValues.Clear();
if (menuCustomizer) if (menuDelegate)
{ {
menuCustomizer->Destroy(); menuDelegate->Destroy();
menuCustomizer = nullptr; menuDelegate = nullptr;
} }
} }

View file

@ -73,8 +73,10 @@ bool FName::NameManager::Inited;
static const char *PredefinedNames[] = static const char *PredefinedNames[] =
{ {
#define xx(n) #n, #define xx(n) #n,
#define xy(n, s) s,
#include "namedef.h" #include "namedef.h"
#undef xx #undef xx
#undef xy
}; };
// CODE -------------------------------------------------------------------- // CODE --------------------------------------------------------------------

View file

@ -40,8 +40,10 @@
enum ENamedName enum ENamedName
{ {
#define xx(n) NAME_##n, #define xx(n) NAME_##n,
#define xy(n, s) NAME_##n,
#include "namedef.h" #include "namedef.h"
#undef xx #undef xx
#undef xy
}; };
class FString; class FString;

View file

@ -58,18 +58,7 @@
#include "gamecontrol.h" #include "gamecontrol.h"
#include "raze_sound.h" #include "raze_sound.h"
#include "gamestruct.h" #include "gamestruct.h"
#include "razemenu.h"
enum EMenuSounds : int
{
ActivateSound,
CursorSound,
AdvanceSound,
BackSound,
CloseSound,
PageSound,
ChangeSound,
ChooseSound
};
EXTERN_CVAR(Int, cl_gfxlocalization) EXTERN_CVAR(Int, cl_gfxlocalization)
EXTERN_CVAR(Bool, m_quickexit) EXTERN_CVAR(Bool, m_quickexit)
@ -173,17 +162,6 @@ bool M_SetSpecialMenu(FName& menu, int param)
// //
//============================================================================= //=============================================================================
void M_MenuSound(EMenuSounds snd)
{
if (menu_sounds) gi->MenuSound(snd);
}
//=============================================================================
//
//
//
//=============================================================================
void M_StartControlPanel(bool makeSound, bool) void M_StartControlPanel(bool makeSound, bool)
{ {
static bool created = false; static bool created = false;
@ -198,7 +176,7 @@ void M_StartControlPanel(bool makeSound, bool)
} }
GSnd->SetSfxPaused(true, PAUSESFX_MENU); GSnd->SetSfxPaused(true, PAUSESFX_MENU);
gi->MenuOpened(); gi->MenuOpened();
if (makeSound) M_MenuSound(ActivateSound); if (makeSound && menu_sounds) gi->MenuSound(ActivateSound);
M_DoStartControlPanel(false); M_DoStartControlPanel(false);
} }
@ -1149,13 +1127,13 @@ void SetDefaultMenuColors()
OptionSettings.mFontColorHeader = CR_DARKGRAY; OptionSettings.mFontColorHeader = CR_DARKGRAY;
OptionSettings.mFontColorHighlight = CR_WHITE; OptionSettings.mFontColorHighlight = CR_WHITE;
OptionSettings.mFontColorSelection = CR_DARKRED; OptionSettings.mFontColorSelection = CR_DARKRED;
cls = PClass::FindClass("MenuCustomizerBlood"); cls = PClass::FindClass("BloodMenuDelegate");
} }
else if (g_gameType & GAMEFLAG_SW) else if (g_gameType & GAMEFLAG_SW)
{ {
OptionSettings.mFontColorHeader = CR_DARKRED; OptionSettings.mFontColorHeader = CR_DARKRED;
OptionSettings.mFontColorHighlight = CR_WHITE; OptionSettings.mFontColorHighlight = CR_WHITE;
cls = PClass::FindClass("MenuCustomizerSW"); cls = PClass::FindClass("SWMenuDelegate");
} }
else if (g_gameType & GAMEFLAG_PSEXHUMED) else if (g_gameType & GAMEFLAG_PSEXHUMED)
{ {
@ -1163,7 +1141,7 @@ void SetDefaultMenuColors()
OptionSettings.mFontColorHighlight = CR_SAPPHIRE; OptionSettings.mFontColorHighlight = CR_SAPPHIRE;
OptionSettings.mFontColorSelection = CR_ORANGE; OptionSettings.mFontColorSelection = CR_ORANGE;
OptionSettings.mFontColor = CR_FIRE; OptionSettings.mFontColor = CR_FIRE;
cls = PClass::FindClass("MenuCustomizerExhumed"); cls = PClass::FindClass("ExhumedMenuDelegate");
} }
else else
{ {
@ -1181,9 +1159,50 @@ void SetDefaultMenuColors()
OptionSettings.mFontColorHighlight = CR_ORANGE; OptionSettings.mFontColorHighlight = CR_ORANGE;
OptionSettings.mFontColorSelection = CR_TAN; OptionSettings.mFontColorSelection = CR_TAN;
} }
cls = PClass::FindClass("MenuCustomizerDuke"); cls = PClass::FindClass("DukeMenuDelegate");
} }
if (!cls) cls = PClass::FindClass("MenuCustomize"); if (!cls) cls = PClass::FindClass("RazeMenuDelegate");
if (cls) menuCustomizer = cls->CreateNew(); if (cls) menuDelegate = cls->CreateNew();
} }
// The sound system is not yet capable of resolving this properly.
DEFINE_ACTION_FUNCTION(_RazeMenuDelegate, PlaySound)
{
PARAM_SELF_STRUCT_PROLOGUE(void);
PARAM_NAME(name);
EMenuSounds soundindex;
switch (name.GetIndex())
{
case NAME_menu_cursor:
soundindex = CursorSound;
break;
case NAME_menu_choose:
soundindex = ChooseSound;
break;
case NAME_menu_backup:
soundindex = BackSound;
break;
case NAME_menu_clear:
case NAME_menu_dismiss:
soundindex = CloseSound;
break;
case NAME_menu_change:
soundindex = ChangeSound;
break;
case NAME_menu_advance:
soundindex = AdvanceSound;
break;
default:
return 0;
}
gi->MenuSound(soundindex);
return 0;
}

View file

@ -176,7 +176,7 @@ struct _ native // These are the global variables, the struct is only here to av
native readonly @MusPlayingInfo musplaying; native readonly @MusPlayingInfo musplaying;
native readonly bool generic_ui; native readonly bool generic_ui;
native readonly int GameTicRate; native readonly int GameTicRate;
native MenuCustomize menuCustomizer; native MenuDelegateBase menuDelegate;
native readonly int consoleplayer; native readonly int consoleplayer;
} }

View file

@ -5,7 +5,7 @@
// //
//------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------
class MenuCustomizerBlood : MenuCustomize class BloodMenuDelegate : RazeMenuDelegate
{ {
override int DrawCaption(String title, Font fnt, int y, bool drawit) override int DrawCaption(String title, Font fnt, int y, bool drawit)
{ {

View file

@ -1,5 +1,5 @@
class MenuCustomizerDuke : MenuCustomize class DukeMenuDelegate : RazeMenuDelegate
{ {
override int DrawCaption(String title, Font fnt, int y, bool drawit) override int DrawCaption(String title, Font fnt, int y, bool drawit)
{ {

View file

@ -1,5 +1,5 @@
class MenuCustomizerExhumed : MenuCustomize class ExhumedMenuDelegate : RazeMenuDelegate
{ {
override int DrawCaption(String title, Font fnt, int y, bool drawit) override int DrawCaption(String title, Font fnt, int y, bool drawit)
{ {

View file

@ -1,5 +1,5 @@
class MenuCustomizerSW : MenuCustomize class SWMenuDelegate : RazeMenuDelegate
{ {
override int DrawCaption(String title, Font fnt, int y, bool drawit) override int DrawCaption(String title, Font fnt, int y, bool drawit)
{ {

View file

@ -39,3 +39,9 @@ struct TileFiles
native static TextureID GetTexture(int tile, bool animate = false); native static TextureID GetTexture(int tile, bool animate = false);
} }
*/ */
class RazeMenuDelegate : MenuDelegateBase
{
// Todo: Fix this so that it can be done outside the games' sound modules.
native override void PlaySound(name sname);
}

View file

@ -172,7 +172,7 @@ class ListMenu : Menu
case MKEY_Enter: case MKEY_Enter:
if (mDesc.mSelectedItem >= 0 && mDesc.mItems[mDesc.mSelectedItem].Activate()) if (mDesc.mSelectedItem >= 0 && mDesc.mItems[mDesc.mSelectedItem].Activate())
{ {
MenuSound("menu/choose"); MenuSound("menu/advance");
} }
return true; return true;
@ -269,7 +269,7 @@ class ListMenu : Menu
} }
if (mDesc.mSelectedItem >= 0 && mDesc.mSelectedItem < mDesc.mItems.Size()) if (mDesc.mSelectedItem >= 0 && mDesc.mSelectedItem < mDesc.mItems.Size())
{ {
if (!menuCustomizer.DrawSelector(mDesc)) if (!menuDelegate.DrawSelector(mDesc))
mDesc.mItems[mDesc.mSelectedItem].DrawSelector(mDesc.mSelectOfsX, mDesc.mSelectOfsY, mDesc.mSelector, mDesc); mDesc.mItems[mDesc.mSelectedItem].DrawSelector(mDesc.mSelectOfsX, mDesc.mSelectOfsY, mDesc.mSelector, mDesc);
} }
Super.Drawer(); Super.Drawer();

View file

@ -363,7 +363,7 @@ class ListMenuItemCaptionItem : ListMenuItem
let font = generic_ui || !desc.mFont ? NewSmallFont : desc.mFont; let font = generic_ui || !desc.mFont ? NewSmallFont : desc.mFont;
if (font && mText.Length() > 0) if (font && mText.Length() > 0)
{ {
menuCustomizer.DrawCaption(mText, font, 0, true); menuDelegate.DrawCaption(mText, font, 0, true);
} }
} }
} }

View file

@ -285,8 +285,7 @@ class Menu : Object native ui version("2.4")
static void MenuSound(Name snd) static void MenuSound(Name snd)
{ {
// todo: Cannot use game specific IDs here - sound also may be set up too late by the games menuDelegate.PlaySound(snd);
//S_StartSound (snd, CHAN_VOICE, CHANF_MAYBE_LOCAL|CHAN_UI, snd_menuvolume, ATTN_NONE);
} }
deprecated("4.0") static void DrawConText (int color, int x, int y, String str) deprecated("4.0") static void DrawConText (int color, int x, int y, String str)

View file

@ -1,6 +1,6 @@
// This class allows global customization of certain menu aspects, e.g. replacing the menu caption. // This class allows global customization of certain menu aspects, e.g. replacing the menu caption.
class MenuCustomize class MenuDelegateBase
{ {
virtual int DrawCaption(String title, Font fnt, int y, bool drawit) virtual int DrawCaption(String title, Font fnt, int y, bool drawit)
{ {

View file

@ -433,7 +433,7 @@ class OptionMenu : Menu
let font = generic_ui || !mDesc.mFont ? NewSmallFont : mDesc.mFont; let font = generic_ui || !mDesc.mFont ? NewSmallFont : mDesc.mFont;
if (font && mDesc.mTitle.Length() > 0) if (font && mDesc.mTitle.Length() > 0)
{ {
return menuCustomizer.DrawCaption(title, font, y, drawit); return menuDelegate.DrawCaption(title, font, y, drawit);
} }
else else
{ {