De/GameUI: Difference between revisions
(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...") |
m (obsolete language category) |
||
(12 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{LanguageBar}} | ||
}} | |||
'' | :''Nicht zu verwechseln mti der {{L|game_ui}}-Entity.'' | ||
GameUI-Panels sind Unterelemente ihres eigenen dedizierten Panels ("GameUI Panel"). Das | '''GameUI''' ist der Code, der das {{L|VGUI}}-'Frontend' liefert: allgemein gesagt das Hauptmenü und der Ladebildschirm. | ||
GameUI-Panels sind Unterelemente ihres eigenen dedizierten Panels ("GameUI Panel"). Das {{L|RootPanel}} des Clients wird nur für ingame-HUD-Elemente verwendet. | |||
== Source 2009 == | == Source 2009 == | ||
[[File:Ep2_menu.jpg|thumb| | [[File:Ep2_menu.jpg|thumb|{{L|Source 2009}} GameUI. Closed Source.]] | ||
In | In {{L|Source 2009}} (und davor) ist GameUI eine geschlossene Engine Bibliothek, die in geringem Ausmaß über das Bearbeiten von .{{L|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, | Es ist möglich, {{L|VGUI2: Creating a panel|neue VGUI-Panels anzulegen}}, die sich genauso wie GamUI-Panels verhalten. | ||
== Left 4 Dead == | == Left 4 Dead == | ||
[[File:Swarm menu.jpg|thumb| | [[File:Swarm menu.jpg|thumb|{{L|Left 4 Dead (engine branch)|Left 4 Dead Branch}} GameUI. Alien Swarms SDK bietet den Code.]] | ||
Das | Das {{L|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. | ||
{{tip | {{tip|VGUI-Panels, welches dem von Source 2009 sehr ähnlich ist, können immernoch mit dieser Inkarnation des Codes erzeugt werden.}} | ||
=== Ein neues Fenster erzeugen === | === Ein neues Fenster erzeugen === | ||
# Erstelle eine neue, von <code> | # Erstelle eine neue, von <code>{{L|CBaseModFrame}}</code> abgeleitete Klasse. | ||
# Erzeuge eine begleitendes "<Klassenname>.res"-Script in <code>game\resource\ui\basemodui\</code>. | # Erzeuge eine begleitendes "<Klassenname>.res"-Script in <code>game\resource\ui\basemodui\</code>. | ||
# Füge einen neuen Eintrag der <code>WINDOW_TYPE</code>-Enum hinzu. | # Füge einen neuen Eintrag der <code>WINDOW_TYPE</code>-Enum hinzu. | ||
# Bearbeite den enormen Switch in <code>CBaseModPanel::OpenWindow()</code>, um die neue Enumeration und Klasse einzubinden. | # Bearbeite den enormen Switch in <code>CBaseModPanel::OpenWindow()</code>, um die neue Enumeration und Klasse einzubinden. | ||
Die hässliche Enum-/Switch-Indirektion wurde vermutlich | 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 === | === Fenster öffnen === | ||
Line 51: | Line 50: | ||
; <code>WINDOW_TYPE &wt</code> | ; <code>WINDOW_TYPE &wt</code> | ||
: Ein [[W:Enumerated_type|Enumerations]]wert, | : Ein [[W:Enumerated_type|Enumerations]]wert, daß das zu öffnende Fenster bestimmt. | ||
; <code> | ; <code>{{L|CBaseModFrame}}* caller</code> | ||
: Das Fenster, welches dieses öffnen wollte. Neben anderen Dingen wird es das Ziel von 'Zurück'-Buttons im neuen Fenster. | : Das Fenster, welches dieses öffnen wollte. Neben anderen Dingen wird es das Ziel von 'Zurück'-Buttons im neuen Fenster. | ||
; <code> | ; <code>{{L|Boolean|bool}} hidePrevious</code> | ||
: Versteckt <code>caller</code>, wenn true. | : Versteckt <code>caller</code>, wenn true. | ||
; <code> | ; <code>{{L|KeyValues}}* pParameters</code> | ||
: Wird dem neuen Fenster übergeben. | : Wird dem neuen Fenster übergeben. | ||
Line 73: | Line 72: | ||
<code>CBaseModPanel</code> ist ein Singleton; <code>CBaseModFrame</code> ist die Basisklasse aller Fenster. | <code>CBaseModPanel</code> ist ein Singleton; <code>CBaseModFrame</code> ist die Basisklasse aller Fenster. | ||
{{ACategory|VGUI}} | |||
{{ACategory|Programming}} | |||
{{ACategory|VGUI}} {{ACategory|Programming}} |
Latest revision as of 03:13, 22 August 2024
- 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.