GameUI
- Nicht zu verwechseln mti der game_ui-Entity.
GameUI ist der Code, der das VGUI-'Frontend' liefert: allgemein gesagt das Hauptmenü und der Ladebildschirm.
GameUI-Panels sind Unterelemente ihres eigenen dedizierten Panels ("GameUI Panel"). Das RootPanel des Clients wird nur für ingame-HUD-Elemente verwendet.
Source 2009
In Source 2009 (und davor) ist GameUI eine geschlossene Engine Bibliothek, die in geringem Ausmaß über das Bearbeiten von .res-Scriptdateien angepasst werden kann. Diese bestimmen Eigenschaften, wie Breite, Höhe, Position und so weiter. Neue nicht-interaktive Elemente können hinzugefügt und mit geringem Aufwand vorhandene entfernt werden.
Es ist möglich, neue VGUI-Panels anzulegen, die sich genauso wie GamUI-Panels verhalten.
Left 4 Dead
Das Alien Swarm SDK enthält den kompletten Sourcecode für den neueren L4D-GameUI-Stil, welcher in die Client-Bibliothek verschoben wurde. Es wurde wegen dem Mangel von Zeigegeräten der Konsole neu entworfen: alles ist in das gleichbedienbare Menüsystem integriert und kann sich nicht in mehr als einem Gebiet gleichzeitig befinden. Es ist ebenfalls wesentlich einfacher zu programmieren.
Ein neues Fenster erzeugen
- Erstelle eine neue, von
CBaseModFrameabgeleitete Klasse. - Erzeuge eine begleitendes "<Klassenname>.res"-Script in
game\resource\ui\basemodui\. - Füge einen neuen Eintrag der
WINDOW_TYPE-Enum hinzu. - Bearbeite den enormen Switch in
CBaseModPanel::OpenWindow(), um die neue Enumeration und Klasse einzubinden.
Die hässliche Enum-/Switch-Indirektion wurde vermutlich entworfen, um einem einzelnen "window type"-Wert das öffnen verschiedener Window-Objekte, abhängig vom Zustand des UIs, zu ermöglichen. Leider hat Valve bisher keinen Grund gefunden, es so zu machen!
Fenster öffnen
Verwende CBaseModFrame* CBaseModPanel::OpenWindow():
#include "gameui\swarm\basemodpanel.h"
using namespace BaseModUI;
void openwindow()
{
CBaseModFrame* mainMenu = CBaseModPanel::GetSingleton().GetWindow( WT_MAINMENU );
CBaseModPanel::GetSingleton().OpenWindow( WT_GAMESETTINGS, mainMenu );
}
Die Argumente sind:
WINDOW_TYPE &wt- Ein Enumerationswert, daß das zu öffnende Fenster bestimmt.
CBaseModFrame* caller- Das Fenster, welches dieses öffnen wollte. Neben anderen Dingen wird es das Ziel von 'Zurück'-Buttons im neuen Fenster.
bool hidePrevious- Versteckt
caller, wenn true. KeyValues* pParameters- Wird dem neuen Fenster übergeben.
OnOpen() des geöffneten Fensters wird aufgerufen.
Start
Die Intialisierungssequenz ist:
CGameUI::Initialize()CBaseModPanel::RunFrame()CBaseModPanel::OnGameUIActivated()CBaseModPanel::OpenFrontScreen()CBaseModPanel::OpenWindow()
CBaseModPanel ist ein Singleton; CBaseModFrame ist die Basisklasse aller Fenster.