Projekt Micarpet Projektbericht - artecLab - Universität Bremen
Projekt Micarpet Projektbericht - artecLab - Universität Bremen
Projekt Micarpet Projektbericht - artecLab - Universität Bremen
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Projekt</strong> MiCarpet <strong>Projekt</strong>bericht<br />
12.3 Eventsystem<br />
Schon in frühzeitiger Planungsphase war klar, daß das System in der Lage seien sollte, diverse Ein- und<br />
Ausgabegeräte abseits Tastatur und Monitor zu unterstützen. Unter dieser Prämisse wurde ein [PlugIn??]-<br />
Interface gebaut, welches eben diese Bedingung erfüllt.<br />
Schnittstelle Generell wird unterschieden zwischen Input- und Output-[PlugIn??]s, wo Input-[PlugIn??]s<br />
- wie der Name schon sagt - Eingaben annehmen und daraus eine Veränderung des Internzustandes der<br />
Welt produzieren und Output-[PlugIn??]s entsprechende Events verarbeiten, die auf Basis aktualisierter<br />
Weltdaten eine Reaktion für die Außenwelt produzieren (z.B. eine Kollision, die eine ForceFeedback Reaktion<br />
produziert); analog dazu wird ersteren das Interface mica::IInput und letzterem das Interface<br />
mica::IOutput bereitgestellt. Die jeweiligen [PlugIn??]s leiten dann von den entsprechenden Klassen<br />
ab und müssen updateInput(..) bzw. updateOutput(..) implementieren. Die Update-<br />
Methoden werden bei jedem Frame von der Engine aufgerufen und mit einem Pointer auf eine Eventliste<br />
sowie der Zeit seit dem letzten Update versehen. Die konkreten Implementationen der [PlugIn??]s füllen<br />
dann diese Liste mit Events, die von der Engine anschließend abgearbeitet werden.<br />
Damit [PlugIn??]s überhaupt durch updateInput(..) bzw. updateOutput(..) aufgerufen<br />
werden können, müssen sie bei der Engine registriert werden. Dies wird von der Klasse CExtModuleManager<br />
geregelt, welche eben diese Funktion übernimmt und intern zwei Listen mit Referenzen auf die jeweiligen<br />
IInput- und IOutput-Objekte hält. Für jedes [PlugIn??] muß nach dessen Initalisierung beim<br />
Hochfahren der Engine ein addExtObject(..) auf dem Modul-Manager aufgerufen werden. Der<br />
Methode muß die Referenz auf die [PlugIn??]-Instanz, welche von IInput bzw. IOutput abgeleitet<br />
wurde, übergeben werden. Damit sind die [PlugIn??]s beim System registriert und werden bei jedem<br />
Update von der Engine entsprechend aufgerufen.<br />
Events Die Eventliste vom Typ tEventList ist eine [STL??]-Liste und speichert die konkreten<br />
Events der verschiedenen [PlugIn??]s. Dabei ist jeder Event vom abstrakten Typ CEvent. Die Implementation<br />
der konkreten Klassen hängt dann von der Art des Events ab. Je nachdem was das [PlugIn??]<br />
in den Event an Nutzdaten schreiben will bzw. was für Informationen übertragen werden sollen,<br />
benötigt man verschiedene Implementationen. Dabei muß nicht jedes [PlugIn??] eine eigene Event-<br />
Implementation einführen; idR. reichen Standardmodelle wie CEventAcc für Beschleunigung oder<br />
CEventOrientation für Ausrichtung.<br />
Jede Implementation muß einen eindeutigen Typ haben, wodurch jedes CEvent Objekt anhand seiner<br />
ID bzgl. seiner Implementation unterschieden werden kann. Die folgende Liste enthält die verschiedenen<br />
ID bzw. Typen von Events auf:<br />
eEVENT_KEY Tastatur-Event<br />
eEVENT_ACC Beschleunigungs-Event<br />
eEVENT_ORIENTATION Neue Ausrichtung direkt setzen<br />
eEVENT_ORIENTATIONCH Änderung der Ausrichtung des Spielers<br />
eEVENT_ORIENTATION_AXIS Setzen der Ausrichtung des Spielers über die Achsen<br />
eEVENT_REPOSITION Versetzt den Spieler an eine Position<br />
eEVENT_RESETPLAYER Vetzt den Spieler auf die Startposition<br />
eEVENT_COLLISION Kollision aufgetreten; Outputevent<br />
6. Januar 2005 Seite 106