Zum Inhalt springen

Irrlicht - from Noob to Pro: Beispielcode4

Aus Wikibooks
//Einbinden der Header-Datei von Irrlicht
#include <irrlicht.h>
//Einbinden der Header-Datei unserer Würfel-Klasse
#include "CWuerfel.h"

//Einbinden der Namespaces
using namespace irr;
using namespace core;
using namespace video;

//Die Hauptprozedur main()
int main()
{
	//Unser Irrlicht-Device erstellen und initialisieren
	IrrlichtDevice *device =
		createDevice( video::EDT_OPENGL, dimension2d<u32>(640, 480), 32,
			false, false, false, 0);

	//Konnte das Device erstellt werden ?
	if (!device)
		return 1; //Falls nicht, Fehlercode zurückgeben und Programm abbrechen

	//Den Text des Hauptfensters festlegen
	device->setWindowCaption(L"Einen Würfel-Klasse in Irrlicht !");

	//Den Videotreiber erstellen und Zeiger aus dem Device abholen
	IVideoDriver* driver = device->getVideoDriver();	
	
	//Einen Szene-Manager erstellen und Zeiger aus dem Device abholen
	scene::ISceneManager* smgr = device->getSceneManager();

	//Einen GUI_Manager erstellen und Zeiger aus dem Device abholen
	gui::IGUIEnvironment* guienv = device->getGUIEnvironment();

	//Ein Text-Element definieren und an den GUI-Manager übergeben
	gui::IGUIStaticText* GUI_debug_text = guienv->addStaticText
		(L"",rect<s32>(5, 5, 200, 200),false,true,0,-1,false);

	//Eine Kamera erstellen
	smgr->addCameraSceneNode(0, core::vector3df(0,-2,0), core::vector3df(0,0,0));

	//Einen Würfel der Klasse CWuerfel erstellen
	CWuerfel *Wuerfel = new CWuerfel(smgr->getRootSceneNode(), smgr, 1);	
	
	//Nach welcher Zeit(ms) soll die Szene gedreht werden ?	
	Wuerfel->SetDeltaTime(50); //50 Millisekunden
		
	//Letzte Zeitmessung initalisieren
	Wuerfel->SetTimePos(device->getTimer()->getTime());
	
	//Größe des Würfels verändern
	//Wuerfel->SetSize(1.0f, 0.6f, 1.3f);

	//Während das Device aktiv ist ...
	while(device->run())
	{		
		//Szene beginnen
		driver->beginScene(true, true, SColor(3,150,203,255));
		
		//Den Debug-String erstellen und abholen
		stringw sDebStr = Wuerfel->GetDebugString();
		
		//Den Debug-String in der Irrlicht-GUI anzeigen
		GUI_debug_text->setText(sDebStr.c_str());

		//Aktuelle Zeit mitteilen
		Wuerfel->TellCurrentTime(device->getTimer()->getTime());
		
		//Nach Ablauf der Zeitspanne den Würfel drehen
		Wuerfel->TurnIfDesired();	

		//Dem Szenemanager sagen, dass er alle Nodes zeichnen soll
		smgr->drawAll();

		//Dem GUI-Manager sagen, dass er alle GUIs zeichnen soll 
		guienv->drawAll();

		//Szene beenden
		driver->endScene();
	}
	//Das Device freigeben
	device->drop();
	
	//Keinen Fehler zurückgeben
	return 0;
}