Game Development mit LUA Integration und Kommunikation von LUA mit C++ Referat von Paul van Hemmen...

Post on 05-Apr-2015

104 views 0 download

Transcript of Game Development mit LUA Integration und Kommunikation von LUA mit C++ Referat von Paul van Hemmen...

Game Development mit LUAIntegration und Kommunikation von LUA mit C++

Referat von Paul van Hemmen

Seminar: Reusable Content in 3D und SimulationssystemenSoSe 2011Dozent: Prof.Dr. M.ThallerInstitut für Historisch-kulturwissenschaftliche Informationsverarbeitungan der Universität zu Köln

I. Interaktion zwischen LUA und C++

Interaktion zwischen C++ und LUA

Bidirektionale Kommunikation

LUA › C++: Per LUA können in C++ geschriebene Funktionen aufgerufen werden. Diese nennt man LuaGlue Funktionen

C++ › LUA: Über die LUA API kann der Programmkern auch in LUA definierte Funktionen ansteuern

I.1 LUA › C++ (LuaGlue)

Definition der Funktion als externe C Funktion im C++ Code

I.1 LUA › C++ (LuaGlue)

Anlegen eines Arrays, welche alle LuaGlue Funktionen + Bezeichner beinhaltet:

I.1 LUA › C++ (LuaGlue)

Struktur lua_State repräsentiert das LUA Environment:

Einfügen aller LuaGlue Funktionen in die Struktur per for-Schleife:

I.1 LUA › C++ (LuaGlue)

Alle so definierten und eingebundenen LuaGlue Funktionen können nun in LUA aufgerufen werden:

I.2 C++ › LUA

Flexibles, eventbasiertes System zur Kommunikation des Programmkerns mit LUA. Verarbeitet werden: Tastatur- und Mauseingaben Spielevents (Trigger) GUI Events (Buttons) Timer Events

I.2 C++ › LUA

Folgende in LUA definierte Funktion soll später vom C++ Programmkern aufgerufen werden:

I.2 C++ › LUA

Der C++ Code nimmt den Namen der Funktion entgegen und stellt diese dann dem Programm zur Verfügung:

I.2 C++ › LUA

Die Funktion kann um beliebige Parameter erweitert werden:

I.2 C++ › LUA

Der entsprechende C++ Code nach Erweiterung:

II. Integration von LUA in das C++ Environment

Starten und Beenden von LUA

Kernstück der Integration ist die bereits angesprochene Struktur lua_State

Ein Zeiger auf sie wird allen Initialisierungsfunktionen als Parameter übergeben:

Starten und Beenden von LUA

Entsprechend wird die Engine wieder heruntergefahren

Starten und Beenden von LUA

Entsprechend wird die Engine wieder heruntergefahren

Klasse cLua

Einführung der Klasse cLua, um das LUA Environment vom Rest der Anwendung zu trennen

cLua kapselt die LUA Engine ab und bietet eine zentrale Schnittstelle auf die gesamte API von LUA

Klasse cLua

III. Ein C++ Basisprojekt mit LUA

Eigenschaften des Basisprojekts

Einbindung in die Windows Nachrichtenschleife

Erstellen des Grundgerüsts für das Hauptprogramm

Erstellen der LUA Console

Kommunikation mit der Windows Registry

Einbindung von DirectX, LUA Environment und GUIManager

Struktur des Basisprojekts

Die Klasse CBase

Bereitstellung aller grundlegenden Funktionen in

Die Methode erledigt: Erstellung eines neuen DirectX Kontext Festsetzen der DirectX Grafik Parameter Erstellung eines neuen Settings Interface Registrierung sämtlicher LuaGlue Funktionen Erstellen der LUA Console Starten des LuaGUI Systems

Das LUA GUI System

Ist das Herz des Game Systems von LUA

Start des Systems durch Erstellen eines CGuiManager Objekts

Beim Aufruf wird auch das Startskript StartGUI.lua aufgerufen

Das Startskript StartGUI.lua

Wird beim Start des GUI Managers ausgeführt

Sollte Initialisierungen und benötigte Basisfunktionen beinhalten

Ruft die LuaGlue Funktion RunGUI() auf und betritt damit die LUA Eventschleife

Bsp.: Das Startskript StartGUI.lua

Bsp.: Aufruf von Chapter8.lua

Fragen & Diskussion

Vielen Dank für Ihre Aufmerksamkeit!