De/Team Icons: Difference between revisions
(Created page with "{{otherlang2 |en=Team_Icons }} Dieses Tutorial beschreibt, wie man HUD-Elemente dazu bekommt, ein Bild abhängig von der Teamzugehörigkeit anzuzeigen. Wenn der spieler zum Beisp...") |
m (obsolete language category) |
||
(5 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{lang|Team_Icons}} | ||
| | |||
}} | |||
Dieses Tutorial beschreibt, wie man HUD-Elemente dazu bekommt, ein Bild abhängig von der Teamzugehörigkeit anzuzeigen. Wenn der spieler zum Beispiel in dem einen Team ist, wird 'dieses Bild' angezeigt, wenn der spieler aber im anderen Team ist, wird 'jenes Bild' angezeigt. Hier ist, was man damit erreicht: | Dieses Tutorial beschreibt, wie man HUD-Elemente dazu bekommt, ein Bild abhängig von der Teamzugehörigkeit anzuzeigen. Wenn der spieler zum Beispiel in dem einen Team ist, wird 'dieses Bild' angezeigt, wenn der spieler aber im anderen Team ist, wird 'jenes Bild' angezeigt. Hier ist, was man damit erreicht: | ||
[[ | [[File:Hud icon example.png]] | ||
== Voraussetzungen == | == Voraussetzungen == | ||
Line 24: | Line 22: | ||
Öffne nun '''Rteamicon.cpp''' und beginne mit dem einfügen des folgenden Kopfes: | Öffne nun '''Rteamicon.cpp''' und beginne mit dem einfügen des folgenden Kopfes: | ||
< | <syntaxhighlight lang=cpp> | ||
// ======= *********-|RECOIL|-********* =======// | // ======= *********-|RECOIL|-********* =======// | ||
// Programmer: John Stuart | // Programmer: John Stuart | ||
Line 43: | Line 41: | ||
DECLARE_HUDELEMENT( CRTeamIcon ); | DECLARE_HUDELEMENT( CRTeamIcon ); | ||
</ | </syntaxhighlight> | ||
Nun, wo der Kopf der Datei vorhanden ist, wird der Konstruktor benötigt. Füge unter dem ''using namespace vgui;'' folgendes ein: | Nun, wo der Kopf der Datei vorhanden ist, wird der Konstruktor benötigt. Füge unter dem ''using namespace vgui;'' folgendes ein: | ||
< | <syntaxhighlight lang=cpp> | ||
//----------------------------------------------------------- | //----------------------------------------------------------- | ||
// Zweck: | // Zweck: | ||
Line 69: | Line 67: | ||
SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT ); | SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT ); | ||
} | } | ||
</ | </syntaxhighlight> | ||
Nun, da der Konstruktor erstellt wurde, kann die main-Funktion erstellt werden, um dies zu starten. Für dieses Beispiel wird '''"Paint Background"''' verwendet, da bei Verwendung des normalen '''"Paint"''' man einen schwarzen, transparenten Hintergrund erhalten würde. | Nun, da der Konstruktor erstellt wurde, kann die main-Funktion erstellt werden, um dies zu starten. Für dieses Beispiel wird '''"Paint Background"''' verwendet, da bei Verwendung des normalen '''"Paint"''' man einen schwarzen, transparenten Hintergrund erhalten würde. | ||
< | <syntaxhighlight lang=cpp> | ||
//----------------------------------------------------------- | //----------------------------------------------------------- | ||
// Zweck: Wenn der Spieler (ich) im Team "Combine" ist, zeige das Irak-Symbol | // Zweck: Wenn der Spieler (ich) im Team "Combine" ist, zeige das Irak-Symbol | ||
Line 103: | Line 101: | ||
BaseClass::PaintBackground(); | BaseClass::PaintBackground(); | ||
} | } | ||
</ | </syntaxhighlight> | ||
Das eigentliche HUD-Element ist fast fertig. Um es fertig zu stellen, muss die Header-Datei fertiggestellt werden. Öffne '''Rteamicon.h''' und füge folgendes ein: | Das eigentliche HUD-Element ist fast fertig. Um es fertig zu stellen, muss die Header-Datei fertiggestellt werden. Öffne '''Rteamicon.h''' und füge folgendes ein: | ||
< | <syntaxhighlight lang=cpp> | ||
// ======= *********-|RECOIL|-********* =======// | // ======= *********-|RECOIL|-********* =======// | ||
// Programmer: John Stuart | // Programmer: John Stuart | ||
Line 136: | Line 134: | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
== Die Materialien == | == Die Materialien == | ||
Line 163: | Line 161: | ||
Es sollte jetzt ein gutes HUD-Element vorhanden sein, welches ein Symbol auf dem HUD entsprechend des Teams anzeigt. | Es sollte jetzt ein gutes HUD-Element vorhanden sein, welches ein Symbol auf dem HUD entsprechend des Teams anzeigt. | ||
{{ACategory|Programming}} | |||
{{ACategory|Tutorials}} |
Latest revision as of 03:18, 22 August 2024
Dieses Tutorial beschreibt, wie man HUD-Elemente dazu bekommt, ein Bild abhängig von der Teamzugehörigkeit anzuzeigen. Wenn der spieler zum Beispiel in dem einen Team ist, wird 'dieses Bild' angezeigt, wenn der spieler aber im anderen Team ist, wird 'jenes Bild' angezeigt. Hier ist, was man damit erreicht:
Voraussetzungen
Damit dieses Tutorial funktioniert, benötigst du 2 VTF-Bilder mit eingestellten VMT-Einstellungen. Sofern benötigt ist unten ein Beispiel für VMT:
"UnlitGeneric" { "$basetexture" "vgui/hud/teamicons/iraqiran" "$translucent" "1" "$ignorez" "1" }
Das HUD-Element
Erstelle 2 Dateien im clientseitigen Projekt mit beliebigem Namen. In diesem Tutorial wird Rteamicon.cpp und Rteamicon.h verwendet.
Öffne nun Rteamicon.cpp und beginne mit dem einfügen des folgenden Kopfes:
// ======= *********-|RECOIL|-********* =======//
// Programmer: 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 );
Nun, wo der Kopf der Datei vorhanden ist, wird der Konstruktor benötigt. Füge unter dem using namespace vgui; folgendes ein:
//-----------------------------------------------------------
// Zweck:
//-----------------------------------------------------------
CRTeamIcon::CRTeamIcon( const char *pElementName ) : CHudElement( pElementName ), BaseClass( NULL, "CRTeamIcon" )
{
Panel *pParent = g_pClientMode->GetViewport();
SetParent( pParent );
SetVisible( true );
SetEnabled( true );
// Dies definiert m_nIraqIcon als "vgui/hud/teamicons/iraqiran" welches die vtf aufruft.
m_nIraqIcon = vgui::surface()->CreateNewTextureID();
vgui::surface()->DrawSetTextureFile( m_nIraqIcon, "vgui/hud/teamicons/iraqiran" , true, false);
// Du verstehst nun...
m_nBritishIcon = vgui::surface()->CreateNewTextureID();
vgui::surface()->DrawSetTextureFile( m_nBritishIcon, "vgui/hud/teamicons/ukusa" , true, false);
SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT );
}
Nun, da der Konstruktor erstellt wurde, kann die main-Funktion erstellt werden, um dies zu starten. Für dieses Beispiel wird "Paint Background" verwendet, da bei Verwendung des normalen "Paint" man einen schwarzen, transparenten Hintergrund erhalten würde.
//-----------------------------------------------------------
// Zweck: Wenn der Spieler (ich) im Team "Combine" ist, zeige das Irak-Symbol
// Zweck+: sonst, wenn ich im Team "Rebels" bin, zeige das britische Symbol.
//-----------------------------------------------------------
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"); // Spamt die Konsole 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();
}
Das eigentliche HUD-Element ist fast fertig. Um es fertig zu stellen, muss die Header-Datei fertiggestellt werden. Öffne Rteamicon.h und füge folgendes ein:
// ======= *********-|RECOIL|-********* =======//
// Programmer: John Stuart
// ============================================//
#include "hudelement.h"
#include <vgui_controls/Panel.h>
using namespace vgui;
//-----------------------------------------------------------
// Zweck:
//-----------------------------------------------------------
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;
};
Die Materialien
Nachdem das HUD funktioniert, kann damit weiter gemacht werden, die tatsächlichen Bilder auf das HUD zu bekommen. Sie sind bereits vorhanden, nur sind si noch nicht defineirt. Öffne die Datei "scripts/HudLayout.res" und füge folgendes ein:
CRTeamIcon { "fieldName" "CRTeamIcon" "xpos" "r62" "ypos" "0" "wide" "64" "tall" "32" "visible" "1" "enabled" "1" "PaintBackgroundType" "2" }
Selbstverständlich können die eigenen Bilder an beliebiger Stelle und mit beliebiger Größe platziert werden, indem xpos,ypos,wide,tall an die eigenen Vorstellungen angepasst werden.
Das Ergebnis
Es sollte jetzt ein gutes HUD-Element vorhanden sein, welches ein Symbol auf dem HUD entsprechend des Teams anzeigt.