#pragma once #include "Critical.h" #include "Array.h" #include "Vec3.h" namespace Framework { class Zeichnung3D; // Zeichnung.h class Render3D; // Render3D.h struct MausEreignis3D; // MausEreignis.h class Model3D; // Speichert alle 3D Zeichnungen einer Szene ab class Welt3D { private: RCArray< Model3D > *members; bool rend; Critical cs; int ref; public: // Konstructor __declspec( dllexport ) Welt3D(); // Destruktor __declspec( dllexport ) virtual ~Welt3D(); // Blockiert den zugriff auf das Objekt und wartet gegebenfalls auf den Zugriff __declspec( dllexport ) void lock(); // Gibt das Objekt für andere Threads frei __declspec( dllexport ) void unlock(); // Fügt der Welt ein Objekt hinzu // obj: Das Objekt, was hinzugefügt werden soll __declspec( dllexport ) void addZeichnung( Model3D *obj ); // Entfernt ein Objekt aus der Welt // obj: Das Objekt, das entwernt werden soll (ohne erhöhten reference Counter) __declspec( dllexport ) void removeZeichnung( Model3D *zObj ); // Verarbeitet ein Mausereignis // me: Das Mausereignis, das verarbeitet werden soll __declspec( dllexport ) void doMausEreignis( MausEreignis3D &me ); // Verarbeitet die vergangene Zeit // tickval: Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist // return: true, wenn sich das Objekt verändert hat, false sonnst. __declspec( dllexport ) virtual bool tick( double tickval ); // brerechnet die Farbe eines Sichtstrahls, der von einem bestimmten punkt aus in eine bestimmte richtung schaut // point: Der ursprung des Strahls, // dir: Die Richtung des Strahls // return: Die Farbe des Strahls __declspec( dllexport ) virtual int traceRay( Vec3< float > point, Vec3< float > dir ); // Gibt einen Iterator zurück, mit dem alle Members aufgezählt werden können __declspec( dllexport ) Iterator< Model3D * > getMembers(); // Erhöht den Reference Counting Zähler. // return: this. __declspec( dllexport ) Welt3D *getThis(); // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht. // return: 0. __declspec( dllexport ) Welt3D *release(); }; }