TapestryEngine

A 2D Platformer Game Engine
Log | Files | Refs

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 }