HUD просто и понятно

Материал из Наша Wiki - Наша энциклопедия Half-Life
Перейти к: навигация, поиск

Сегодня я расскажу, как сделать свой HUD с текстуркой. И так приступим, откроем клиентскую часть и создадим новый cpp например hud_mail.cpp
Для начала:

#include "cbase.h"
#include "hudelement.h"
#include "hud_macros.h"
#include "iclientmode.h"
#include "view.h" 
#include <vgui_controls/Panel.h>
#include <vgui_controls/Frame.h>
#include <vgui/IScheme.h>
#include <vgui/ISurface.h>
#include <vgui/ILocalize.h>
#include "tier0/memdbgon.h" 

Ну, тут вроде всё понятно?
Далее описываем класс:

class CHudInfo : public CHudElement, public vgui::Panel
{
DECLARE_CLASS_SIMPLE( CHudInfo, vgui::Panel );

public:
CHudInfo( const char *pElementName );

virtual void Paint();


private:
int m_nTextureID;
}; 
DECLARE_HUDELEMENT( CHudInfo );

Чтобы просто была текстурка нам достаточно всего одной функции paint();

Далее:

CHudInfo::CHudInfo( const char *pElementName ) : CHudElement( pElementName ), BaseClass(NULL, "InfoROD")
{

vgui::Panel *pParent = g_pClientMode->GetViewport();
SetParent( pParent );

m_nTextureID = vgui::surface()->CreateNewTextureID();

vgui::surface()->DrawSetTextureFile( m_nTextureID, "sprites/mail" , true, false);

SetHiddenBits( HIDEHUD_PLAYERDEAD );
} 


Собственно vgui::surface()->DrawSetTextureFile( m_nTextureID, "sprites/mail" , true, false); тут пишем путь к своему спрайту. SetHiddenBits( HIDEHUD_PLAYERDEAD ); Здесь говорится, что нужно убрать этот HUD с экрана только тогда, когда игрок умрёт. BaseClass(NULL, "InfoROD") Тут важная штука... по ней мы будем хранить информацию о HuD. Так с этим всё ок вроде...
Далее сама функция paint()

void CHudInfo::Paint( void )
{

vgui::surface()->DrawSetTexture( m_nTextureID );
vgui::surface()->DrawTexturedRect( 0, 0, 50, 30 );

} 

Где vgui::surface()->DrawTexturedRect это размеры спрайта. Всё с кодом закончили, теперь можно смело компилировать. Далее нам нужно создать спрайт. Vmt файл для текстуры спрайта должен быть такой:

"Sprite"
{
"$spriteorientation" "vp_parallel"
"$spriteorigin" "[ 0.50 0.50 ]"
"$ignorez" 1
"$baseTexture" "sprites/mail"
}

Так тут вроде всё понятно. Далее нужно добавить информацию о спрайте в файл HudLayout.res. Итак открываем его (scripts\HudLayout.res) и добавляем:

Файл:hud mail.jpg
Как выглядит спрайт в игре (конверт на экране слева)
InfoROD
{
"fieldName" "HudInfo"
"visible" "1"
"enabled" "1"  // активирован или нет
"xpos" "16"    // положение по x
"ypos" "200"   // положение по y
"wide" "50"
"tall" "30"

"PaintBackgroundType" "0"
}

Всё. Теперь всё сохраняем и запускаем игру и вуаля...
Здесь я описал базовое создание, потом можно его анимировать, подключать event и т.п 10x



Автор:Fena (aka [SP]Phoenix)
Оригинал статьи.
Добавил в Wiki: a[x]el