VGUI Смуга здоров'я
< Uk
		
		
		
		Jump to navigation
		Jump to search
		Огляд
Привіт, друзі! Ми додамо панель здоров'я до  Source 2006,
 Source 2006,  Source 2007 та
 Source 2007 та  Source 2013.
 Source 2013. 
Програма
Зробити hud_healthbar.cpp та hud_healthbar.h У розділі «Client»:
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: Конструктор
//------------------------------------------------------------------------
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: нічия
//------------------------------------------------------------------------
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: Показує бар!
//-----------------------------------------------------------------------------
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
Вставте це HudLayout.res в scripts папку:
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"
}



























