Ru/VGUI Health bar: Difference between revisions
< Ru
Jump to navigation
Jump to search
m (obsolete language category) |
|||
(10 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{Underlinked|date=January 2024}} | ||
|title= | {{lang|VGUI Health bar|title=VGUI Полоса здоровья}} | ||
| | |||
}} | {{source topicon|suf=:ru}} | ||
[[File:Health Bar.png|thumb|Демонстрация]] | |||
==Обзор== | ==Обзор== | ||
Этот туториал поможет вам создать {{LCategory|VGUI}} полоску здоровья. Это простой «скопируй-вставь» туториал, который будет работать в {{src06|4|suf=:ru}}, {{src07|4|suf=:ru}} и на {{Src13|4|suf=:ru}}. | |||
==Код== | ==Код== | ||
Для начала создайте | Для начала, создайте файлы <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 15: | Line 17: | ||
#include "hud_hull.h" | #include "hud_hull.h" | ||
#include "hud_macros.h" | #include "hud_macros.h" | ||
#include " | #include "c_baseplayer.h" | ||
#include "iclientmode.h" | #include "iclientmode.h" | ||
#include "vgui/ISurface.h" | |||
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 58: | Line 61: | ||
SetBgColor (Color (0,0,0,128)); | SetBgColor (Color (0,0,0,128)); | ||
} | } | ||
//------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||
Line 82: | Line 84: | ||
m_flHull = newHull; | m_flHull = newHull; | ||
} | } | ||
//------------------------------------------------------------------------ | //------------------------------------------------------------------------ | ||
Line 127: | 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 181: | Line 182: | ||
</source> | </source> | ||
==HudLayout.res== | ==<code>HudLayout.res</code>== | ||
Теперь, добавьте данный код в <code>HudLayout.res</code> из папки <code>scripts</code>, расположенной в папке с вашим модом: | |||
<pre> | <pre> | ||
HudHull | HudHull | ||
Line 202: | Line 203: | ||
</pre> | </pre> | ||
{{ACategory|Tutorials}} | |||
{{ACategory|VGUI}} | |||
Latest revision as of 04:08, 22 August 2024

This article needs more
links to other articles to help
integrate it into the encyclopedia. Please help improve this article by adding links
that are relevant to the context within the existing text.
January 2024



January 2024
Обзор
Этот туториал поможет вам создать Category:VGUI полоску здоровья. Это простой «скопируй-вставь» туториал, который будет работать в Source 2006,
Source 2007 и на
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" }