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
CBaseModFrame
abgeleitete 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.