Ru/Basic Hud Modification: Difference between revisions
SlasteliNVL (talk | contribs) (Created page with "{{otherlang2 |title=Basic Hud Modification |en=Basic_Hud_Modification }} This tutorial shows you how to change the HUD by adding a graphic. Adding a graphic to the HUD isn't t...") |
SlasteliNVL (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
{{otherlang2 | {{otherlang2 | ||
|title= | |title=Основные HUD Модификации | ||
|en=Basic_Hud_Modification | |en=Basic_Hud_Modification | ||
}} | }} | ||
Из этого туториала Вы узнаете, как изменить HUD, добавив графику. Добавить графику в HUD не так уж и сложно. Тем не менее, рекомендуется хорошо разбираться в процессе [[Material Creation]]. | |||
== | ==Импорт материала HUD== | ||
В общем, добавление графики в HUD происходит по той же процедуре, что и добавление любого материала в игры на основе исходного кода, поэтому создавайте свою графику по своему усмотрению. Разница в том, что мы собираемся предоставить [[vtex]] некоторые дополнительные параметры в файле <code>.txt</code>, сопровождающем <code>.tga</code>. | |||
Мы будем использовать следующую настройку в качестве примера. | |||
<pre> | <pre> | ||
Line 20: | Line 20: | ||
</pre> | </pre> | ||
В этом случае мы говорим vtex... | |||
*'''$nomip''' | *'''$nomip''' | ||
: | :Не делайте мип-уровни для этой текстуры. Просто потому, что вы не будете смотреть на HUD с разных расстояний. | ||
*'''$nocompress''' | *'''$nocompress''' | ||
: | :Не используйте сжатие для этой текстуры. Это предотвращает появление артефактов на нашей графике. | ||
*'''$nolod''' | *'''$nolod''' | ||
: | :Не используйте более низкокачественные версии этой текстуры в более низких версиях DirectX. Это очевидно, поскольку разница в производительности незначительна. | ||
После того, как вы настроили соответствующие переменные, мы теперь собираемся запустить vtex. Для наглядности рекомендуется создавать графику в каталоге <code>/materials/HUD/</code> (если он не существует, создайте его). | |||
Для <code>.[[VMT]]</code> мы собираемся использовать следующую настройку. | |||
<pre> | <pre> | ||
Line 43: | Line 43: | ||
</pre> | </pre> | ||
С <code>.vmt</code> и, следовательно, с завершенным материалом, остается только изменить HUD и добавить класс. Начнем с класса. | |||
== | ==Добавление класса элемента HUD== | ||
Откройте свою копию MSVS. Выполните поиск по запросу <code>class CHud</code>. У вас должна быть возможность циклически перемещаться по нескольким файлам. Я рекомендую вам сохранить все эти материалы, а если вы редактируете, сделайте резервную копию, чтобы вы могли использовать их для справки. | |||
Все, что мы пытаемся сделать, это поместить графику на экран. В Half-Life 2 есть функция, которую мы должны вызвать, чтобы это произошло, под названием <code>paint</code>. Нам понадобится переменная, которая будет использоваться в качестве заполнителя для нашего спрайта, чтобы мы могли вызывать ее в игре с помощью функции <code>paint</code>. Также было бы неплохо иметь возможность включать и выключать это, поэтому мы собираемся узнать, как использовать переменные для управления элементами HUD таким образом. | |||
Вот наш пример определения класса. | |||
<source lang="cpp"> | <source lang="cpp"> | ||
Line 74: | Line 74: | ||
</source> | </source> | ||
Скопируйте приведенный выше код в <code>hud_import.h</code>. Помните, что чем проще вы сохраните вещи сейчас, тем легче будет понять ваш код позже, если вам придется его изменить. | |||
Теперь создайте новый файл <code>.cp </code> с именем <code>hud_import.cpp</code>. Вот необходимые инструкции include и pre-function (вверху вашего файла <code>.cpp</code>): | |||
<source lang="cpp"> | <source lang="cpp"> | ||
Line 94: | Line 94: | ||
</source> | </source> | ||
Чтобы начать это, мы должны загрузить переменную указателя текстуры. Лучшее место для этого - конструктор класса. | |||
Что будем делать: | |||
* | * Получите область просмотра и сделайте ее родительской | ||
* | * сделать невидимым, но с альфа 100% | ||
* | * создать новый идентификатор текстуры для нашей текстуры/спрайта | ||
* | * подключить id к текстуре | ||
* | * показать это только в том случае, если у вас есть костюм и вы не умерли | ||
Вот как это делается. | |||
<source lang="cpp"> | <source lang="cpp"> | ||
Line 123: | Line 123: | ||
</source> | </source> | ||
Наша графика изначально невидима, поэтому нам нужно ее раскрасить. Перейдем к функции <code>paint</code>. Этот, хотя и проще, имеет очень важную часть, связанную с размером и интервалом, с которой нужно иметь дело. | |||
<source lang="cpp"> | <source lang="cpp"> | ||
Line 134: | Line 134: | ||
</source> | </source> | ||
Во-первых, мы устанавливаем для границы рисования значение false. <! - Пожалуйста, кто-нибудь со навыками модификации HUD, объясните здесь, как ведут себя бордюры. -> Затем мы рисуем нашу текстуру на нашей поверхности. Следующая строка - важная часть. Фактически вы определяете, где разместить панель и насколько она велика, в файле <code>HudLayout.res</code>. Это последнее утверждение прикреплено к самому изображению. Вы устанавливаете его значения следующим образом... | |||
<source lang="cpp"> | <source lang="cpp"> | ||
Line 144: | Line 144: | ||
There are two steps to go, our cvar toggle as well as editing the <code>HudLayout.res</code>. | There are two steps to go, our cvar toggle as well as editing the <code>HudLayout.res</code>. | ||
== | == Определение ConVar == | ||
Во-первых, давайте определим переменную. Вернитесь к началу файла cpp и вставьте это: | |||
<source lang="cpp"> | <source lang="cpp"> | ||
Line 152: | Line 152: | ||
</source> | </source> | ||
<code>show_beta</code> | <code>show_beta</code> это имя переменной, которую мы используем в качестве примера. Фактически мы создаем серию картинок для второго поста. | ||
Эта переменная позволит нам ввести в консоль <code>show_beta 1</code>. | |||
Но что это даст нам? Нам нужна функция, чтобы это проверить. | |||
<source lang="cpp"> | <source lang="cpp"> | ||
Line 168: | Line 167: | ||
</source> | </source> | ||
Не слишком сложный, просто традиционный логический статус. А поскольку это что-то, что может измениться в любой момент, мы должны поместить это в нашу функцию think, чтобы она всегда проверялась. | |||
<source lang="cpp"> | <source lang="cpp"> | ||
Line 179: | Line 178: | ||
</source> | </source> | ||
Вот и все. Постройте проект, чтобы мы могли перейти на .res. | |||
== | ==Редактирование [[HudLayout.res]]== | ||
Откройте <code>/scripts/HudLayout.res</code> в основном каталоге вашего мода и вставьте в него следующее. | |||
<pre> | <pre> | ||
Line 200: | Line 199: | ||
</pre> | </pre> | ||
Есть несколько настроек на выбор. Для получения дополнительной информации о схемах VGUI вы можете прочитать [[VGUI Documentation#Schemes]]. | |||
Теперь, загружая игру, вы должны смотреть на свой HUD с изображением в правом верхнем углу экрана с закругленными углами.. | |||
''' | '''Дополнительная информация''' | ||
Если по какой-то причине вы хотите, чтобы в правом верхнем углу отображалась '''animated''' Текстура, как я хотел, это возможно и может быть достигнуто. Не используйте VtfEdit, потому что когда я это делал, он не работал | |||
Используйте оригинальный метод VTEX. Обычно в текстовом документе, сопровождающем анимированный файл .tgas, вы должны указать начальный и конечный кадры, как это | |||
"startframe" "0" | "startframe" "0" | ||
"endframe" "7" | "endframe" "7" | ||
И назовите этот документ .txt так же, как ваш .tgas, щелкните и перетащите его через VTEX и дайте ему поработать. | |||
( | (ПРИМЕЧАНИЕ~ у вас должны быть файлы .txt и .tgas в папке materialsrc вашей папки sourcesdkcontent/SOURCEMOD/для работы VTEX) | ||
( | (ПРИМЕЧАНИЕ~ вы можете проверить, что он работает в VTFEDIT, если вы откроете его там и нажмете кнопку воспроизведения, но не сохраняйте его там !!!) | ||
Итак, когда у вас есть анимированный VTF, поместите его в папку SourceMod/materials. | |||
Теперь создайте vmt, который в основном является документом Txt. | |||
( | (вы можете сделать их в Блокноте, но убедитесь, что расширение - .vmt) | ||
Вставьте следующий код в свой .vmt | |||
<pre> | <pre> | ||
Line 237: | Line 236: | ||
} | } | ||
</pre> | </pre> | ||
Выше '' 'hud' '' относится к папке внутри вашей папки материалов, в которой находится VTF, а '' 'NameOfYourImage' '' относится к имени вашего VTF. | |||
( | (ПРИМЕЧАНИЕ ~ ваш vmt должен называться точно так же, как ваш VTF, например = image.vtf и image.vmt) | ||
И это покрывает мое объяснение того, как добавлять анимированные текстуры в hud в игре. | |||
Ниже приведена ссылка на мое бездействие с анимированными devilsTrap.vtf. | |||
== | == Внешние ссылки == | ||
* [http://www.youtube.com/watch?v=q0eXn7nwuGI Youtube Tutorial part 1] | * [http://www.youtube.com/watch?v=q0eXn7nwuGI Youtube Tutorial part 1] | ||
* [http://www.youtube.com/watch?v=vCK-Zb80HNw&feature=channel Youtube Tutorial part 2] | * [http://www.youtube.com/watch?v=vCK-Zb80HNw&feature=channel Youtube Tutorial part 2] |
Revision as of 05:56, 20 June 2021
Template:Otherlang2 Из этого туториала Вы узнаете, как изменить HUD, добавив графику. Добавить графику в HUD не так уж и сложно. Тем не менее, рекомендуется хорошо разбираться в процессе Material Creation.
Импорт материала 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 вы можете прочитать VGUI Documentation#Schemes.
Теперь, загружая игру, вы должны смотреть на свой 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.