Основные HUD Модификации

From Valve Developer Community
Jump to: navigation, search
English

Из этого туториала Вы узнаете, как изменить 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.

Внешние ссылки