Welt2D.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #pragma once
  2. #include "Array.h"
  3. #include "Mat3.h"
  4. #include "Punkt.h"
  5. namespace Framework
  6. {
  7. typedef Vec2< float > Vertex;
  8. class Bild;
  9. template<typename T>
  10. struct Rect
  11. {
  12. Vec2< T > topLeft;
  13. Vec2< T > bottomRight;
  14. };
  15. class Object2D
  16. {
  17. protected:
  18. Vertex position;
  19. Vertex speed;
  20. float rSpeed;
  21. float rotation;
  22. float size;
  23. int ref;
  24. public:
  25. __declspec( dllexport ) Object2D();
  26. virtual __declspec( dllexport ) ~Object2D();
  27. __declspec( dllexport ) void explosion( Vertex worldPos, float intensity );
  28. __declspec( dllexport ) virtual void impuls( Vertex start, Vertex speed );
  29. __declspec( dllexport ) void setPosition( Vertex pos );
  30. __declspec( dllexport ) void setPosition( float x, float y );
  31. // Setzt die Drehung des Models gegen den Uhrzeigersinn
  32. // drehung: Der winkel in Bogenmas
  33. __declspec( dllexport ) void setDrehung( float drehung );
  34. // Fügt zum aktuellen Drehungswinkel etwas hinzu
  35. // drehung: Der Winkel in Bogenmas, der hinzugefügt werden soll
  36. __declspec( dllexport ) void addDrehung( float drehung );
  37. // Setzt die Skallierung des Modells
  38. // size: Der Faktor, mit dem Skalliert wird
  39. __declspec( dllexport ) void setSize( float size );
  40. // Addiert zur Skallierung einen bestimmten Wert hinzu
  41. // size: Der Wert, der zur skallierung hinzugefügt werden soll
  42. __declspec( dllexport ) void addSize( float size );
  43. __declspec( dllexport ) virtual bool tick( double zeit );
  44. virtual void render( Mat3< float > &kamMat, Bild &zRObj ) = 0;
  45. __declspec( dllexport ) Mat3< float > getObjectMatrix() const;
  46. __declspec( dllexport ) Mat3< float > getInverseObjectMatrix() const;
  47. __declspec( dllexport ) Vertex getObjectPos( Vertex worldPos ) const;
  48. __declspec( dllexport ) Vertex getObjectDir( Vertex worldDir ) const;
  49. // gibt die Position des Models zurück
  50. __declspec( dllexport ) Vertex getPosition() const;
  51. // gibt die Drehung des Models zurück
  52. __declspec( dllexport ) float getDrehung() const;
  53. // gibt den Skallierungs Faktor zurück
  54. __declspec( dllexport ) float getSize() const;
  55. __declspec( dllexport ) virtual Rect< float > getBoundingBox() const = 0;
  56. // Bestimmt den Aufschlagspunkt eines Strahls, der von pos ausgehend in Richtung dir abgegeben wird.
  57. // pos: Der Stützvektor der Linie
  58. // dir: Der richtungsvektor der Linie
  59. // hitPoint: eine referenz auf die variable in dem der schnittpunkt gespeichert werden soll
  60. // return: 1, fals ein Schnittpunkt existiert
  61. __declspec( dllexport ) virtual bool calcHitPoint( Vertex pos, Vertex dir, Vertex &hitpoint ) const;
  62. __declspec( dllexport ) Object2D *getThis();
  63. __declspec( dllexport ) Object2D *release();
  64. };
  65. class Welt2D
  66. {
  67. private:
  68. RCArray< Object2D > *objects;
  69. Punkt topLeft;
  70. Punkt rightBottom;
  71. int ref;
  72. public:
  73. __declspec( dllexport ) Welt2D();
  74. __declspec( dllexport ) ~Welt2D();
  75. __declspec( dllexport ) void addObject( Object2D *obj );
  76. __declspec( dllexport ) void explosion( Vertex worldPos, float intensity, float maxRad );
  77. __declspec( dllexport ) void impuls( Vertex worldPos, Vertex worldDir );
  78. __declspec( dllexport ) bool tick( double zeit );
  79. __declspec( dllexport ) void render( Mat3< float > &kamMat, Punkt size, Bild &zRObj );
  80. __declspec( dllexport ) Welt2D *getThis();
  81. __declspec( dllexport ) Welt2D *release();
  82. };
  83. }