Difference between revisions of "Team Icons:ru"
(Перевод на русский язык) |
|||
Line 4: | Line 4: | ||
|en=Team_Icons | |en=Team_Icons | ||
}} | }} | ||
− | Этот урок расскажет о том, как выводить Изображение как HUD элемент в зависимости от вашей игровой команды. К примеру, если игрок играет за первую команду выводиться 'одно изображение', но если из другой команды, выводиться 'второе изображение'. | + | Этот урок расскажет о том, как выводить Изображение как HUD элемент в зависимости от вашей игровой команды. К примеру, если игрок играет за первую команду выводиться '''одно изображение''', но если из другой команды, выводиться 'второе изображение'. |
Вот что получиться в итоге:[[Image:Hud icon example.png]] | Вот что получиться в итоге:[[Image:Hud icon example.png]] | ||
Revision as of 14:07, 8 July 2019
Этот урок расскажет о том, как выводить Изображение как HUD элемент в зависимости от вашей игровой команды. К примеру, если игрок играет за первую команду выводиться одно изображение, но если из другой команды, выводиться 'второе изображение'.
Вот что получиться в итоге:
Contents
Требования
Чтобы этот урок работал, у вас должны быть 2 vtf изображения с файлом - настройками vmt. Если вам нужно, то пример VMT ниже:
"UnlitGeneric" { "$basetexture" "vgui/hud/teamicons/iraqiran" "$translucent" "1" "$ignorez" "1" }
HUD Элемент
Создайте два файла в client-части вашего проекта, назвать можете как хотите, но мы будем использовать Rteamicon.cpp и Rteamicon.h.
Теперь откройте Rteamicon.cpp и начнём с объявления заголовков
// ======= *********-|RECOIL|-********* =======// // Программист: John Stuart // ============================================// #include "hud.h" #include "cbase.h" #include "Rteamicon.h" #include "iclientmode.h" #include "hud_macros.h" #include "c_team.h" #include "vgui_controls/controls.h" #include "vgui/ISurface.h" #include "hl2mp_gamerules.h" #include "tier0/memdbgon.h" using namespace vgui; DECLARE_HUDELEMENT( CRTeamIcon );
Сейчас у нас есть заголовок файла, нам нужно написать конструктор. Прям под строчкой using namespace vgui; вставьте это:
//----------------------------------------------------------- // Purpose: //----------------------------------------------------------- CRTeamIcon::CRTeamIcon( const char *pElementName ) : CHudElement( pElementName ), BaseClass( NULL, "CRTeamIcon" ) { Panel *pParent = g_pClientMode->GetViewport(); SetParent( pParent ); SetVisible( true ); SetEnabled( true ); // Эти дефайны m_nIraqIcon в "vgui/hud/teamicons/iraqiran" вызывают изображение vtf. m_nIraqIcon = vgui::surface()->CreateNewTextureID(); vgui::surface()->DrawSetTextureFile( m_nIraqIcon, "vgui/hud/teamicons/iraqiran" , true, false); // Получаем соглашение m_nBritishIcon = vgui::surface()->CreateNewTextureID(); vgui::surface()->DrawSetTextureFile( m_nBritishIcon, "vgui/hud/teamicons/ukusa" , true, false); SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT ); }
Теперь у нас есть конструктор, мы можем пойти дальше и создать основную функцию для работы, для этого примера мы будем использовать "Paint Background" потому-что если вы будите использовать нормальный "Paint" вы будете иметь черный прозрачный фон.
//-------------------------------------------------------------- // Purpose: Если игрок за комбайнов, показываем Иракскую иконку // Purpose+: но если я за Повстанцы показываем Британскую иконку //-------------------------------------------------------------- void CRTeamIcon::PaintBackground() { SetBgColor(Color(0,0,0,0)); CBasePlayer *pPlayer = UTIL_PlayerByIndex(engine->GetLocalPlayer()); if(pPlayer->GetTeamNumber() == TEAM_COMBINE) // Если команда Комбайны { vgui::surface()->DrawSetColor(GetFgColor()); vgui::surface()->DrawSetTexture( m_nIraqIcon ); vgui::surface()->DrawTexturedRect(0, 0, GetWide(), GetTall()); //DevMsg("Team Combine Icon Displayed\n"); // Spams console hehe :D } else if(pPlayer->GetTeamNumber() == TEAM_REBELS)// Если команда Повстанцы { vgui::surface()->DrawSetColor(GetFgColor()); vgui::surface()->DrawSetTexture( m_nBritishIcon ); vgui::surface()->DrawTexturedRect(0, 0, GetWide(), GetTall()); //DevMsg("Team Rebels Icon Displayed\n"); } SetPaintBorderEnabled(false); BaseClass::PaintBackground(); }
Теперь мы почти закончили фактический элемент HUD, чтобы всё заработало, нужно закончить файл заголовка. ОткройтеRteamicon.h и поместите туда это:
// ======= *********-|RECOIL|-********* =======// // Программист: John Stuart // ============================================// #include "hudelement.h" #include <vgui_controls/Panel.h> using namespace vgui; //----------------------------------------------------------- // Purpose: //----------------------------------------------------------- class CRTeamIcon : public CHudElement, public Panel { DECLARE_CLASS_SIMPLE( CRTeamIcon, Panel ); public: CRTeamIcon( const char *pElementName ); protected: virtual void PaintBackground(); int m_nIraqIcon; int m_nBritishIcon; };
Материалы
Сейчас HUD работает, мы можем перейти к получению актуального изображения. оно уже есть, но его координаты не определены. И так, заходим в папку с модом и открываем файл "scripts/HudLayout.res" и помещаем это внутрь.
CRTeamIcon { "fieldName" "CRTeamIcon" "xpos" "r62" "ypos" "0" "wide" "64" "tall" "32" "visible" "1" "enabled" "1" "PaintBackgroundType" "2" }
Конечно, вы можете разместить свое изображение в любом месте как вам нравится, и задать размер как вам нужно, отредактировав 'xpos,ypos,wide,tall в settings/needs.
Результат
Теперь вы должны получить элемент HUD, который отображает иконку на вашем экране, в зависимости от команды в которой вы находитесь.
Перевод: --Slam12f 00:25, 18 July 2013 (PDT)