VGUI Health bar: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (fixed language template. also some formatting.)
No edit summary
Line 1: Line 1:
{{lang|VGUI Health bar|title=VGUI Health Bar}}{{source topicon}}[[Category:Tutorials]][[Category:VGUI]]
{{otherlang2
|ua=VGUI_Health_bar:ua
|ru=VGUI_Health_bar:ru
}}
[[File:Health Bar.png|thumb]]
[[File:Health Bar.png|thumb]]
==Overview==
==Overview==
This tutorial will show you how to make a [[VGUI]] [[health]] bar implementation. This is a simple copy-and-paste tutorial that works out of the box for {{src06|4}}, {{src07|4}}, and {{src13|4}}.
This tutorial will show you how to make a [[VGUI]] [[Health]] Bar implementation. This is a simple copy and paste tutorial that works out of the box for the 2013 SDK


==Code==
==Code==
First create <code>hud_healthbar.cpp</code> and <code>hud_healthbar.h</code> in your CLIENT project, then paste the following into them:
First create '''hud_healthbar.cpp''' and '''hud_healthbar.h''' in your CLIENT project then paste this stuff into them:


==<code>hudhealthbar.cpp</code>==
==hudhealthbar.cpp==
<source lang="cpp">
<source lang="cpp">
#include "cbase.h"  
#include "cbase.h"  
Line 127: Line 129:
</source>
</source>


==<code>hudhealthbar.h</code>==
==hudhealthbar.h==
<source lang="cpp">
<source lang="cpp">
#if !defined HUD_HULL_H
#if !defined HUD_HULL_H
Line 181: Line 183:
</source>
</source>


==<code>HudLayout.res</code>==
==HudLayout.res==
Now add this to your <code>HudLayout.res</code> file in the <code>scripts</code> folder (located in your mod directory) at the bottom of all the other entries:
Now add this to your '''HudLayout.res''' file in the '''scripts''' folder, located in your mod directory, at the bottom of all the other entries:
<pre>
<pre>
HudHull
    HudHealthbar
{
    {


"fieldName" "HudHealthbar"
    "fieldName" "CHudHealthBar"
"visible" "1"
    "visible" "1"
"enabled" "1"
    "enabled" "1"
"xpos" "12"
    "xpos" "12"
"ypos" "420"
    "ypos" "420"
"wide" "120"
    "wide" "120"
"tall" "10"
    "tall" "10"
"text_xpos" "5"
    "text_xpos" "5"
"text_ypos" "2"
    "text_ypos" "2"
"TextColor" "0 255 0 80"
    "TextColor" "0 255 0 80"
"PaintBackgroundType" "2"
    "PaintBackgroundType" "2"


}
    }
</pre>
</pre>

Revision as of 10:21, 14 January 2023

Template:Otherlang2

Health Bar.png

Overview

This tutorial will show you how to make a VGUI Health Bar implementation. This is a simple copy and paste tutorial that works out of the box for the 2013 SDK

Code

First create hud_healthbar.cpp and hud_healthbar.h in your CLIENT project then paste this stuff into them:

hudhealthbar.cpp

#include "cbase.h" 
#include "hud.h" 
#include "hud_macros.h" 
#include "c_baseplayer.h" 
#include "hudhealthbar.h" 
#include "iclientmode.h" 
#include "vgui/ISurface.h"

using namespace vgui;

#include "tier0/memdbgon.h" 

DECLARE_HUDELEMENT (CHudHealthbar);

# define HULL_INIT 80 

//------------------------------------------------------------------------
// Purpose: Constructor
//------------------------------------------------------------------------

CHudHealthbar:: CHudHealthbar (const char * pElementName) : 
	CHudElement (pElementName), BaseClass (NULL, "HudHealthbar")
{
	vgui:: Panel * pParent = g_pClientMode-> GetViewport ();
	SetParent (pParent);

	SetHiddenBits (HIDEHUD_HEALTH | HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT);
}

//------------------------------------------------------------------------
// Purpose:
//------------------------------------------------------------------------

void CHudHealthbar:: Init()
{
	Reset();
}

//------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------

void CHudHealthbar:: Reset (void)
{
	m_flHull = HULL_INIT;
	m_nHullLow = -1;
	SetBgColor (Color (0,0,0,128));
}


//------------------------------------------------------------------------
// Purpose:
//------------------------------------------------------------------------

void CHudHealthbar:: OnThink (void)
{
	float newHull = 0;
	C_BasePlayer * local = C_BasePlayer:: GetLocalPlayer ();

	if (!local)
		return;

	// Never below zero 
	newHull = max(local->GetHealth(), 0);

	// DevMsg("Sheild at is at: %f\n",newShield);
	// Only update the fade if we've changed health
	if (newHull == m_flHull)
		return;

	m_flHull = newHull;
}


//------------------------------------------------------------------------
// Purpose: draws the power bar
//------------------------------------------------------------------------

void CHudHealthbar::Paint()
{
	// Get bar chunks

	int chunkCount = m_flBarWidth / (m_flBarChunkWidth + m_flBarChunkGap);
	int enabledChunks = (int)((float)chunkCount * (m_flHull / 100.0f) + 0.5f );

	// Draw the suit power bar
	surface()->DrawSetColor (m_HullColor);

	int xpos = m_flBarInsetX, ypos = m_flBarInsetY;

	for (int i = 0; i < enabledChunks; i++)
	{
		surface()->DrawFilledRect(xpos, ypos, xpos + m_flBarChunkWidth, ypos + m_flBarHeight);
		xpos += (m_flBarChunkWidth + m_flBarChunkGap);
	}

	// Draw the exhausted portion of the bar.
	surface()->DrawSetColor(Color(m_HullColor [0], m_HullColor [1], m_HullColor [2], m_iHullDisabledAlpha));

	for (int i = enabledChunks; i < chunkCount; i++)
	{
		surface()->DrawFilledRect(xpos, ypos, xpos + m_flBarChunkWidth, ypos + m_flBarHeight);
		xpos += (m_flBarChunkWidth + m_flBarChunkGap);
	}

	// Draw our name

	surface()->DrawSetTextFont(m_hTextFont);
	surface()->DrawSetTextColor(m_HullColor);
	surface()->DrawSetTextPos(text_xpos, text_ypos);

	//wchar_t *tempString = vgui::localize()->Find("#Valve_Hud_AUX_POWER");

	surface()->DrawPrintText(L"HULL", wcslen(L"HULL"));
}

hudhealthbar.h

#if !defined HUD_HULL_H
#define HUD_HULL_H 

#ifdef _WIN32
#pragma once
#endif

#include "hudelement.h"
#include "hud_numericdisplay.h"

//-----------------------------------------------------------------------------
// Purpose: Shows the hull bar
//-----------------------------------------------------------------------------

class CHudHealthbar : public CHudElement, public vgui::Panel
{

	DECLARE_CLASS_SIMPLE(CHudHull, vgui::Panel);

public:
	CHudHealthbar(const char * pElementName);

	virtual void Init (void);
	virtual void Reset (void);
	virtual void OnThink (void);

protected:
	virtual void Paint();

private:
	CPanelAnimationVar(Color, m_HullColor, "HullColor", "255 0 0 255");
	CPanelAnimationVar(int, m_iHullDisabledAlpha, "HullDisabledAlpha", "50");
	CPanelAnimationVarAliasType(float, m_flBarInsetX, "BarInsetX", "26", "proportional_float");
	CPanelAnimationVarAliasType(float, m_flBarInsetY, "BarInsetY", "3", "proportional_float");
	CPanelAnimationVarAliasType(float, m_flBarWidth, "BarWidth", "84", "proportional_float");
	CPanelAnimationVarAliasType(float, m_flBarHeight, "BarHeight", "4", "proportional_float");
	CPanelAnimationVarAliasType(float, m_flBarChunkWidth, "BarChunkWidth", "2", "proportional_float");
	CPanelAnimationVarAliasType(float, m_flBarChunkGap, "BarChunkGap", "1", "proportional_float");
	CPanelAnimationVar(vgui::HFont, m_hTextFont, "TextFont", "HUDBarText");
	CPanelAnimationVarAliasType(float, text_xpos, "text_xpos", "2", "proportional_float");
	CPanelAnimationVarAliasType(float, text_ypos, "text_ypos", "2", "proportional_float");
	CPanelAnimationVarAliasType(float, text2_xpos, "text2_xpos", "8", "proportional_float");
	CPanelAnimationVarAliasType(float, text2_ypos, "text2_ypos", "40", "proportional_float");
	CPanelAnimationVarAliasType(float, text2_gap, "text2_gap", "10", "proportional_float");
	float m_flHull;
	int m_nHullLow;

};

#endif // HUD_SUITPOWER_H

HudLayout.res

Now add this to your HudLayout.res file in the scripts folder, located in your mod directory, at the bottom of all the other entries:

    HudHealthbar
    {

    "fieldName" "CHudHealthBar"
    "visible" "1"
    "enabled" "1"
    "xpos" "12"
    "ypos" "420"
    "wide" "120"
    "tall" "10"
    "text_xpos" "5"
    "text_ypos" "2"
    "TextColor" "0 255 0 80"
    "PaintBackgroundType" "2"

    }