Animation.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #ifndef Animation_H
  2. #define Animation_H
  3. #include "Zeichnung.h"
  4. #include "Critical.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 benutzen.
  27. //! Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
  28. 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. 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. //! \param datei Die bereits eingelesene InitDatei
  38. DLLEXPORT void ladeAnimation( InitDatei *datei );
  39. //! Lädt alle Bilder aus einer LTDB Datei der reihenfolge nach ein, in der sie gespeichert sind.
  40. //! \param datei Die LTDB Datei
  41. DLLEXPORT void ladeAnimation( LTDBDatei *datei );
  42. //! Setzt die Bilder pro Sekunde der Video Animation
  43. //! \param fps Die Anzahl an Bildern pro Sekunde
  44. DLLEXPORT void setFPS( int fps );
  45. //! Legt fest, ob die Animation sich wiederhohlt, wenn sie am ende angelangt ist
  46. //! \param wh 1, wenn sich die Animation wiederhohlen soll
  47. DLLEXPORT void setWiederhohlend( bool wh );
  48. //! Legt fest, ob beim Zeichnen der Bilder Alphablending benutzt werden soll
  49. //! \param trp 1, wenn Alphablending benutzt werden soll
  50. DLLEXPORT void setTransparent( bool trp );
  51. //! Löscht alle Bilder aus der Animation und setzt alle Werte auf die Standartwerte zurück
  52. DLLEXPORT void reset();
  53. //! Gibt ein Bestimmtes Bild der Animation zurück
  54. //! \param i Der Index des Bildes
  55. DLLEXPORT Bild *getBild( int i ) const;
  56. //! Gibt ein Bestimmtes Bild der Animation ohne erhöhten Reference Counter zurück
  57. //! \param i Der Index des Bildes
  58. DLLEXPORT Bild *zBild( int i ) const;
  59. //! Gibt die Anzahl der Bilder in der Animation zurück
  60. DLLEXPORT int getBildAnzahl() const;
  61. //! Gibt die Anzahl an Bildern pro Sekunde zurück
  62. DLLEXPORT int getFPS() const;
  63. //! Gibt zurück, ob sich die Animation wiederhohlt, wenn sie beim letzten Bild angelangt ist
  64. DLLEXPORT bool istWiederhohlend() const;
  65. //! Gibt zurück, ob beim Zeichnen der Bilder Alphablending benutzt wird
  66. DLLEXPORT bool istTransparent() const;
  67. };
  68. //! Eine Zeichnung, die eine Video Animation zeichnet
  69. class Animation2D : public Zeichnung
  70. {
  71. private:
  72. Animation2DData *data;
  73. int jetzt;
  74. double ausgleich;
  75. unsigned char alpha;
  76. unsigned char maxAlpha;
  77. bool rahmen;
  78. Rahmen *ram;
  79. int aps;
  80. bool sichtbar;
  81. public:
  82. //! Konstruktor
  83. DLLEXPORT Animation2D();
  84. //! Destruktor
  85. DLLEXPORT virtual ~Animation2D();
  86. //! Legt fest, ob ein Rahmen um die Animation gezeichnet werden soll
  87. //! \param ram 1, wenn ein Rahmen gezeichnet werden soll
  88. DLLEXPORT void setRahmen( bool ram );
  89. //! Setzt einen Zeiger auf den verfenteten Rahmen
  90. //! \param ram Der Rahmen
  91. DLLEXPORT void setRahmenZ( Rahmen *ram );
  92. //! Setzt die Breite des Rahmens
  93. //! \param br Die Breite in Pixeln
  94. DLLEXPORT void setRahmenBreite( int br );
  95. //! Setzt die Farbe des Rahmens
  96. //! \param fc Die Farbe im A8R8G8B8 Format
  97. DLLEXPORT void setRahmenFarbe( int fc );
  98. //! Setzt die Animation, die Angezeigt werden soll
  99. //! \param data Die Animationsdaten
  100. DLLEXPORT void setAnimationDataZ( Animation2DData *data );
  101. //! Setzt die Transparenz der gesammten Animation
  102. //! \param alpha Die Transparenz
  103. DLLEXPORT void setAlphaMaske( unsigned char alpha );
  104. //! Setzt die Geschwindigkeit, in der die Animation ein und ausgeblendet wird
  105. //! \param aps Alpha pro sekunde
  106. DLLEXPORT void setAPS( int aps );
  107. //! Setzt die Sichtbarkeit der Animation
  108. //! \param sichtbar 1, wenn die Animation eingeblendet werden soll. 0, wenn sie ausgeblendet werden soll
  109. DLLEXPORT void setSichtbar( bool sichtbar );
  110. //! Verarbeitet die Zeit, die seit dem letzten aufruf dieser Funktion vergangen ist
  111. //! \param zeit Die vergangene Zeit in Sekunden
  112. DLLEXPORT bool tick( double zeit ) override;
  113. //! Zeichnet die Animation in ein bestimmtes Bild
  114. //! \param zRObj Das Bild, in das gezeichnet werden soll
  115. DLLEXPORT void render( Bild &zRObj ) override;
  116. //! Gibt die Animationsdaten zurück
  117. DLLEXPORT Animation2DData *getAnimationData() const;
  118. //! Gibt die Animationsdaten ohne erhöhten Reference Counter zurück
  119. DLLEXPORT Animation2DData *zAnimationData() const;
  120. //! Gibt zurück ob die Animation sichtbar ist
  121. DLLEXPORT bool istSichtbar() const;
  122. //! Gibt den Index des aktuell angezeigten Bildes zurück
  123. DLLEXPORT int getJetzt() const;
  124. //! Gibt die Transparenz der Animation zurück
  125. DLLEXPORT unsigned char getAlphaMaske() const;
  126. //! Gibt zurück, ob ein Rahmen um die Animation gezeichnet wird
  127. DLLEXPORT bool hatRahmen() const;
  128. //! Gibt den Rahmen der Animation zurück
  129. DLLEXPORT Rahmen *getRahmen() const;
  130. //! Gibt den Rahmen der Animation ohne erhöhten Reference Counter zurück
  131. DLLEXPORT Rahmen *zRahmen() const;
  132. //! Gibt die Breite des Rahmens in Pixeln zurück
  133. DLLEXPORT int getRahmenBreite() const;
  134. //! Gibt die Farbe des Rahmens im A8R8G8B8 Format zurück
  135. DLLEXPORT int getRahmenFarbe() const;
  136. //! Kopiert die Animation, so dass sie ohne auswirkungen auf das Original verändert werden kann
  137. DLLEXPORT Zeichnung *dublizieren() const override;
  138. };
  139. }
  140. #endif