#pragma once #include "ReferenceCounter.h" #include "Vec3.h" namespace Framework { class Skelett; class Knochen; class Animation3D : public virtual ReferenceCounter { private: struct KnochenData { KnochenData* next; double time = 0; Vec3 pos; Vec3 rot; }; KnochenData* kd[MAX_KNOCHEN_ANZ]; double maxTime; //! löscht eine KnochenData Struktur void deleteKnochenData(KnochenData* d); public: //! Konstruktor DLLEXPORT Animation3D(); //! Destructor DLLEXPORT ~Animation3D(); //! Fügt für einen bestimmten Knochen ein Keyframe hinzu //! \param kId Die Id des Knochens //! \param time Die Zeit, die vergehen soll bis der Knochen die Position //! und die Rotation des Keyframes follständig erreicht hat \param pos //! Die Position des Knochens die erreicht werden soll in //! Modellkoordinaten \param rot Die Rotation des Knochens um seine //! Position die erreicht werden soll DLLEXPORT void addKeyFrame( int kId, double time, Vec3 pos, Vec3 rot); //! Wendet die Animation auf ein bestimmtes Skelett an //! zS: Das Skelett //! timeOffset: zeit in sekunden, die diese Animation bereits auf dem //! Skelett angewendet wurde. Wird automatisch von der Animation //! aktualisiert. sec: zeit in Sekunden, die vergangen ist seit dem //! diese Methode zuletzt für das Skelett aufgerufen wurde DLLEXPORT void apply(Skelett* zS, double& timeOffset, double sec) const; //! Wendet die Animation auf ein bestimmten Knochen an //! zS: Der Knochen //! timeOffset: zeit in sekunden, die diese Animation bereits auf dem //! Knochen angewendet wurde. sec: zeit in Sekunden, die vergangen ist //! seit dem diese Methode zuletzt für dem Knochen aufgerufen wurde DLLEXPORT void apply(Knochen* zK, double timeOffset, double sec) const; }; } // namespace Framework