Ru/Basic Hud Modification

Из этого туториала Вы узнаете, как изменить HUD, добавив графику. Добавить графику в HUD не так уж и сложно. Тем не менее, рекомендуется хорошо разбираться в процессе .
==Импорт материала HUD==
В общем, добавление графики в HUD происходит по той же процедуре, что и добавление любого материала в игры на основе исходного кода, поэтому создавайте свою графику по своему усмотрению. Разница в том, что мы собираемся предоставить vtex некоторые дополнительные параметры в файле .txt, сопровождающем .tga.
Мы будем использовать следующую настройку в качестве примера.
"UnlitGeneric"
{
 "nomip" "1"
 "nocompress" "1"
 "nolod" "1"
}
В этом случае мы говорим vtex...
*$nomip
:Не делайте мип-уровни для этой текстуры. Просто потому, что вы не будете смотреть на HUD с разных расстояний.
*$nocompress
:Не используйте сжатие для этой текстуры. Это предотвращает появление артефактов на нашей графике.
*$nolod
:Не используйте более низкокачественные версии этой текстуры в более низких версиях DirectX. Это очевидно, поскольку разница в производительности незначительна.
После того, как вы настроили соответствующие переменные, мы теперь собираемся запустить vtex. Для наглядности рекомендуется создавать графику в каталоге /materials/HUD/ (если он не существует, создайте его).
Для мы собираемся использовать следующую настройку.
"UnlitGeneric"
{
 "$basetexture" "HUD/nameofyourgraphic"
 "$translucent" "1"
 "$translucency" "1"
 "$ignorez" "1"
}
С .vmt и, следовательно, с завершенным материалом, остается только изменить HUD и добавить класс. Начнем с класса.
==Добавление класса элемента HUD==
Откройте свою копию MSVS. Выполните поиск по запросу class CHud. У вас должна быть возможность циклически перемещаться по нескольким файлам. Я рекомендую вам сохранить все эти материалы, а если вы редактируете, сделайте резервную копию, чтобы вы могли использовать их для справки.
Все, что мы пытаемся сделать, это поместить графику на экран. В Half-Life 2 есть функция, которую мы должны вызвать, чтобы это произошло, под названием paint. Нам понадобится переменная, которая будет использоваться в качестве заполнителя для нашего спрайта, чтобы мы могли вызывать ее в игре с помощью функции paint. Также было бы неплохо иметь возможность включать и выключать это, поэтому мы собираемся узнать, как использовать переменные для управления элементами HUD таким образом.
Вот наш пример определения класса.
#include "hudelement.h"
#include <vgui_controls/Panel.h>
using namespace vgui;
class CHudImport : public CHudElement, public Panel
{
 DECLARE_CLASS_SIMPLE( CHudImport, Panel );
 public:
 CHudImport( const char *pElementName );
 void togglePrint();
 virtual void OnThink();
 protected:
 virtual void Paint();
 int m_nImport;
};
Скопируйте приведенный выше код в hud_import.h. Помните, что чем проще вы сохраните вещи сейчас, тем легче будет понять ваш код позже, если вам придется его изменить.
Теперь создайте новый файл .cp с именем hud_import.cpp. Вот необходимые инструкции include и pre-function (вверху вашего файла .cpp):
#include "hud.h"
#include "cbase.h"
#include "hud_import.h"
#include "iclientmode.h"
#include "hud_macros.h"
#include "vgui_controls/controls.h"
#include "vgui/ISurface.h"
#include "tier0/memdbgon.h"
using namespace vgui;
DECLARE_HUDELEMENT( CHudImport );
Чтобы начать это, мы должны загрузить переменную указателя текстуры. Лучшее место для этого - конструктор класса.
Что будем делать:
* Получите область просмотра и сделайте ее родительской
* сделать невидимым, но с альфа 100%
* создать новый идентификатор текстуры для нашей текстуры/спрайта
* подключить id к текстуре
* показать это только в том случае, если у вас есть костюм и вы не умерли
Вот как это делается.
CHudImport::CHudImport( const char *pElementName ) : CHudElement( pElementName ), BaseClass( NULL, "HudImport" )
{
 Panel *pParent = g_pClientMode->GetViewport();
 SetParent( pParent ); 
 
 SetVisible( false );
 SetAlpha( 255 );
 //AW Create Texture for Looking around
 m_nImport = surface()->CreateNewTextureID();
 surface()->DrawSetTextureFile( m_nImport, "HUD/import" , true, true);
 SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT );
}
Наша графика изначально невидима, поэтому нам нужно ее раскрасить. Перейдем к функции paint. Этот, хотя и проще, имеет очень важную часть, связанную с размером и интервалом, с которой нужно иметь дело.
void CHudImport::Paint()
{
 SetPaintBorderEnabled(false);
 surface()->DrawSetTexture( m_nImport );
 surface()->DrawTexturedRect( 2, 2, 128, 128 );
}
Во-первых, мы устанавливаем для границы рисования значение false. <! - Пожалуйста, кто-нибудь со навыками модификации HUD, объясните здесь, как ведут себя бордюры. -> Затем мы рисуем нашу текстуру на нашей поверхности. Следующая строка - важная часть. Фактически вы определяете, где разместить панель и насколько она велика, в файле HudLayout.res. Это последнее утверждение прикреплено к самому изображению. Вы устанавливаете его значения следующим образом...
surface()->DrawTexturedRect( xspacing , yspacing, xsize, ysize );
You would put your own values in there according to the size of your picture.
There are two steps to go, our cvar toggle as well as editing the HudLayout.res.
== Определение ConVar ==
Во-первых, давайте определим переменную. Вернитесь к началу файла cpp и вставьте это:
static ConVar show_beta("show_beta", "0", 0, "toggles beta icon in upper right corner");
show_beta это имя переменной, которую мы используем в качестве примера. Фактически мы создаем серию картинок для второго поста.
Эта переменная позволит нам ввести в консоль show_beta 1.
Но что это даст нам? Нам нужна функция, чтобы это проверить.
void CHudImport::togglePrint()
{
 if (!show_beta.GetBool())
 this->SetVisible(false);
 else
 this->SetVisible(true);
}
Не слишком сложный, просто традиционный логический статус. А поскольку это что-то, что может измениться в любой момент, мы должны поместить это в нашу функцию think, чтобы она всегда проверялась.
void CHudImport::OnThink()
{
 togglePrint();
 BaseClass::OnThink();
}
Вот и все. Постройте проект, чтобы мы могли перейти на .res.
==Редактирование ==
Откройте /scripts/HudLayout.res в основном каталоге вашего мода и вставьте в него следующее.
 HudImport
 {
 "fieldName" "HudImport"
 "xpos" "r86"
 "ypos" "6"
 "wide" "80"
 "tall" "34"
 "visible" "0"
 "enabled" "1"
 
 "PaintBackgroundType" "2"
 }
Есть несколько настроек на выбор. Для получения дополнительной информации о схемах VGUI вы можете прочитать .
Теперь, загружая игру, вы должны смотреть на свой HUD с изображением в правом верхнем углу экрана с закругленными углами..
Дополнительная информация
Если по какой-то причине вы хотите, чтобы в правом верхнем углу отображалась animated Текстура, как я хотел, это возможно и может быть достигнуто. Не используйте VtfEdit, потому что когда я это делал, он не работал
Используйте оригинальный метод VTEX. Обычно в текстовом документе, сопровождающем анимированный файл .tgas, вы должны указать начальный и конечный кадры, как это
"startframe" "0"
"endframe" "7"
И назовите этот документ .txt так же, как ваш .tgas, щелкните и перетащите его через VTEX и дайте ему поработать.
(ПРИМЕЧАНИЕ~ у вас должны быть файлы .txt и .tgas в папке materialsrc вашей папки sourcesdkcontent/SOURCEMOD/для работы VTEX)
(ПРИМЕЧАНИЕ~ вы можете проверить, что он работает в VTFEDIT, если вы откроете его там и нажмете кнопку воспроизведения, но не сохраняйте его там !!!)
Итак, когда у вас есть анимированный VTF, поместите его в папку SourceMod/materials.
Теперь создайте vmt, который в основном является документом Txt.
(вы можете сделать их в Блокноте, но убедитесь, что расширение - .vmt)
Вставьте следующий код в свой .vmt
"UnlitGeneric"
{
 "$basetexture" "hud/NameOfYourImage"
 "$translucent" "1"
 "Proxies"
 {
 "AnimatedTexture"
 {
 "animatedtexturevar" "$basetexture"
 "animatedtextureframenumvar" "$frame"
 "animatedtextureframerate" 10
 }
 }
}
Выше 'hud' относится к папке внутри вашей папки материалов, в которой находится VTF, а 'NameOfYourImage' относится к имени вашего VTF.
(ПРИМЕЧАНИЕ ~ ваш vmt должен называться точно так же, как ваш VTF, например = image.vtf и image.vmt)
И это покрывает мое объяснение того, как добавлять анимированные текстуры в hud в игре.
Ниже приведена ссылка на мое бездействие с анимированными devilsTrap.vtf.
== Внешние ссылки ==
* Youtube Tutorial part 1
* Youtube Tutorial part 2
* Youtube Tutorial part 3
* Youtube clip of the hud modification in action
* gneu.org