Основные HUD Модификации
![Info content.png](/w/images/f/f6/Info_content.png)
Эта переведенная страница нуждается в обновлении.
Вы можете помочь, закончив перевод.
Also, please make sure the article tries to comply with thealternate languages guide.Из этого туториала Вы узнаете, как изменить HUD, добавив графику. Добавить графику в HUD не так уж и сложно. Тем не менее, рекомендуется хорошо разбираться в процессе Создание материала .
Contents
Импорт материала HUD
В общем, добавление графики в HUD происходит по той же процедуре, что и добавление любого материала в игры на основе исходного кода, поэтому создавайте свою графику по своему усмотрению. Разница в том, что мы собираемся предоставить vtex некоторые дополнительные параметры в файле
.txt
, сопровождающем .tga
.
Мы будем использовать следующую настройку в качестве примера.
"UnlitGeneric" { "nomip" "1" "nocompress" "1" "nolod" "1" }
В этом случае мы говорим vtex...
- $nomip
- Не делайте мип-уровни для этой текстуры. Просто потому, что вы не будете смотреть на HUD с разных расстояний.
- $nocompress
- Не используйте сжатие для этой текстуры. Это предотвращает появление артефактов на нашей графике.
- $nolod
- Не используйте более низкокачественные версии этой текстуры в более низких версиях DirectX. Это очевидно, поскольку разница в производительности незначительна.
После того, как вы настроили соответствующие переменные, мы теперь собираемся запустить vtex. Для наглядности рекомендуется создавать графику в каталоге /materials/HUD/
(если он не существует, создайте его).
Для .vmt
мы собираемся использовать следующую настройку.
"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.
Редактирование HudLayout.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.