- reimplemented as an OptionsMenu.
This is both for consistency and better localizability. The old code is retained to ensure that mods inheriting from the old menu continue to work.
This commit is contained in:
parent
ad23726cb6
commit
c45c7cdb4b
13 changed files with 798 additions and 25 deletions
|
|
@ -489,12 +489,6 @@ int userinfo_t::PlayerClassChanged(const char *classname)
|
|||
return classnum;
|
||||
}
|
||||
|
||||
int userinfo_t::PlayerClassNumChanged(int classnum)
|
||||
{
|
||||
*static_cast<FIntCVar *>((*this)[NAME_PlayerClass]) = classnum;
|
||||
return classnum;
|
||||
}
|
||||
|
||||
int userinfo_t::ColorSetChanged(int setnum)
|
||||
{
|
||||
*static_cast<FIntCVar *>((*this)[NAME_ColorSet]) = setnum;
|
||||
|
|
|
|||
|
|
@ -264,8 +264,7 @@ struct userinfo_t : TMap<FName,FBaseCVar *>
|
|||
int SkinNumChanged(int skinnum);
|
||||
int GenderChanged(const char *gendername);
|
||||
int PlayerClassChanged(const char *classname);
|
||||
int PlayerClassNumChanged(int classnum);
|
||||
uint32_t ColorChanged(const char *colorname);
|
||||
uint32_t ColorChanged(const char *colorname);
|
||||
uint32_t ColorChanged(uint32_t colorval);
|
||||
int ColorSetChanged(int setnum);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -66,7 +66,6 @@ CVAR (Bool, show_obituaries, true, CVAR_ARCHIVE)
|
|||
CVAR (Int, m_showinputgrid, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Bool, m_blockcontrollers, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
|
||||
|
||||
CVAR (Float, snd_menuvolume, 0.6f, CVAR_ARCHIVE)
|
||||
CVAR(Int, m_use_mouse, 2, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||
CVAR(Int, m_show_backbutton, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||
|
|
@ -518,6 +517,10 @@ void M_SetMenu(FName menu, int param)
|
|||
void ActivateEndGameMenu();
|
||||
ActivateEndGameMenu();
|
||||
return;
|
||||
|
||||
case NAME_Playermenu:
|
||||
menu = NAME_NewPlayerMenu; // redirect the old player menu to the new one.
|
||||
break;
|
||||
}
|
||||
|
||||
// End of special checks
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@
|
|||
#include "i_system.h"
|
||||
#include "v_video.h"
|
||||
#include "gstrings.h"
|
||||
#include "teaminfo.h"
|
||||
#include "r_data/sprites.h"
|
||||
|
||||
|
||||
void ClearSaveGames();
|
||||
|
|
@ -1543,6 +1545,95 @@ void M_CreateMenus()
|
|||
{
|
||||
I_BuildALResamplersList(*opt);
|
||||
}
|
||||
opt = OptionValues.CheckKey(NAME_PlayerTeam);
|
||||
if (opt != nullptr)
|
||||
{
|
||||
auto op = *opt;
|
||||
op->mValues.Resize(Teams.Size() + 1);
|
||||
op->mValues[0].Value = 0;
|
||||
op->mValues[0].Text = "$OPTVAL_NONE";
|
||||
for (unsigned i = 0; i < Teams.Size(); i++)
|
||||
{
|
||||
op->mValues[i+1].Value = i+1;
|
||||
op->mValues[i+1].Text = Teams[i].GetName();
|
||||
}
|
||||
}
|
||||
opt = OptionValues.CheckKey(NAME_PlayerClass);
|
||||
if (opt != nullptr)
|
||||
{
|
||||
auto op = *opt;
|
||||
int o = 0;
|
||||
if (!gameinfo.norandomplayerclass && PlayerClasses.Size() > 1)
|
||||
{
|
||||
op->mValues.Resize(PlayerClasses.Size()+1);
|
||||
op->mValues[0].Value = -1;
|
||||
op->mValues[0].Text = "$MNU_RANDOM";
|
||||
o = 1;
|
||||
}
|
||||
else op->mValues.Resize(PlayerClasses.Size());
|
||||
for (unsigned i = 0; i < PlayerClasses.Size(); i++)
|
||||
{
|
||||
op->mValues[i+o].Value = i;
|
||||
op->mValues[i+o].Text = GetPrintableDisplayName(PlayerClasses[i].Type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_ACTION_FUNCTION(DMenu, UpdateColorsets)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_POINTER(playerClass, FPlayerClass);
|
||||
|
||||
TArray<int> PlayerColorSets;
|
||||
|
||||
EnumColorSets(playerClass->Type, &PlayerColorSets);
|
||||
|
||||
auto opt = OptionValues.CheckKey(NAME_PlayerColors);
|
||||
if (opt != nullptr)
|
||||
{
|
||||
auto op = *opt;
|
||||
op->mValues.Resize(PlayerColorSets.Size() + 1);
|
||||
op->mValues[0].Value = -1;
|
||||
op->mValues[0].Text = "$OPTVAL_CUSTOM";
|
||||
for (unsigned i = 0; i < PlayerColorSets.Size(); i++)
|
||||
{
|
||||
auto cset = GetColorSet(playerClass->Type, PlayerColorSets[i]);
|
||||
op->mValues[i + 1].Value = PlayerColorSets[i];
|
||||
op->mValues[i + 1].Text = cset? cset->Name.GetChars() : "?"; // The null case should never happen here.
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(DMenu, UpdateSkinOptions)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_POINTER(playerClass, FPlayerClass);
|
||||
|
||||
auto opt = OptionValues.CheckKey(NAME_PlayerSkin);
|
||||
if (opt != nullptr)
|
||||
{
|
||||
auto op = *opt;
|
||||
|
||||
if ((GetDefaultByType(playerClass->Type)->flags4 & MF4_NOSKIN) || players[consoleplayer].userinfo.GetPlayerClassNum() == -1)
|
||||
{
|
||||
op->mValues.Resize(1);
|
||||
op->mValues[0].Value = -1;
|
||||
op->mValues[0].Text = "$OPTVAL_DEFAULT";
|
||||
}
|
||||
else
|
||||
{
|
||||
op->mValues.Clear();
|
||||
for (unsigned i = 0; i < Skins.Size(); i++)
|
||||
{
|
||||
op->mValues.Reserve(1);
|
||||
op->mValues.Last().Value = i;
|
||||
op->mValues.Last().Text = Skins[i].Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
|
|
|
|||
|
|
@ -133,8 +133,9 @@ DEFINE_ACTION_FUNCTION(DPlayerMenu, ClassChanged)
|
|||
PARAM_POINTER(cls, FPlayerClass);
|
||||
if (DMenu::InMenu)
|
||||
{
|
||||
players[consoleplayer].userinfo.PlayerClassNumChanged(gameinfo.norandomplayerclass ? sel : sel - 1);
|
||||
cvar_set("playerclass", sel == 0 && !gameinfo.norandomplayerclass ? "Random" : GetPrintableDisplayName(cls->Type).GetChars());
|
||||
const char *pclass = sel == -1 ? "Random" : GetPrintableDisplayName(cls->Type).GetChars();
|
||||
players[consoleplayer].userinfo.PlayerClassChanged(pclass);
|
||||
cvar_set("playerclass", pclass);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1083,3 +1083,7 @@ xx(MapMarker)
|
|||
xx(Spawn2)
|
||||
xx(LevelLocals)
|
||||
xx(Level)
|
||||
xx(PlayerTeam)
|
||||
xx(PlayerColors)
|
||||
xx(PlayerSkin)
|
||||
xx(NewPlayerMenu)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue