Animation.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #ifndef Animation_H
  2. #define Animation_H
  3. #include "Zeichnung.h"
  4. namespace Framework
  5. {
  6. class Bild; // Bild.h
  7. class LTDBDatei; // DateiSystem.h
  8. class InitDatei; // InitDatei.h
  9. class LRahmen; // Rahmen.h
  10. // Enthält alle Bilder einer Video Animation
  11. class Animation2DData
  12. {
  13. private:
  14. Bild **bilder;
  15. int bildAnzahl;
  16. int fps;
  17. bool wiederhohlen;
  18. bool transparent;
  19. CRITICAL_SECTION cs;
  20. int ref;
  21. public:
  22. // Konstruktor
  23. __declspec( dllexport ) Animation2DData();
  24. // Destruktor
  25. __declspec( dllexport ) ~Animation2DData();
  26. // Dies ist notwendig, falls mehrere Threads gleichzeitig dieses Objekt benutzen.
  27. // Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
  28. __declspec( dllexport ) void lock();
  29. // Dies ist notwendig, falls mehrere Threads gleichzeitig dieses Objekt benutzen.
  30. // Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
  31. __declspec( dllexport ) void unlock();
  32. // Lädt alle Bilder aus einer InitDatei ein. Auch die Werte 'fps', 'wiederhohlen' (true, false), 'transparent' (true, false) werden interpretiert.
  33. // Die Bilder müssen in der richtiegen Reihenfolge in der Datei stehen. Der Name der Werte ist egal undder Wert ist der Pfad zur ltdb Datei mit /bildname hinten drann
  34. // Beispiel: fps=30
  35. // x=a.ltdb\aaaa.jpg
  36. // y=a.ltdb\aaab.jpg
  37. // datei: Die bereits eingelesene InitDatei
  38. __declspec( dllexport ) void ladeAnimation( InitDatei *datei );
  39. // Lädt alle Bilder aus einer LTDB Datei der reihenfolge nach ein, in der sie gespeichert sind.
  40. // datei: Die LTDB Datei
  41. __declspec( dllexport ) void ladeAnimation( LTDBDatei *datei );
  42. // Setzt die Bilder pro Sekunde der Video Animation
  43. // fps: Die Anzahl an Bildern pro Sekunde
  44. __declspec( dllexport ) void setFPS( int fps );
  45. // Legt fest, ob die Animation sich wiederhohlt, wenn sie am ende angelangt ist
  46. // wh: 1, wenn sich die Animation wiederhohlen soll
  47. __declspec( dllexport ) void setWiederhohlend( bool wh );
  48. // Legt fest, ob beim Zeichnen der Bilder Alphablending benutzt werden soll
  49. // trp: 1, wenn Alphablending benutzt werden soll
  50. __declspec( dllexport ) void setTransparent( bool trp );
  51. // Löscht alle Bilder aus der Animation und setzt alle Werte auf die Standartwerte zurück
  52. __declspec( dllexport ) void reset();
  53. // Gibt ein Bestimmtes Bild der Animation zurück
  54. // i: Der Index des Bildes
  55. __declspec( dllexport ) Bild *getBild( int i ) const;
  56. // Gibt ein Bestimmtes Bild der Animation ohne erhöhten Reference Counter zurück
  57. // i: Der Index des Bildes
  58. __declspec( dllexport ) Bild *zBild( int i ) const;
  59. // Gibt die Anzahl der Bilder in der Animation zurück
  60. __declspec( dllexport ) int getBildAnzahl() const;
  61. // Gibt die Anzahl an Bildern pro Sekunde zurück
  62. __declspec( dllexport ) int getFPS() const;
  63. // Gibt zurück, ob sich die Animation wiederhohlt, wenn sie beim letzten Bild angelangt ist
  64. __declspec( dllexport ) bool istWiederhohlend() const;
  65. // Gibt zurück, ob beim Zeichnen der Bilder Alphablending benutzt wird
  66. __declspec( dllexport ) bool istTransparent() const;
  67. // Erhöht den Reference Counting Zähler.
  68. // return: this.
  69. __declspec( dllexport ) Animation2DData *getThis();
  70. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
  71. // return: 0.
  72. __declspec( dllexport ) Animation2DData *release();
  73. };
  74. // Eine Zeichnung, die eine Video Animation zeichnet
  75. class Animation2D : public Zeichnung
  76. {
  77. private:
  78. Animation2DData *data;
  79. int jetzt;
  80. double ausgleich;
  81. unsigned char alpha;
  82. unsigned char maxAlpha;
  83. bool rahmen;
  84. LRahmen *ram;
  85. int aps;
  86. bool sichtbar;
  87. bool rend;
  88. int ref;
  89. public:
  90. // Konstruktor
  91. __declspec( dllexport ) Animation2D();
  92. // Destruktor
  93. __declspec( dllexport ) ~Animation2D();
  94. // Legt fest, ob ein Rahmen um die Animation gezeichnet werden soll
  95. // ram: 1, wenn ein Rahmen gezeichnet werden soll
  96. __declspec( dllexport ) void setRahmen( bool ram );
  97. // Setzt einen Zeiger auf den verfenteten Rahmen
  98. // ram: Der Rahmen
  99. __declspec( dllexport ) void setRahmenZ( LRahmen *ram );
  100. // Setzt die Breite des Rahmens
  101. // br: Die Breite in Pixeln
  102. __declspec( dllexport ) void setRahmenBreite( int br );
  103. // Setzt die Farbe des Rahmens
  104. // fc: Die Farbe im A8R8G8B8 Format
  105. __declspec( dllexport ) void setRahmenFarbe( int fc );
  106. // Setzt die Animation, die Angezeigt werden soll
  107. // data: Die Animationsdaten
  108. __declspec( dllexport ) void setAnimationDataZ( Animation2DData *data );
  109. // Setzt die Transparenz der gesammten Animation
  110. // alpha: Die Transparenz
  111. __declspec( dllexport ) void setAlphaMaske( unsigned char alpha );
  112. // Setzt die Geschwindigkeit, in der die Animation ein und ausgeblendet wird
  113. // aps: Alpha pro sekunde
  114. __declspec( dllexport ) void setAPS( int aps );
  115. // Setzt die Sichtbarkeit der Animation
  116. // sichtbar: 1, wenn die Animation eingeblendet werden soll. 0, wenn sie ausgeblendet werden soll
  117. __declspec( dllexport ) void setSichtbar( bool sichtbar );
  118. // Verarbeitet die Zeit, die seit dem letzten aufruf dieser Funktion vergangen ist
  119. // zeit: Die vergangene Zeit in Sekunden
  120. __declspec( dllexport ) bool tick( double zeit ) override;
  121. // Zeichnet die Animation in ein bestimmtes Bild
  122. // zRObj: Das Bild, in das gezeichnet werden soll
  123. __declspec( dllexport ) void render( Bild &zRObj ) override;
  124. // Gibt die Animationsdaten zurück
  125. __declspec( dllexport ) Animation2DData *getAnimationData() const;
  126. // Gibt die Animationsdaten ohne erhöhten Reference Counter zurück
  127. __declspec( dllexport ) Animation2DData *zAnimationData() const;
  128. // Gibt zurück ob die Animation sichtbar ist
  129. __declspec( dllexport ) bool istSichtbar() const;
  130. // Gibt den Index des aktuell angezeigten Bildes zurück
  131. __declspec( dllexport ) int getJetzt() const;
  132. // Gibt die Transparenz der Animation zurück
  133. __declspec( dllexport ) unsigned char getAlphaMaske() const;
  134. // Gibt zurück, ob ein Rahmen um die Animation gezeichnet wird
  135. __declspec( dllexport ) bool hatRahmen() const;
  136. // Gibt den Rahmen der Animation zurück
  137. __declspec( dllexport ) LRahmen *getRahmen() const;
  138. // Gibt den Rahmen der Animation ohne erhöhten Reference Counter zurück
  139. __declspec( dllexport ) LRahmen *zRahmen() const;
  140. // Gibt die Breite des Rahmens in Pixeln zurück
  141. __declspec( dllexport ) int getRahmenBreite() const;
  142. // Gibt die Farbe des Rahmens im A8R8G8B8 Format zurück
  143. __declspec( dllexport ) int getRahmenFarbe() const;
  144. // Kopiert die Animation, so dass sie ohne auswirkungen auf das Original verändert werden kann
  145. __declspec( dllexport ) Zeichnung *dublizieren() const override;
  146. // Erhöht den Reference Counting Zähler.
  147. // return: this.
  148. __declspec( dllexport ) Animation2D *getThis();
  149. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
  150. // return: 0.
  151. __declspec( dllexport ) Animation2D *release();
  152. };
  153. }
  154. #endif