De/GameUI: Difference between revisions

From Valve Developer Community
< De
Jump to navigation Jump to search
(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:
{{otherlang2
{{LanguageBar}}
|en=GameUI
}}
:''Nicht zu verwechseln mti der [[game_ui:de|game_ui]]-Entity.''


'''GameUI''' ist der Code, der das [[VGUI:de|VGUI]]-'Frontend' liefert: allgemein gesagt das Hauptmenü und der Ladebildschirm.
:''Nicht zu verwechseln mti der {{L|game_ui}}-Entity.''


GameUI-Panels sind Unterelemente ihres eigenen dedizierten Panels ("GameUI Panel"). Das [[RootPanel:de|RootPanel]] des Clients wird nur für ingame-HUD-Elemente verwendet.
'''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|[[Source 2009:de|Source 2009]] GameUI. Closed Source.]]
[[File:Ep2_menu.jpg|thumb|{{L|Source 2009}} GameUI. Closed Source.]]


In [[Source 2009:de|Source 2009]] (und davor) ist GameUI eine geschlossene Engine Bibliothek, die in geringem Ausmaß über das Bearbeiten von .[[res:de|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.
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, [[VGUI2: Creating a panel:de|neue VGUI-Panels anzulegen]], die sich genauso wie GamUI-Panels verhalten.
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|[[Left 4 Dead (engine branch):de|Left 4 Dead Branch]] GameUI. Alien Swarms SDK bietet den Code.]]
[[File:Swarm menu.jpg|thumb|{{L|Left 4 Dead (engine branch)|Left 4 Dead Branch}} GameUI. Alien Swarms SDK bietet den Code.]]


Das [[Alien Swarm SDK:de|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.
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:de|VGUI-Panels, welches dem von Source 2009 sehr ähnlich ist, können immernoch mit dieser Inkarnation des Codes erzeugt werden.}}
{{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>[[CBaseModFrame:de|CBaseModFrame]]</code> abgeleitete Klasse.
# 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 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!
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, das das zu öffnende Fenster bestimmt.
: Ein [[W:Enumerated_type|Enumerations]]wert, daß das zu öffnende Fenster bestimmt.
; <code>[[CBaseModFrame:de|CBaseModFrame]]* caller</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>[[bool:de|bool]] hidePrevious</code>
; <code>{{L|Boolean|bool}} hidePrevious</code>
: Versteckt <code>caller</code>, wenn true.
: Versteckt <code>caller</code>, wenn true.
; <code>[[KeyValues:de|KeyValues]]* pParameters</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.


[[Category:VGUI:de]]
{{ACategory|VGUI}}
[[Category:Programming:de]]
{{ACategory|Programming}}
{{ACategory|VGUI}} {{ACategory|Programming}}

Latest revision as of 03:13, 22 August 2024

English (en)Deutsch (de)中文 (zh)Translate (Translate)
Nicht zu verwechseln mti der game_ui(en)-Entity.

GameUI ist der Code, der das VGUI(en)-'Frontend' liefert: allgemein gesagt das Hauptmenü und der Ladebildschirm.

GameUI-Panels sind Unterelemente ihres eigenen dedizierten Panels ("GameUI Panel"). Das RootPanel(en) des Clients wird nur für ingame-HUD-Elemente verwendet.

Source 2009

Source 2009(en) GameUI. Closed Source.

In Source 2009(en) (und davor) ist GameUI eine geschlossene Engine Bibliothek, die in geringem Ausmaß über das Bearbeiten von .res(en)-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(en), die sich genauso wie GamUI-Panels verhalten.

Left 4 Dead

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

Das Alien Swarm SDK(en) 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.pngTipp: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(en) 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(en)* caller
Das Fenster, welches dieses öffnen wollte. Neben anderen Dingen wird es das Ziel von 'Zurück'-Buttons im neuen Fenster.
bool(en) hidePrevious
Versteckt caller, wenn true.
KeyValues(en)* 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.