Ícones de time
Este tutorial tem como objetivo fazer com que o Hud Element exiba uma imagem dependendo do time em que você está. Por exemplo, se o jogador estiver em um time, exiba 'esta imagem', mas se o jogador estiver no outro time, exiba 'esta imagem'. Aqui está o que você tera:
Pré requisitos
Para que este tutorial funcione, você precisará ter 2 imagens vtf com configurações de vmt definidas. Exemplo de vmt está abaixo se você precisar:
"UnlitGeneric" { "$basetexture" "vgui/hud/teamicons/iraqiran" "$translucent" "1" "$ignorez" "1" }
Elementos da HUD
Crie dois arquivos no projeto do lado do client e coloque o nome que quiser, mas nesse tutorial eu colocarei Rteamicon.cpp & Rteamicon.h. Agora abra Rteamicon.cpp e comece a colocar o headers
// ======= *********-|RECOIL|-********* =======// // Programador: 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 );
Agora que temos os arquivos de cabeçalho, precisamos criar o construtor. Logo abaixo de using namespace vgui; cole isto:
//----------------------------------------------------------- // Purpose: //----------------------------------------------------------- CRTeamIcon::CRTeamIcon( const char *pElementName ) : CHudElement( pElementName ), BaseClass( NULL, "CRTeamIcon" ) { Panel *pParent = g_pClientMode->GetViewport(); SetParent( pParent ); SetVisible( true ); SetEnabled( true ); // Isso define m_nIraqIcon como "vgui/hud/teamicons/iraqiran" que chama o vtf. m_nIraqIcon = vgui::surface()->CreateNewTextureID(); vgui::surface()->DrawSetTextureFile( m_nIraqIcon, "vgui/hud/teamicons/iraqiran" , true, false); // O mesmo do que o de cima mas com reino unido.. m_nBritishIcon = vgui::surface()->CreateNewTextureID(); vgui::surface()->DrawSetTextureFile( m_nBritishIcon, "vgui/hud/teamicons/ukusa" , true, false); SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT ); }
Agora que o construtor está criado, podemos prosseguir e criar a função principal para que isso funcione, para este exemplo usaremos "Paint Background"' porque se você for usar normal '"Paint" você terá um fundo preto transparente.
//------------------------------------------------ ----------- // Objetivo: Se pPlayer (eu) estiver no time Combine, exibir o ícone do Iraque // Finalidade+: caso contrário, se eu estiver no time Rebels, exibirá o ícone britânico. //------------------------------------------------ ----------- 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(); }
Now we've nearly complete on the actual hud element, to make this all work we've got to finish the header file. Open up Rteamicon.h and place this in there:
// ======= *********-|RECOIL|-********* =======// // Programador: 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; };
Materiais
Agora que o hud está funcionando, podemos prosseguir para obter a imagem real no hud. já está lá, mas não está definido. Então vá em frente e abra seu arquivo "scripts/HudLayout.res" e coloque-o dentro:
CRTeamIcon { "fieldName" "CRTeamIcon" "xpos" "r62" "ypos" "0" "wide" "64" "tall" "32" "visible" "1" "enabled" "1" "PaintBackgroundType" "2" }
É claro que você pode colocar sua imagem em qualquer lugar que desejar e no tamanho que desejar, editando xpos,ypos,wide,tall de acordo com suas configurações/necessidades.
O resultado
Agora você deve ter um bom elemento hud que exibe um ícone em seu HUD de qual time você está.