#ifndef _GAME_RENDER_ANIMATION_H #define _GAME_RENDER_ANIMATION_H #include #include #include "../mwworld/refdata.hpp" #include "../mwworld/ptr.hpp" #include "../mwworld/actiontalk.hpp" #include #include #include namespace MWRender{ struct PosAndRot{ Ogre::Quaternion vecRot; Ogre::Vector3 vecPos; }; class Animation{ protected: Ogre::SceneNode* mInsert; OEngine::Render::OgreRenderer &mRend; std::map mVecRotPos; static std::map sUniqueIDs; float mTime; float mStartTime; float mStopTime; int mAnimate; //Represents a rotation index for each bone std::vectormRindexI; //Represents a translation index for each bone std::vectormTindexI; //Only shapes with morphing data will use a shape number int mShapeNumber; std::vector > mShapeIndexI; //Ogre::SkeletonInstance* skel; std::vector* mShapes; //All the NiTriShapeData for a creature std::vector* mTransformations; std::map* mTextmappings; Ogre::Entity* mBase; void handleShapes(std::vector* allshapes, Ogre::Entity* creaturemodel, Ogre::SkeletonInstance *skel); void handleAnimationTransforms(); bool timeIndex( float time, const std::vector & times, int & i, int & j, float & x ); std::string getUniqueID(std::string mesh); public: Animation(OEngine::Render::OgreRenderer& _rend); virtual void runAnimation(float timepassed) = 0; void startScript(std::string groupname, int mode, int loops); void stopScript(); virtual ~Animation(); }; } #endif