Skip to content

Commit

Permalink
- Changed the way panels hide themselves (long term problem fixed)
Browse files Browse the repository at this point in the history
  - Previously couldn't hide panels and paint was being called unnecessarily
  - Now uses new HiddenBits which will come in useful for some other things I think
    - HIDEHUD_NOTSCOUT
    - HIDEHUD_NOTSNIPER
    - HIDEHUD_NOTSOLDIER
    - HIDEHUD_NOTDEMOMAN
    - HIDEHUD_NOTMEDIC
    - HIDEHUD_NOTHWGUY
    - HIDEHUD_NOTPYRO
    - HIDEHUD_NOTSPY
    - HIDEHUD_NOTENGINEER
    - HIDEHUD_NOTCIVILIAN
- Removed unused and commented code (some will be back soon)
- Added a few new comments and corrected a few to make more sense
- Fixed panels being resized wrongly when changing resolution
- Fixed a problem where panel items (health) wouldn't correctly update if position offsets changed but size didn't
- Partially fixed panel item text being cut off (unsure why its not completely fixed though)
- Removed confusing "Global" preset definitions (existed from an old idea)
- Made memory leaks much less likely due to correct deletion (and handling) of KeyValues (I've hopefully got them all)
- Corrected the hud_buildstate_dispenser header definition. Was same as sentry (I don't even understand how it was working...)

# Conflicts:
#	cl_dll/hud.cpp
#	game_shared/shareddefs.h
  • Loading branch information
AdamWillden committed Nov 1, 2020
1 parent 565466c commit a10c514
Show file tree
Hide file tree
Showing 21 changed files with 649 additions and 612 deletions.
48 changes: 14 additions & 34 deletions cl_dll/ff/ff_hud_buildstate_detpack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ CHudBuildStateDetpack::CHudBuildStateDetpack(const char *pElementName) : CHudEle
SetParent(g_pClientMode->GetViewport());

// Hide when player is dead
SetHiddenBits( HIDEHUD_PLAYERDEAD );
SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NOTDEMOMAN );

SetUseToggleText(true);

Expand Down Expand Up @@ -159,7 +159,7 @@ void CHudBuildStateDetpack::VidInit()

if (!m_wszNotBuiltText)
m_wszNotBuiltText = L"Not Built";
SetText(m_wszNotBuiltText);
SetText(m_wszNotBuiltText, false);

m_wszBuildingText = vgui::localize()->Find("#HudPanel_Building");

Expand All @@ -170,6 +170,7 @@ void CHudBuildStateDetpack::VidInit()
m_qbDetpackTimeLeft->SetIconChar("f", false);
m_qbDetpackTimeLeft->SetIntensityAmountScaled(true);//max changes (is not 100) so we need to scale to a percentage amount for calculation
m_qbDetpackTimeLeft->SetAmount(0);
m_qbDetpackTimeLeft->SetVisible(false);

SetToggleTextVisible(true);
}
Expand All @@ -179,7 +180,7 @@ void CHudBuildStateDetpack::Init()
ivgui()->AddTickSignal(GetVPanel(), 250); //only update 4 times a second
HOOK_HUD_MESSAGE(CHudBuildStateDetpack, DetpackMsg);

m_qbDetpackTimeLeft = AddItem("BuildStateDetpackTimeLeft");
m_qbDetpackTimeLeft = AddItem("HudBuildStateDetpackTimeLeft");

AddPanelToHudOptions("Detpack", "#HudPanel_Detpack", "BuildState", "#HudPanel_BuildableState");
}
Expand All @@ -188,28 +189,12 @@ void CHudBuildStateDetpack::OnTick()
{
BaseClass::OnTick();

if (!engine->IsInGame())
if( !engine->IsInGame() | !ShouldDraw() )
return;

// Get the local player
C_FFPlayer *pPlayer = C_FFPlayer::GetLocalFFPlayer();


// If the player is not an FFPlayer or is not an Scout
if (!pPlayer || pPlayer->GetClassSlot() != CLASS_DEMOMAN)
//hide the panel
{
m_bDraw = false;
SetVisible(false);
m_qbDetpackTimeLeft->SetVisible(false);
return; //return and don't continue
}
else if(!m_bDraw)
//show the panel
{
m_bDraw = true;
}

bool bBuilt = pPlayer->GetDetpack() && pPlayer->GetDetpack()->IsBuilt();
bool bBuilding = pPlayer->GetDetpack() && !bBuilt;

Expand All @@ -235,36 +220,31 @@ void CHudBuildStateDetpack::OnTick()
//hide quantity bars
{
m_bBuilt = false;
SetVisible(false);
m_qbDetpackTimeLeft->SetVisible(false);
SetToggleTextVisible(true);
}
else if(bBuilt && !m_bBuilt)
//show quantity bars
{
m_bBuilt = true;
SetVisible(true);
m_qbDetpackTimeLeft->SetVisible(true);
SetToggleTextVisible(false);
}
}

void CHudBuildStateDetpack::Paint()
{
if(m_bDraw)
if(m_bBuilt)
{
if(m_bBuilt)
{
float flCurTime = gpGlobals->curtime;
int iDetpackTimeLeft = (int)(m_flDetonateTime - gpGlobals->curtime + 1);
if(iDetpackTimeLeft < 0)
m_qbDetpackTimeLeft->SetAmount(m_flDetonateTime - flCurTime);
else
m_qbDetpackTimeLeft->SetAmount(iDetpackTimeLeft);
}
//paint header
BaseClass::Paint();
float flCurTime = gpGlobals->curtime;
int iDetpackTimeLeft = (int)(m_flDetonateTime - gpGlobals->curtime + 1);
if(iDetpackTimeLeft < 0)
m_qbDetpackTimeLeft->SetAmount(m_flDetonateTime - flCurTime);
else
m_qbDetpackTimeLeft->SetAmount(iDetpackTimeLeft);
}
//paint header
BaseClass::Paint();
}

void CHudBuildStateDetpack::MsgFunc_DetpackMsg(bf_read &msg)
Expand Down
42 changes: 10 additions & 32 deletions cl_dll/ff/ff_hud_buildstate_dispenser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
DECLARE_HUDELEMENT(CHudBuildStateDispenser);
DECLARE_HUD_MESSAGE(CHudBuildStateDispenser, DispenserMsg);

CHudBuildStateDispenser::CHudBuildStateDispenser(const char *pElementName) : CHudElement(pElementName), BaseClass(NULL, "HudBuildStateSentry")
CHudBuildStateDispenser::CHudBuildStateDispenser(const char *pElementName) : CHudElement(pElementName), BaseClass(NULL, "HudBuildStateDispenser")
{
SetParent(g_pClientMode->GetViewport());

// Hide when player is dead
SetHiddenBits( HIDEHUD_PLAYERDEAD );
// Hide when player is dead and not engi
SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NOTENGINEER );

SetUseToggleText(true);

Expand All @@ -21,7 +21,7 @@ CHudBuildStateDispenser::CHudBuildStateDispenser(const char *pElementName) : CHu
CHudBuildStateDispenser::~CHudBuildStateDispenser()
{
}

KeyValues* CHudBuildStateDispenser::GetDefaultStyleData()
{
KeyValues *kvPreset = new KeyValues("StyleData");
Expand Down Expand Up @@ -170,10 +170,12 @@ void CHudBuildStateDispenser::VidInit()
m_qbDispenserHealth->SetLabelText("#FF_ITEM_HEALTH", false);
m_qbDispenserHealth->SetIconChar("a", false);
m_qbDispenserHealth->ShowAmountMax(false);

m_qbDispenserAmmo->SetVisible(false);

m_qbDispenserAmmo->SetLabelText("#FF_ITEM_AMMO", false);
m_qbDispenserAmmo->SetIconChar("r", false);
m_qbDispenserAmmo->ShowAmountMax(false);
m_qbDispenserHealth->SetVisible(false);

m_qbCellCounter->SetLabelText("#FF_ITEM_CELLS", false);
m_qbCellCounter->SetIconChar("p", false);
Expand All @@ -199,31 +201,12 @@ void CHudBuildStateDispenser::OnTick()
{
BaseClass::OnTick();

if (!engine->IsInGame())
if( !engine->IsInGame() | !ShouldDraw() )
return;

// Get the local player
C_FFPlayer *pPlayer = ToFFPlayer(C_BasePlayer::GetLocalPlayer());

// If the player is not an FFPlayer or is not an Engineer
if (!pPlayer || pPlayer->GetClassSlot() != CLASS_ENGINEER )
//hide the panel
{
m_bDraw = false;
SetVisible(false);
m_qbDispenserHealth->SetVisible(false);
m_qbDispenserAmmo->SetVisible(false);
m_qbCellCounter->SetVisible(false);
return; //return and don't continue
}
else
//show the panel
{
if(!m_bDraw)
ShowItem(m_qbCellCounter);
m_bDraw = true;
}

// Never below zero (dunno why this is here)
int iCells = max( pPlayer->GetAmmoCount( AMMO_CELLS ), 0);
iCells = min(iCells, FF_BUILDCOST_DISPENSER);
Expand Down Expand Up @@ -256,7 +239,6 @@ void CHudBuildStateDispenser::OnTick()
//hide quantity bars
{
m_bBuilt = false;
SetVisible(false);
m_qbDispenserHealth->SetVisible(false);
m_qbDispenserAmmo->SetVisible(false);
ShowItem(m_qbCellCounter);
Expand All @@ -266,7 +248,6 @@ void CHudBuildStateDispenser::OnTick()
//show quantity bars
{
m_bBuilt = true;
SetVisible(true);
m_qbDispenserHealth->SetVisible(true);
m_qbDispenserAmmo->SetVisible(true);
HideItem(m_qbCellCounter);
Expand All @@ -276,11 +257,8 @@ void CHudBuildStateDispenser::OnTick()

void CHudBuildStateDispenser::Paint()
{
if(m_bDraw)
{
//paint header
BaseClass::Paint();
}
//paint header
BaseClass::Paint();
}

void CHudBuildStateDispenser::MsgFunc_DispenserMsg(bf_read &msg)
Expand Down
6 changes: 2 additions & 4 deletions cl_dll/ff/ff_hud_buildstate_dispenser.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
#ifndef FF_HUDBUILDSTATESENTRY_H
#define FF_HUDBUILDSTATESENTRY_H
#ifndef FF_HUDBUILDSTATEDISPENSER_H
#define FF_HUDBUILDSTATEDISPENSER_H

#include "ff_quantitypanel.h"
#include "hudelement.h"

#include "hud_macros.h"

#include "iclientmode.h" //to set panel parent as the clients viewport
#include "c_ff_player.h" //required to cast base player

#include <vgui/ISurface.h>
#include <vgui/IVGui.h>
#include <vgui/ILocalize.h>
Expand Down
34 changes: 7 additions & 27 deletions cl_dll/ff/ff_hud_buildstate_mancannon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ CHudBuildStateManCannon::CHudBuildStateManCannon(const char *pElementName) : CHu
{
SetParent(g_pClientMode->GetViewport());

// Hide when player is dead
SetHiddenBits( HIDEHUD_PLAYERDEAD );
// Hide when player is dead and not scout
SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NOTSCOUT );

SetUseToggleText(true);

Expand All @@ -20,7 +20,7 @@ CHudBuildStateManCannon::CHudBuildStateManCannon(const char *pElementName) : CHu
CHudBuildStateManCannon::~CHudBuildStateManCannon()
{
}

KeyValues* CHudBuildStateManCannon::GetDefaultStyleData()
{
KeyValues *kvPreset = new KeyValues("StyleData");
Expand Down Expand Up @@ -170,6 +170,7 @@ void CHudBuildStateManCannon::VidInit()
m_qbManCannonHealth->SetIconChar("a", false);
m_qbManCannonHealth->ShowAmountMax(false);
m_qbManCannonHealth->SetAmount(0);
m_qbManCannonHealth->SetVisible(false);

SetToggleTextVisible(true);
}
Expand All @@ -188,28 +189,12 @@ void CHudBuildStateManCannon::OnTick()
{
BaseClass::OnTick();

if (!engine->IsInGame())
if( !engine->IsInGame() | !ShouldDraw() )
return;

// Get the local player
C_FFPlayer *pPlayer = C_FFPlayer::GetLocalFFPlayer();


// If the player is not an FFPlayer or is not an Scout
if (!pPlayer || pPlayer->GetClassSlot() != CLASS_SCOUT)
//hide the panel
{
m_bDraw = false;
SetVisible(false);
m_qbManCannonHealth->SetVisible(false);
return; //return and don't continue
}
else if(!m_bDraw)
//show the panel
{
m_bDraw = true;
}

bool bBuilt = pPlayer->GetManCannon() && pPlayer->GetManCannon()->IsBuilt();
bool bBuilding = pPlayer->GetManCannon() && !bBuilt;

Expand All @@ -235,27 +220,22 @@ void CHudBuildStateManCannon::OnTick()
//hide quantity bars
{
m_bBuilt = false;
SetVisible(false);
m_qbManCannonHealth->SetVisible(false);
SetToggleTextVisible(true);
}
else if(bBuilt && !m_bBuilt)
//show quantity bars
{
m_bBuilt = true;
SetVisible(true);
m_qbManCannonHealth->SetVisible(true);
SetToggleTextVisible(false);
}
}

void CHudBuildStateManCannon::Paint()
{
if(m_bDraw)
{
//paint header
BaseClass::Paint();
}
//paint header
BaseClass::Paint();
}

void CHudBuildStateManCannon::MsgFunc_ManCannonMsg(bf_read &msg)
Expand Down
Loading

0 comments on commit a10c514

Please sign in to comment.