De/GameUI

From Valve Developer Community
< De
Revision as of 06:05, 30 April 2013 by Sacaldur (talk | contribs) (Created page with "{{otherlang2 |en=GameUI }} :''Nicht zu verwechseln mti der game_ui-Entity.'' '''GameUI''' ist der Code, der das VGUI-'Frontend' liefert: allgemein ges...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Template:Otherlang2

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 entwurfen: alles ist in das gleichbedienbare Menüsystem integriert und und kann sich nicht in mehr als einem Gebiet gleichzeitig befinden. Es ist ebenfalls wesentlich einfacher zu programmieren.

Template:Tip:de

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 entwurfen, 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, das 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.