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