GameUI:de

From Valve Developer Community
Jump to: navigation, search
English
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

Source 2009 GameUI. Closed Source.

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

Left 4 Dead Branch GameUI. Alien Swarms SDK bietet den Code.

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.

Tipp:VGUI-Panels, welches dem von Source 2009 sehr ähnlich ist, können immernoch mit dieser Inkarnation des Codes erzeugt werden.

Ein neues Fenster erzeugen

  1. Erstelle eine neue, von CBaseModFrame abgeleitete Klasse.
  2. Erzeuge eine begleitendes "<Klassenname>.res"-Script in game\resource\ui\basemodui\.
  3. Füge einen neuen Eintrag der WINDOW_TYPE-Enum hinzu.
  4. 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:

  1. CGameUI::Initialize()
  2. CBaseModPanel::RunFrame()
  3. CBaseModPanel::OnGameUIActivated()
  4. CBaseModPanel::OpenFrontScreen()
  5. CBaseModPanel::OpenWindow()

CBaseModPanel ist ein Singleton; CBaseModFrame ist die Basisklasse aller Fenster.