Ru/Team Icons: Difference between revisions
No edit summary |
m (obsolete language category) |
||
(4 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{DISPLAYTITLE:Командные Иконки}} | ||
{{lang|Team Icons}} | |||
| | |||
}} | |||
Этот урок расскажет о том, как выводить Изображение как HUD элемент в зависимости от вашей игровой команды. К примеру, если игрок играет за первую команду выводиться '''одно изображение''', но если из другой команды, выводиться '''второе изображение'''. | Этот урок расскажет о том, как выводить Изображение как HUD элемент в зависимости от вашей игровой команды. К примеру, если игрок играет за первую команду выводиться '''одно изображение''', но если из другой команды, выводиться '''второе изображение'''. | ||
Вот что получиться в итоге:[[ | Вот что получиться в итоге:[[File:Hud icon example.png]] | ||
==Требования== | ==Требования== | ||
Line 26: | Line 24: | ||
Теперь откройте '''Rteamicon.cpp''' и начнём с объявления заголовков | Теперь откройте '''Rteamicon.cpp''' и начнём с объявления заголовков | ||
< | <syntaxhighlight lang=cpp> | ||
// ======= *********-|RECOIL|-********* =======// | // ======= *********-|RECOIL|-********* =======// | ||
// Программист: John Stuart | // Программист: John Stuart | ||
Line 45: | Line 43: | ||
DECLARE_HUDELEMENT( CRTeamIcon ); | DECLARE_HUDELEMENT( CRTeamIcon ); | ||
</ | </syntaxhighlight> | ||
Сейчас у нас есть заголовок файла, нам нужно написать конструктор. Прям под строчкой ''using namespace vgui;'' вставьте это: | Сейчас у нас есть заголовок файла, нам нужно написать конструктор. Прям под строчкой ''using namespace vgui;'' вставьте это: | ||
< | <syntaxhighlight lang=cpp> | ||
//----------------------------------------------------------- | //----------------------------------------------------------- | ||
// Purpose: | // Purpose: | ||
Line 70: | Line 68: | ||
SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT ); | SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT ); | ||
} | } | ||
</ | </syntaxhighlight> | ||
Теперь у нас есть конструктор, мы можем пойти дальше и создать основную функцию для работы, для этого примера мы будем использовать '''"Paint Background"''' потому-что если вы будите использовать нормальный '''"Paint"''' вы будете иметь черный прозрачный фон. | Теперь у нас есть конструктор, мы можем пойти дальше и создать основную функцию для работы, для этого примера мы будем использовать '''"Paint Background"''' потому-что если вы будите использовать нормальный '''"Paint"''' вы будете иметь черный прозрачный фон. | ||
< | <syntaxhighlight lang=cpp> | ||
//-------------------------------------------------------------- | //-------------------------------------------------------------- | ||
// Purpose: Если игрок за комбайнов, показываем Иракскую иконку | // Purpose: Если игрок за комбайнов, показываем Иракскую иконку | ||
Line 104: | Line 102: | ||
BaseClass::PaintBackground(); | BaseClass::PaintBackground(); | ||
} | } | ||
</ | </syntaxhighlight> | ||
Теперь мы почти закончили фактический элемент HUD, чтобы всё заработало, нужно закончить файл заголовка. Откройте'''Rteamicon.h''' и поместите туда это: | Теперь мы почти закончили фактический элемент HUD, чтобы всё заработало, нужно закончить файл заголовка. Откройте'''Rteamicon.h''' и поместите туда это: | ||
< | <syntaxhighlight lang=cpp> | ||
// ======= *********-|RECOIL|-********* =======// | // ======= *********-|RECOIL|-********* =======// | ||
// Программист: John Stuart | // Программист: John Stuart | ||
Line 137: | Line 135: | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
==Материалы== | ==Материалы== | ||
Line 166: | Line 164: | ||
Перевод: --[[User:Slam12f|Slam12f]] 00:25, 18 July 2013 (PDT) | Перевод: --[[User:Slam12f|Slam12f]] 00:25, 18 July 2013 (PDT) | ||
{{ACategory|Programming}} | |||
{{ACategory|Tutorials}} |
Latest revision as of 04:07, 22 August 2024
Этот урок расскажет о том, как выводить Изображение как HUD элемент в зависимости от вашей игровой команды. К примеру, если игрок играет за первую команду выводиться одно изображение, но если из другой команды, выводиться второе изображение.
Вот что получиться в итоге:
Требования
Чтобы этот урок работал, у вас должны быть 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)