TapestryEngine

A 2D Platformer Game Engine
Log | Files | Refs

7b2fd56df3268ebd83f40a987034134a02870b43.svn-base (3364B)


      1 #ifndef ANIMATION_H
      2 #define ANIMATION_H
      3 
      4 #include "Utils.h"
      5 #include "Event.h"
      6 
      7 #define LOOP 0
      8 #define ONCE 1
      9 
     10 struct Frame
     11 {
     12 	SDL_Rect FrameRect;
     13 	SDL_Texture* FrameSource;
     14 };
     15 
     16 class FrameSet
     17 {
     18 public:
     19 	FrameSet() : mFrameCount(0), mFrames() {}
     20 
     21 	FrameSet(SDL_Renderer* ren, const char* SourcePath, int FrameCount, int FRate, int frameH, int frameW);
     22 
     23 	int GetNumberOfFrames()
     24 	{
     25 		return mFrameCount;
     26 	}
     27 
     28 	int GetDefaultFrameRate()
     29 	{
     30 		return mDefaultFrameRate;
     31 	}
     32 
     33 	SDL_Texture* GetFrameSource()
     34 	{
     35 		return mframesource;
     36 	}
     37 
     38 	SDL_Rect GetFrameRect(int framenumber)
     39 	{
     40 		//gCons->ConsPrintf("Frame Number = %i\n", framenumber);
     41 		return mFrames[framenumber];
     42 	}
     43 
     44 	Frame GetFrame(int FrameNumber)
     45 	{
     46 		Frame frm;
     47 		frm.FrameRect = GetFrameRect(FrameNumber);
     48 		frm.FrameSource = mframesource;
     49 		return frm;
     50 	}
     51 
     52 protected:
     53 	int mFrameCount;
     54 	int mDefaultFrameRate;
     55 	SDL_Texture* mframesource;
     56 	SDL_Rect mFrames[256];
     57 };
     58 
     59 class animation
     60 {
     61 public:
     62 
     63 	animation() : mFrameSet(), mCurrentFrameNumber(0) {}
     64 
     65 	animation(FrameSet* set, int ID, bool flip = true);
     66 
     67 	Frame GetCurrentFrame();
     68 
     69 	Frame GetFrame(int FrameNumber)
     70 	{
     71 		return mFrameSet->GetFrame(FrameNumber);
     72 	}
     73 
     74 	int GetCurrentFrameNumber()
     75 	{
     76 		return mCurrentFrameNumber;
     77 	}
     78 
     79 	bool SetPlaySpeed(int speed)
     80 	{
     81 		mFrameRate = speed;
     82 	}
     83 
     84 	bool IsFlippable()
     85 	{
     86 		return mIsFlippable;
     87 	}
     88 
     89 	bool Play(int flags)
     90 	{
     91 		mFlags = flags;
     92 		return mIsPlaying = true;
     93 	}
     94 
     95 	bool Stop()
     96 	{
     97 		mCurrentFrameNumber = 0;
     98 		return mIsPlaying = false;
     99 	}
    100 
    101 	EventFeed mFeed;
    102 protected:
    103 
    104 	FrameSet* mFrameSet;
    105 	int mCurrentFrameNumber;
    106 	Frame mCurrentFrame;
    107 	int mTimer;
    108 	int mFrameRate;
    109 	bool mIsFlippable;
    110 	bool mIsPlaying;
    111 	int mFlags;		//LOOP, ONCE
    112 	int mID;		//#define name eg. IDLE
    113 };
    114 
    115 class AnimDataPack
    116 {
    117 public:
    118 	AnimDataPack() : mIndexer(), mAnimData() {}
    119 
    120 	AnimDataPack(int AnimCount, FrameSet* AnimData, int* Index);
    121 
    122 	FrameSet* GetAnimationData(int AnimationID);
    123 
    124 	int GetAnimCount()
    125 	{
    126 		return mAnimCount;
    127 	}
    128 
    129 	int GetIndex(int i)
    130 	{
    131 		return mIndexer[i];
    132 	}
    133 
    134 	int GetFrameH()
    135 	{
    136 		return mAnimData->GetFrameRect(0).h;
    137 	}
    138 
    139 	int GetFrameW()
    140 	{
    141 		return mAnimData->GetFrameRect(0).w;
    142 	}
    143 
    144 	//For the loader
    145 	void SetColData(int off_x, int off_y, int col_h, int col_w)
    146 	{
    147 		moff_x = off_x;
    148 		moff_y = off_y;
    149 		mcol_h = col_h;
    150 		mcol_w = col_w;
    151 	}
    152 
    153 	int GetOff_x()
    154 	{
    155 		return moff_x;
    156 	}
    157 
    158 	int GetOff_y()
    159 	{
    160 		return moff_y;
    161 	}
    162 
    163 	int GetCol_h()
    164 	{
    165 		return mcol_h;
    166 	}
    167 
    168 	int GetCol_w()
    169 	{
    170 		return mcol_w;
    171 	}
    172 
    173 protected:
    174 
    175 	int		    mAnimCount;
    176 	int*        mIndexer;
    177 	FrameSet*   mAnimData;
    178 
    179 
    180 	int moff_x;
    181 	int moff_y;
    182 	int mcol_h;
    183 	int mcol_w;
    184 };
    185 
    186 class AnimPack
    187 {
    188 public:
    189 	AnimPack()  {}
    190 
    191 	AnimPack(AnimDataPack* data);
    192 
    193 	animation* ActivateAnimation(int AnimationID, int loop = LOOP); //Returns a pointer to an animation, starts it playing and stops the previous animation
    194 
    195 	animation* GetAnimation(int AnimationID) //Just returns an animation pointer given an ID
    196 	{
    197 		for (int i = 0; i < mData->GetAnimCount(); i++)
    198 		{
    199 			if (mData->GetIndex(i) == AnimationID)
    200 			{
    201 				return &mAnims[i];
    202 			}
    203 		}
    204 		gCons->ConsPrintf("Failed to get animation\n");
    205 		return NULL;
    206 	}
    207 
    208 	AnimDataPack* GetAnimData()
    209 	{
    210 		return mData;
    211 	}
    212 
    213 	animation* GetAnimationDirect(int i)
    214 	{
    215 		return &mAnims[i];
    216 	}
    217 
    218 protected:
    219 
    220 	AnimDataPack* mData;
    221 	int			  mLastIndex;
    222 	animation*    mAnims;
    223 
    224 };
    225 
    226 bool FrameCompare(Frame f1, Frame f2);
    227 
    228 #endif