280 likes | 382 Views
Game Development mit LUA. Integration und Kommunikation von LUA mit C++ Referat von Paul van Hemmen
E N D
Game Development mit LUA Integration 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
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:
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
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
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
Fragen & Diskussion Vielen Dank für Ihre Aufmerksamkeit!