970e01c27fd4b3f25a3ee9eac2be689e7666f400.svn-base (2996B)
1 #include "Animation.h" 2 3 //FramesetFunctions 4 FrameSet::FrameSet(SDL_Renderer* ren, const char* SourcePath, int FrameCount, int FRate, int frameH, int frameW) 5 { 6 memset(mFrames, 0, 256); 7 // gCons->ConsPrintf("image source path: %s\n", SourcePath); 8 mframesource = SDL_CreateTextureFromSurface(ren, LoadSurfaceBMP(SourcePath)); 9 mFrameCount = (FrameCount - 1); 10 mDefaultFrameRate = FRate; 11 12 SDL_Rect framerect; 13 framerect.h = frameH; 14 framerect.w = frameW; 15 framerect.x = 0; 16 framerect.y = 0; 17 18 int i = 0; 19 while (i <= mFrameCount) 20 { 21 22 framerect.x = ((i)*frameW); 23 24 mFrames[i] = framerect; 25 26 i++; 27 } 28 } 29 30 //animation Functions 31 animation::animation(FrameSet* set, int ID, bool flip) : mID(ID) 32 { 33 mFrameSet = set; 34 mCurrentFrameNumber = 0; 35 mFrameRate = mFrameSet->GetDefaultFrameRate(); 36 mTimer = 0; 37 mIsFlippable = flip; 38 mIsPlaying = false; 39 mCurrentFrame.FrameSource = mFrameSet->GetFrameSource(); 40 mCurrentFrame.FrameRect = mFrameSet->GetFrameRect(mCurrentFrameNumber); 41 } 42 43 Frame animation::GetCurrentFrame() 44 { 45 mCurrentFrame.FrameRect = mFrameSet->GetFrameRect(mCurrentFrameNumber); 46 if (mIsPlaying == true) 47 { 48 if ((gTime->GetCurrentMS() - mTimer) >= mFrameRate) 49 { 50 if (mCurrentFrameNumber == mFrameSet->GetNumberOfFrames()) 51 { 52 if (mFlags == ONCE) 53 { 54 Stop(); 55 mFeed.EventProcess(Event(ANIM_COMPLETE, mID)); 56 //gCons->ConsPrintf("Animation Complete\n"); 57 } 58 59 mCurrentFrameNumber = 0; 60 } 61 else 62 { 63 mCurrentFrameNumber = (mCurrentFrameNumber + 1); 64 } 65 mTimer = gTime->GetCurrentMS(); 66 } 67 } 68 return mCurrentFrame; 69 } 70 71 //AnimDataPack Functions 72 AnimDataPack::AnimDataPack(int AnimCount, FrameSet* AnimData, int* Index) 73 { 74 mAnimData = AnimData; 75 mIndexer = Index; 76 mAnimCount = AnimCount; 77 } 78 79 FrameSet* AnimDataPack::GetAnimationData(int AnimationID) 80 { 81 for (int i = 0; i < mAnimCount; i++) 82 { 83 //if (AnimationID == 130) { gCons->ConsPrintf("index: %i, item: %i\n", i, mIndexer[i]); } 84 if (mIndexer[i] == AnimationID) 85 { 86 return &mAnimData[i]; 87 } 88 } 89 gCons->ConsPrintf("Invalid Animation ID; Could not find Animation Data\n"); 90 return NULL; 91 } 92 93 //AnimPack Functions 94 AnimPack::AnimPack(AnimDataPack* data) 95 { 96 mData = data; 97 mLastIndex = 0; 98 99 mAnims = new animation[mData->GetAnimCount()]; 100 for (int i = 0; i < mData->GetAnimCount(); i++) 101 { 102 mAnims[i] = animation( mData->GetAnimationData(mData->GetIndex(i)), mData->GetIndex(i) ); //make sure mData->GetIndex(i) returns correct ID 103 } 104 } 105 106 animation* AnimPack::ActivateAnimation(int AnimationID, int flags) 107 { 108 for (int i = 0; i < mData->GetAnimCount(); i++) 109 { 110 if (mData->GetIndex(i) == AnimationID) 111 { 112 if (mLastIndex != i) 113 { 114 mAnims[mLastIndex].Stop(); 115 mLastIndex = i; 116 } 117 118 mAnims[i].Play(flags); 119 return &mAnims[i]; 120 } 121 } 122 gCons->ConsPrintf("Invalid Animation ID; Could not find Animation\n"); 123 return NULL; 124 125 } 126 127 bool FrameCompare(Frame f1, Frame f2) 128 { 129 if (f1.FrameSource == f2.FrameSource) 130 { 131 if (f1.FrameRect.x == f2.FrameRect.x) 132 { 133 return true; 134 } 135 } 136 return false; 137 }