Эта статья документации для всего, что использует платформу Source. Нажмите для получения дополнительной информации.

Ru/VGUI Health bar: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
m ("Includes" in cpp for SE 2013, also added image with demonstration of this code.Who use SE 2006-2009?)
m (obsolete language category)
 
(8 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{otherlang2
{{Underlinked|date=January 2024}}
|title=VGUI Полоса здоровья
{{lang|VGUI Health bar|title=VGUI Полоса здоровья}}
|en=VGUI_Health_bar
 
|ua=VGUI_Health_bar:ua
{{source topicon|suf=:ru}}
}}
 
[[File:Health Bar.png|thumb|Демонстрация]]
[[File:Health Bar.png|thumb|Демонстрация]]
==Обзор==
==Обзор==
Этот туториал поможет вам создать [[VGUI]] полоску здоровья. Это простой «скопируй-вставь» туториал, который будет работать в Episode One, Orange Box и на Source 2013.
Этот туториал поможет вам создать {{LCategory|VGUI}} полоску здоровья. Это простой «скопируй-вставь» туториал, который будет работать в {{src06|4|suf=:ru}}, {{src07|4|suf=:ru}} и на {{Src13|4|suf=:ru}}.


==Код==
==Код==
Для начала, создайте файлы '''hud_hull.cpp''' and '''hud_hull.h''' в проекте КЛИЕНТА, и вставьте туда следующее:
Для начала, создайте файлы <code>hud_hull.cpp</code> и <code>hud_hull.h</code> в проекте КЛИЕНТА, и вставьте туда следующее:


==hud_hull.cpp==
==<code>hud_hull.cpp</code>==
<source lang="cpp">
<source lang="cpp">
#include "cbase.h"  
#include "cbase.h"  
Line 23: Line 23:
using namespace vgui;
using namespace vgui;


#include "tier0/memdbgon.h"  
#include "tier0/memdbgon.h"


DECLARE_HUDELEMENT (CHudHull);
DECLARE_HUDELEMENT (CHudHull);


# define HULL_INIT 80  
# define HULL_INIT 80


//------------------------------------------------------------------------
//------------------------------------------------------------------------
Line 61: Line 61:
SetBgColor (Color (0,0,0,128));
SetBgColor (Color (0,0,0,128));
}
}


//------------------------------------------------------------------------
//------------------------------------------------------------------------
Line 85: Line 84:
m_flHull = newHull;
m_flHull = newHull;
}
}


//------------------------------------------------------------------------
//------------------------------------------------------------------------
Line 130: Line 128:
</source>
</source>


==hud_hull.h==
==<code>hud_hull.h</code>==
<source lang="cpp">
<source lang="cpp">
#if !defined HUD_HULL_H
#if !defined HUD_HULL_H
#define HUD_HULL_H  
#define HUD_HULL_H


#ifdef _WIN32
#ifdef _WIN32
Line 184: Line 182:
</source>
</source>


==HudLayout.res==
==<code>HudLayout.res</code>==
Теперь, добавьте данный код в '''HudLayout.res''' из папки '''scripts''', расположенной в папке с вашим модом:
Теперь, добавьте данный код в <code>HudLayout.res</code> из папки <code>scripts</code>, расположенной в папке с вашим модом:
<pre>
<pre>
HudHull
HudHull
Line 205: Line 203:
</pre>
</pre>


[[Category:Programming]] [[Category:VGUI]]
{{ACategory|Tutorials}}
{{ACategory|VGUI}}

Latest revision as of 04:08, 22 August 2024

Underlinked - Logo.png
This article needs more Wikipedia icon links to other articles to help Wikipedia icon integrate it into the encyclopedia. Please help improve this article by adding links Wikipedia icon that are relevant to the context within the existing text.
January 2024
English (en)Español (es)Русский (ru)Українська (uk)Translate (Translate)

Демонстрация

Обзор

Этот туториал поможет вам создать Category:VGUI(en) полоску здоровья. Это простой «скопируй-вставь» туториал, который будет работать в Source 2006 Source 2006, Source 2007 Source 2007 и на Source 2013 Source 2013.

Код

Для начала, создайте файлы hud_hull.cpp и hud_hull.h в проекте КЛИЕНТА, и вставьте туда следующее:

hud_hull.cpp

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

using namespace vgui;

#include "tier0/memdbgon.h"

DECLARE_HUDELEMENT (CHudHull);

# define HULL_INIT 80

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

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

	SetHiddenBits (HIDEHUD_HEALTH | HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT);
}

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

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

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

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

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

void CHudHull:: 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 CHudHull::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"));
}

hud_hull.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 CHudHull : public CHudElement, public vgui::Panel
{

	DECLARE_CLASS_SIMPLE(CHudHull, vgui::Panel);

public:
	CHudHull(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" "HudHull"
	"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"

}