Skip to content
Permalink
Browse files

- added ability to force internal alternative HUD

Set hud_althud_forceinternal CVAR to disable unwanted HUD customizations
  • Loading branch information
alexey-lysiuk committed Nov 26, 2019
1 parent e21c9e0 commit fdd17403e586e35c9c00f5b31e31df2e005378f0
Showing with 62 additions and 37 deletions.
  1. +2 −0 src/g_statusbar/sbar.h
  2. +59 −0 src/g_statusbar/shared_hud.cpp
  3. +1 −37 src/g_statusbar/shared_sbar.cpp
@@ -434,6 +434,8 @@ class DBaseStatusBar : public DObject
virtual void SetMugShotState (const char *state_name, bool wait_till_done=false, bool reset=false);
void DrawLog();
uint32_t GetTranslation() const;

void CreateAltHUD();
void DrawAltHUD();

void DrawGraphic(FTextureID texture, double x, double y, int flags, double Alpha, double boxwidth, double boxheight, double scaleX, double scaleY);
@@ -93,6 +93,65 @@ CVAR (Int, hudcolor_stats, CR_GREEN, CVAR_ARCHIVE) // For the stats values the
CVAR(Bool, map_point_coordinates, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) // show player or map coordinates?


//---------------------------------------------------------------------------
//
// Create Alternative HUD
//
//---------------------------------------------------------------------------

CUSTOM_CVAR(Bool, hud_althud_forceinternal, false, CVAR_ARCHIVE | CVAR_NOINITCALL)
{
if (StatusBar)
StatusBar->CreateAltHUD();
}

static DObject* DoCreateAltHUD(const FName classname)
{
if (classname == NAME_None)
return nullptr;

const auto cls = PClass::FindClass(classname);
if (!cls)
{
Printf(TEXTCOLOR_RED "Unknown alternative HUD class \"%s\"\n", classname.GetChars());
return nullptr;
}

if (!cls->IsDescendantOf(NAME_AltHud))
{
Printf(TEXTCOLOR_RED "Alternative HUD class \"%s\" is not derived from AltHud\n", classname.GetChars());
return nullptr;
}

const auto althud = cls->CreateNew();

IFVIRTUALPTRNAME(althud, NAME_AltHud, Init)
{
VMValue params[] = { althud };
VMCall(func, params, countof(params), nullptr, 0);
}

return althud;
}

void DBaseStatusBar::CreateAltHUD()
{
if (AltHud)
{
AltHud->Destroy();
AltHud = nullptr;
}

if (!hud_althud_forceinternal)
AltHud = DoCreateAltHUD(gameinfo.althudclass);

if (!AltHud)
AltHud = DoCreateAltHUD(NAME_AltHud);

assert(AltHud);
}


//---------------------------------------------------------------------------
//
// draw the HUD
@@ -334,36 +334,6 @@ void ST_CreateStatusBar(bool bTitleLevel)
// Constructor
//
//---------------------------------------------------------------------------

static DObject* CreateAltHud(const FName classname)
{
if (classname == NAME_None)
return nullptr;

auto cls = PClass::FindClass(classname);
if (!cls)
{
Printf(TEXTCOLOR_RED "Unknown alternative HUD class \"%s\"\n", classname.GetChars());
return nullptr;
}

if (!cls->IsDescendantOf(NAME_AltHud))
{
Printf(TEXTCOLOR_RED "Alternative HUD class \"%s\" is not derived from AltHud\n", classname.GetChars());
return nullptr;
}

auto althud = cls->CreateNew();

IFVIRTUALPTRNAME(althud, NAME_AltHud, Init)
{
VMValue params[] = { althud };
VMCall(func, params, countof(params), nullptr, 0);
}

return althud;
}

DBaseStatusBar::DBaseStatusBar ()
{
CompleteBorder = false;
@@ -376,13 +346,7 @@ DBaseStatusBar::DBaseStatusBar ()
ShowLog = false;
defaultScale = { (double)CleanXfac, (double)CleanYfac };

// Create the AltHud object.
AltHud = CreateAltHud(gameinfo.althudclass);

if (!AltHud)
AltHud = CreateAltHud(NAME_AltHud);

assert(AltHud);
CreateAltHUD();
}

static void ValidateResolution(int &hres, int &vres)

0 comments on commit fdd1740

Please sign in to comment.
You can’t perform that action at this time.