VGUI Health bar: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
No edit summary |
||
Line 6: | Line 6: | ||
==Code== | ==Code== | ||
First create ''' | First create '''hud_healthbar.cpp''' and '''hud_healthbar.h''' in your CLIENT project then paste these files into them: | ||
==hud_hull.cpp== | ==hud_hull.cpp== | ||
Line 12: | Line 12: | ||
#include "cbase.h" | #include "cbase.h" | ||
#include "hud.h" | #include "hud.h" | ||
#include "hud_macros.h" | #include "hud_macros.h" | ||
#include " | #include "c_baseplayer.h" | ||
#include "hudhealthbar.h" | |||
#include "iclientmode.h" | #include "iclientmode.h" | ||
#include "vgui/ISurface.h" | |||
using namespace vgui; | using namespace vgui; | ||
Line 21: | Line 22: | ||
#include "tier0/memdbgon.h" | #include "tier0/memdbgon.h" | ||
DECLARE_HUDELEMENT ( | DECLARE_HUDELEMENT (CHudHealthbar); | ||
# define HULL_INIT 80 | # define HULL_INIT 80 | ||
Line 29: | Line 30: | ||
//------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||
CHudHealthbar:: CHudHealthbar (const char * pElementName) : | |||
CHudElement (pElementName), BaseClass (NULL, " | CHudElement (pElementName), BaseClass (NULL, "HudHealthbar") | ||
{ | { | ||
vgui:: Panel * pParent = g_pClientMode-> GetViewport (); | vgui:: Panel * pParent = g_pClientMode-> GetViewport (); | ||
Line 42: | Line 43: | ||
//------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||
void | void CHudHealthbar:: Init() | ||
{ | { | ||
Reset(); | Reset(); | ||
Line 51: | Line 52: | ||
//----------------------------------------------------------------------- | //----------------------------------------------------------------------- | ||
void | void CHudHealthbar:: Reset (void) | ||
{ | { | ||
m_flHull = HULL_INIT; | m_flHull = HULL_INIT; | ||
Line 63: | Line 64: | ||
//------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||
void | void CHudHealthbar:: OnThink (void) | ||
{ | { | ||
float newHull = 0; | float newHull = 0; | ||
Line 87: | Line 88: | ||
//------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||
void | void CHudHealthbar::Paint() | ||
{ | { | ||
// Get bar chunks | // Get bar chunks | ||
Line 126: | Line 127: | ||
</source> | </source> | ||
== | ==hudhealthbar.h== | ||
<source lang="cpp"> | <source lang="cpp"> | ||
#if !defined HUD_HULL_H | #if !defined HUD_HULL_H | ||
Line 142: | Line 143: | ||
//----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||
class | class CHudHealthbar : public CHudElement, public vgui::Panel | ||
{ | { | ||
Line 148: | Line 149: | ||
public: | public: | ||
CHudHealthbar(const char * pElementName); | |||
virtual void Init (void); | virtual void Init (void); | ||
Line 181: | Line 182: | ||
==HudLayout.res== | ==HudLayout.res== | ||
Now add this to your '''HudLayout.res''' file in the scripts folder, located in your mod directory: | Now add this to your '''HudLayout.res''' file in the '''scripts''' folder, located in your mod directory: | ||
<pre> | <pre> | ||
HudHull | HudHull | ||
{ | { | ||
"fieldName" " | "fieldName" "HudHealthbar" | ||
"visible" "1" | "visible" "1" | ||
"enabled" "1" | "enabled" "1" | ||
Line 200: | Line 201: | ||
} | } | ||
</pre> | </pre> | ||
Revision as of 13:57, 19 August 2021
Overview
This tutorial will show you how to make a VGUI Health Bar implementation. This is a simple copy and paste tutorial and works on EP1, OB and 2013 engines.
Code
First create hud_healthbar.cpp and hud_healthbar.h in your CLIENT project then paste these files into them:
hud_hull.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:
HudHull { "fieldName" "HudHealthbar" "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" }