123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #ifndef Animation_H
- #define Animation_H
- #include "Critical.h"
- #include "Zeichnung.h"
- namespace Framework
- {
- class Bild; //! Bild.h
- class LTDBDatei; //! DateiSystem.h
- class InitDatei; //! InitDatei.h
- class Rahmen; //! Rahmen.h
- //! Enthält alle Bilder einer Video Animation
- class Animation2DData : public virtual ReferenceCounter
- {
- private:
- Bild** bilder;
- int bildAnzahl;
- int fps;
- bool wiederhohlen;
- bool transparent;
- Critical cs;
- public:
- //! Konstruktor
- DLLEXPORT Animation2DData();
- //! Destruktor
- DLLEXPORT ~Animation2DData();
- //! Dies ist notwendig, falls mehrere Threads gleichzeitig dieses Objekt
- //! benutzen. Wenn lock() von zwei threads aufgerufen wird, wartet der
- //! letzte so lange, bis der erste unlock() aufgerufen hat.
- DLLEXPORT void lock();
- //! Dies ist notwendig, falls mehrere Threads gleichzeitig dieses Objekt
- //! benutzen. Wenn lock() von zwei threads aufgerufen wird, wartet der
- //! letzte so lange, bis der erste unlock() aufgerufen hat.
- DLLEXPORT void unlock();
- //! Lädt alle Bilder aus einer InitDatei ein. Auch die Werte 'fps',
- //! 'wiederhohlen' (true, false), 'transparent' (true, false) werden
- //! interpretiert. 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 Beispiel: fps=30
- //! x=a.ltdb\aaaa.jpg
- //! y=a.ltdb\aaab.jpg
- //! \param datei Die bereits eingelesene InitDatei
- DLLEXPORT void ladeAnimation(InitDatei* datei);
- //! Lädt alle Bilder aus einer LTDB Datei der reihenfolge nach ein, in
- //! der sie gespeichert sind. \param datei Die LTDB Datei
- DLLEXPORT void ladeAnimation(LTDBDatei* datei);
- //! Setzt die Bilder pro Sekunde der Video Animation
- //! \param fps Die Anzahl an Bildern pro Sekunde
- DLLEXPORT void setFPS(int fps);
- //! Legt fest, ob die Animation sich wiederhohlt, wenn sie am ende
- //! angelangt ist \param wh 1, wenn sich die Animation wiederhohlen soll
- DLLEXPORT void setWiederhohlend(bool wh);
- //! Legt fest, ob beim Zeichnen der Bilder Alphablending benutzt werden
- //! soll \param trp 1, wenn Alphablending benutzt werden soll
- DLLEXPORT void setTransparent(bool trp);
- //! Löscht alle Bilder aus der Animation und setzt alle Werte auf die
- //! Standartwerte zurück
- DLLEXPORT void reset();
- //! Gibt ein Bestimmtes Bild der Animation zurück
- //! \param i Der Index des Bildes
- DLLEXPORT Bild* getBild(int i) const;
- //! Gibt ein Bestimmtes Bild der Animation ohne erhöhten Reference
- //! Counter zurück \param i Der Index des Bildes
- DLLEXPORT Bild* zBild(int i) const;
- //! Gibt die Anzahl der Bilder in der Animation zurück
- DLLEXPORT int getBildAnzahl() const;
- //! Gibt die Anzahl an Bildern pro Sekunde zurück
- DLLEXPORT int getFPS() const;
- //! Gibt zurück, ob sich die Animation wiederhohlt, wenn sie beim
- //! letzten Bild angelangt ist
- DLLEXPORT bool istWiederhohlend() const;
- //! Gibt zurück, ob beim Zeichnen der Bilder Alphablending benutzt wird
- DLLEXPORT bool istTransparent() const;
- };
- //! Eine Zeichnung, die eine Video Animation zeichnet
- class Animation2D : public Zeichnung
- {
- private:
- Animation2DData* data;
- int jetzt;
- double ausgleich;
- unsigned char alpha;
- unsigned char maxAlpha;
- bool rahmen;
- Rahmen* ram;
- int aps;
- bool sichtbar;
- public:
- //! Konstruktor
- DLLEXPORT Animation2D();
- //! Destruktor
- DLLEXPORT virtual ~Animation2D();
- //! Legt fest, ob ein Rahmen um die Animation gezeichnet werden soll
- //! \param ram 1, wenn ein Rahmen gezeichnet werden soll
- DLLEXPORT void setRahmen(bool ram);
- //! Setzt einen Zeiger auf den verfenteten Rahmen
- //! \param ram Der Rahmen
- DLLEXPORT void setRahmenZ(Rahmen* ram);
- //! Setzt die Breite des Rahmens
- //! \param br Die Breite in Pixeln
- DLLEXPORT void setRahmenBreite(int br);
- //! Setzt die Farbe des Rahmens
- //! \param fc Die Farbe im A8R8G8B8 Format
- DLLEXPORT void setRahmenFarbe(int fc);
- //! Setzt die Animation, die Angezeigt werden soll
- //! \param data Die Animationsdaten
- DLLEXPORT void setAnimationDataZ(Animation2DData* data);
- //! Setzt die Transparenz der gesammten Animation
- //! \param alpha Die Transparenz
- DLLEXPORT void setAlphaMaske(unsigned char alpha);
- //! Setzt die Geschwindigkeit, in der die Animation ein und ausgeblendet
- //! wird \param aps Alpha pro sekunde
- DLLEXPORT void setAPS(int aps);
- //! Setzt die Sichtbarkeit der Animation
- //! \param sichtbar 1, wenn die Animation eingeblendet werden soll. 0,
- //! wenn sie ausgeblendet werden soll
- DLLEXPORT void setSichtbar(bool sichtbar);
- //! Verarbeitet die Zeit, die seit dem letzten aufruf dieser Funktion
- //! vergangen ist \param zeit Die vergangene Zeit in Sekunden
- DLLEXPORT bool tick(double zeit) override;
- //! Zeichnet die Animation in ein bestimmtes Bild
- //! \param zRObj Das Bild, in das gezeichnet werden soll
- DLLEXPORT void render(Bild& zRObj) override;
- //! Gibt die Animationsdaten zurück
- DLLEXPORT Animation2DData* getAnimationData() const;
- //! Gibt die Animationsdaten ohne erhöhten Reference Counter zurück
- DLLEXPORT Animation2DData* zAnimationData() const;
- //! Gibt zurück ob die Animation sichtbar ist
- DLLEXPORT bool istSichtbar() const;
- //! Gibt den Index des aktuell angezeigten Bildes zurück
- DLLEXPORT int getJetzt() const;
- //! Gibt die Transparenz der Animation zurück
- DLLEXPORT unsigned char getAlphaMaske() const;
- //! Gibt zurück, ob ein Rahmen um die Animation gezeichnet wird
- DLLEXPORT bool hatRahmen() const;
- //! Gibt den Rahmen der Animation zurück
- DLLEXPORT Rahmen* getRahmen() const;
- //! Gibt den Rahmen der Animation ohne erhöhten Reference Counter zurück
- DLLEXPORT Rahmen* zRahmen() const;
- //! Gibt die Breite des Rahmens in Pixeln zurück
- DLLEXPORT int getRahmenBreite() const;
- //! Gibt die Farbe des Rahmens im A8R8G8B8 Format zurück
- DLLEXPORT int getRahmenFarbe() const;
- //! Kopiert die Animation, so dass sie ohne auswirkungen auf das
- //! Original verändert werden kann
- DLLEXPORT Zeichnung* dublizieren() const override;
- };
- } // namespace Framework
- #endif
|