Welt2D.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. #pragma once
  2. #include "Array.h"
  3. #include "Mat3.h"
  4. #include "Punkt.h"
  5. #include "Rect2.h"
  6. namespace Framework
  7. {
  8. typedef Vec2< float > Vertex;
  9. class Bild;
  10. struct WeltInfo
  11. {
  12. float airResistance;
  13. bool hasSize;
  14. bool circular;
  15. Punkt size;
  16. };
  17. class Object2D
  18. {
  19. protected:
  20. Vertex position;
  21. Vertex speed;
  22. float rSpeed;
  23. float rotation;
  24. float size;
  25. bool collision;
  26. int ref;
  27. public:
  28. __declspec( dllexport ) Object2D();
  29. __declspec( dllexport ) virtual ~Object2D();
  30. // Fügt einen Schub in die ausbreitungsrichtung der Explusion zur Bewegung des Objektes hinzu
  31. // worldPos: Die Position des Explusionsuhrsprungs
  32. // intensity: Die Intensität der Explusion
  33. __declspec( dllexport ) void explosion( Vertex worldPos, float intensity );
  34. // Übt auf das Objekt einen Impuls aus, der sowohl die geschwindigkeit, als auch die Drehungsgeschwindigkeit des Objektes beeinflusst
  35. // start: Die Startposition des Impulses in der Welt
  36. // speed: Die Geschwindigkeit des Impulses in der Welt
  37. // strength: Stärke des aufpralls
  38. __declspec( dllexport ) virtual void impuls( Vertex start, Vertex speed, float strength = 1.f );
  39. // Setzt die Geschwindigkeit des Objektes in der Welt
  40. // speed: Anzahl der zurückgelegten Koordinaten pro Sekunde
  41. __declspec( dllexport ) void setSpeed( Vertex speed );
  42. // Setzt die Geschwindigkeit des Objektes in der Welt
  43. // x: Anzahl der zurückgelegten x Koordinaten pro Sekunde
  44. // y: Anzahl der zurückgelegten y Koordinaten pro Sekunde
  45. __declspec( dllexport ) void setSpeed( float x, float y );
  46. // Setzt die Position des Objektes in der Welt
  47. // pos: Die Position in Weltkoordinaten
  48. __declspec( dllexport ) void setPosition( Vertex pos );
  49. // Setzt die Position des Objektes in der Welt
  50. // x: Die X Position in Weltkoordinaten
  51. // y: Die Y Position in Weltkoordinaten
  52. __declspec( dllexport ) void setPosition( float x, float y );
  53. // Setzt die Rotationsgeschwindigkeit in Radiant pro Sekunde
  54. // ds: Die neue Rptationsgeschwindigkeit
  55. __declspec( dllexport ) void setDrehungSpeed( float ds );
  56. // Setzt die Drehung des Models gegen den Uhrzeigersinn
  57. // drehung: Der winkel in Bogenmas
  58. __declspec( dllexport ) void setDrehung( float drehung );
  59. // Fügt zum aktuellen Drehungswinkel etwas hinzu
  60. // drehung: Der Winkel in Bogenmas, der hinzugefügt werden soll
  61. __declspec( dllexport ) void addDrehung( float drehung );
  62. // Setzt die Skallierung des Modells
  63. // size: Der Faktor, mit dem Skalliert wird
  64. __declspec( dllexport ) void setSize( float size );
  65. // Addiert zur Skallierung einen bestimmten Wert hinzu
  66. // size: Der Wert, der zur skallierung hinzugefügt werden soll
  67. __declspec( dllexport ) void addSize( float size );
  68. // Legt fest, ob andere Objekte mit diesem Objekt zusammenschtoßen können
  69. // handle: 0, falls keine Kollisionen existieren
  70. __declspec( dllexport ) void setCollision( bool handle );
  71. // Prüft ob eine Collision mit einem anderen Objekt vorliegt und passt die Geschwindigkeiten beider Objekte entsprechend an
  72. __declspec( dllexport ) virtual bool handleCollision( Object2D *obj );
  73. // Verarbeitet vargangene Zeit und aktualisiert die Position und die Drehung des Objektes in der Welt
  74. // zeit: Die vergangene Zeit in Sekunden
  75. __declspec( dllexport ) virtual bool tick( const WeltInfo &info, double zeit );
  76. // Zeichnet das Objekt in ein Bild
  77. // kamMat: Due Kamera Matrix, welche einen Punkt aus Weltkoordinaten in Bildschirmkoordinaten umwandelt
  78. // zRObj: Das Bild, in welches gezeichnet werden soll
  79. virtual void render( Mat3< float > &kamMat, Bild &zRObj, const char *kamName ) = 0;
  80. // Gibt zurück, ob ein Punkt in dem Objekt enthalten ist
  81. // p: Der Punkt
  82. __declspec( dllexport ) virtual bool istPunktInnen( Vertex p ) const;
  83. // Überprüft, ob eine Linie im Objekt enthalten ist
  84. // a: Der startpunkt der Linie
  85. // b: Der endpunkt der Linie
  86. __declspec( dllexport ) virtual bool istLinieInnen( Vertex a, Vertex b ) const;
  87. // Überprüft, ob sich das Objekt mit einem anderen Überschneidet
  88. // zObj: Ein Zeiger auf das andere Objekt ohne erhöhten Reference Counter
  89. // sp: Ein Zeiger auf einen Punkt, in dem der Schnittpunkt gespeichert wird
  90. // end: 0, falls alle Ecken beider Objekte überprüft werdden sollen. 1, falls nur die Punkte dieses Models im anderen gesucht werden sollen
  91. __declspec( dllexport ) virtual bool istModelInnen( const Object2D *zObj, Vertex *sp = 0, bool end = 0 ) const;
  92. // Gibt eine Matrix zurück, welche einen Punkt aus Objektkoordinaten in Bildschirmkoordinaten umrechnet
  93. __declspec( dllexport ) Mat3< float > getObjectMatrix() const;
  94. // Gibt eine Matrix zurück, welche einen Punkt aus Bildschirmkoordinaten in Objektkoordinaten umrechnet
  95. __declspec( dllexport ) Mat3< float > getInverseObjectMatrix() const;
  96. // Rechnet einen Punkt aus Welt Koordinaten in Objektkoordinaten um
  97. // worldPos: Die Position des Punktes in der Welt
  98. __declspec( dllexport ) Vertex getObjectPos( Vertex worldPos ) const;
  99. // Rechnet eine Richtung aus Weltkoordinaten in Objektkoordinaten um
  100. // worldDir: Die Richtung in Weltkoordinaten
  101. __declspec( dllexport ) Vertex getObjectDir( Vertex worldDir ) const;
  102. // Rechnet einen Punkt aus Objektkoordinaten in Weltkoordinaten um
  103. // worldPos: Die Position des Punktes in Objektkoordinaten
  104. __declspec( dllexport ) Vertex getWorldPos( Vertex objectPos ) const;
  105. // Rechnet eine Richtung aus Objektkoordinaten in Weltkoordinaten um
  106. // worldDir: Die Richtung in Objektkoordinaten
  107. __declspec( dllexport ) Vertex getWorldDir( Vertex objectDir ) const;
  108. // Gibt die Geschwindigkeit des Objektes zurück
  109. __declspec( dllexport ) Vertex getSpeed() const;
  110. // gibt die Position des Objektes zurück
  111. __declspec( dllexport ) Vertex getPosition() const;
  112. // gibt die Drehgeschwindigkeit des Objektes zurück
  113. __declspec( dllexport ) float getDrehungSpeed() const;
  114. // gibt die Drehung des Objektes zurück
  115. __declspec( dllexport ) float getDrehung() const;
  116. // gibt den Skallierungs Objektes zurück
  117. __declspec( dllexport ) float getSize() const;
  118. // Gibt eine Boundingbox zurück, in der sich alle Punkte des Objektes befinden ( in Weltkoordinaten)
  119. __declspec( dllexport ) virtual Rect2< float > getBoundingBox() const = 0;
  120. // Bestimmt den Aufschlagspunkt eines Strahls, der von pos ausgehend in Richtung dir abgegeben wird.
  121. // pos: Der Stützvektor der Linie
  122. // dir: Der richtungsvektor der Linie
  123. // hitPoint: eine referenz auf die variable in dem der schnittpunkt gespeichert werden soll
  124. // return: 1, fals ein Schnittpunkt existiert
  125. __declspec( dllexport ) virtual bool calcHitPoint( Vertex pos, Vertex dir, Vertex &hitpoint ) const;
  126. // Ermittelt die Fläche des Objektes, welche rechtwinklich zum Bewegungsvektor steht
  127. __declspec( dllexport ) virtual float getLuftWiederstand() const;
  128. // Gibt die Masse des Objektes zurück
  129. __declspec( dllexport ) virtual float getMasse() const;
  130. // Legt fest, ob andere Objekte mit diesem Objekt zusammenschtoßen können
  131. // return: 0, falls keine Kollisionen existieren
  132. __declspec( dllexport ) bool canCollide();
  133. // Erhöht den Reference Counter um 1 und gibt this zurück
  134. __declspec( dllexport ) Object2D *getThis();
  135. // Verringert den Reference Counter um 1 (bei 0 löscht sich das Objekt selbst)
  136. // Gibt 0 zurück
  137. __declspec( dllexport ) Object2D *release();
  138. };
  139. class Welt2D
  140. {
  141. private:
  142. RCArray< Object2D > *objects;
  143. WeltInfo info;
  144. int ref;
  145. void render( Mat3< float > &kamMat, Punkt size, Bild &zRObj, int xOffset, int yOffset, const char *kamName );
  146. public:
  147. __declspec( dllexport ) Welt2D();
  148. __declspec( dllexport ) ~Welt2D();
  149. __declspec( dllexport ) void setAirResistance( float resistance );
  150. __declspec( dllexport ) void setSize( int width, int height );
  151. __declspec( dllexport ) void setSize( bool hasSize );
  152. __declspec( dllexport ) void setCircular( bool circular );
  153. __declspec( dllexport ) Object2D *zObjectAt( int x, int y );
  154. __declspec( dllexport ) Object2D *getObjectAt( int x, int y );
  155. __declspec( dllexport ) void addObject( Object2D *obj );
  156. __declspec( dllexport ) void removeObject( Object2D *zObj );
  157. __declspec( dllexport ) void removeAll();
  158. __declspec( dllexport ) void explosion( Vertex worldPos, float intensity, float maxRad );
  159. __declspec( dllexport ) void impuls( Vertex worldPos, Vertex worldDir );
  160. __declspec( dllexport ) bool tick( double zeit );
  161. __declspec( dllexport ) void render( Mat3< float > &kamMat, Punkt size, Bild &zRObj, const char *kamName );
  162. __declspec( dllexport ) const WeltInfo &getWorldInfo() const;
  163. __declspec( dllexport ) Welt2D *getThis();
  164. __declspec( dllexport ) Welt2D *release();
  165. };
  166. }