Animation.h 6.8 KB

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