/********************************************************************
*
* Created: 4/4/2012 12:00
*
* File: fsCAnimatingSpritePlayfirst.h
*
* Author: Martin P King
*
* Purpose: Playfirst based animating sprite implementation
*
*********************************************************************/
#ifndef fsCAnimatingSpritePlayfirsthdr
#define fsCAnimatingSpritePlayfirsthdr
#include <vector>
#include <memory>
#include <fsCore/fsBaseTypes.h>
#include "../../fsIAnimatingSprite.h"
class fsCResourceName;
class fsAffineMtx2d;
class fsStr;
class fsCAnimationDataPlayfirst;
class fsCAnimationTimeline;
class fsCSpriteFrame;
struct fsPoint;
class fsCAnimatingSpritePlayfirst : public fsIAnimatingSprite
{
friend class fsCAnimationDataManager;
friend class fsIKeyFrame;
friend class fsCGotoFrameKeyFrame;
friend class fsCJumpKeyFrame;
friend class fsCSpriteKeyFrame;
friend class fsCSwapTimelineKeyFrame;
public:
virtual ~fsCAnimatingSpritePlayfirst();<--- Destructor in derived class
protected:
fsCAnimatingSpritePlayfirst(const fsCResourceName& pFileName, fsBool pHitMap, fsCSprite* pAnimatingSpriteRoot);
fsCAnimatingSpritePlayfirst(fsCSprite* pAnimatingRootSprt);
void activeSet(fsBool pVisibility) override;
void colourApplyToSpriteFrames(const fsSColour4B& pColour) override;
void animationDataSetDo(std::shared_ptr<fsIAnimationData> pAnimData) override;
fsS32 currentFrameHeightGetDo() const override;
fsPoint currentFramePosGetDo() const override;
std::shared_ptr<fsCBrush> brushGetDo() const override;
fsBool hitTestDo(const fsPoint& pPoint, fsBool pRequireHitMap) const override;
// virtual fsBool pixelCollisionCheck( fsISpriteRef pTarget ) override;
fsS32 currentFrameGetDo() const override;
void updateDo(fsS32 pDeltaMS) override;
fsBool loopingGetDo() const override;
void resetDo() override;
void matrixApplyDo(const fsAffineMtx2d& pRenderMtx) override;
void renderDo() override;
private:
void spriteFramesCreate();
void currentFrameExecute();
void currentTimelineSet(const fsStr& pTimelineName);
fsBool frameTimeElapsed(fsS32 pDeltaMS);
void spriteUpdateFromKeyframe(fsS32 pSpriteNum);
fsS32 mElapsedTimeMS;
fsS32 mCurrKeyFrame;
fsS32 mCurrSpriteFrame;
std::shared_ptr<fsCAnimationDataPlayfirst> mAnimData;
fsCAnimationTimeline* mCurrentTimeline;
std::vector<fsCSpriteFrame*> mSpriteFrames;
};
#endif