1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#include "CSpriteAnimation.h"
CSpriteAnimation::CSpriteAnimation(void)
{
mBuilt = false;
}
CSpriteAnimation::CSpriteAnimation(const char *aFile, int aFrames, int aColumns, int aRows, int aFrameWidth, int aFrameHeight, bool aFlippableH, bool aFlippableV)
{
int flipCounter = 0;
mBuilt = false;
mNumFrames = aFrames;
mWidth = aFrameWidth;
mHeight = aFrameHeight;
CSurface *allFramesSurface = new CSurface(aFile);
for (int i=0; i < mNumFrames; i++)
{
CSurface *tempSurface = new CSurface(mWidth, mHeight);
CSurface::drawImage(tempSurface, allFramesSurface, 0, 0, (i % aColumns) * aFrameWidth, (i / aColumns) * aFrameHeight, aFrameWidth, aFrameHeight);
mFrame.push_back(new CSpriteFrame(tempSurface));
}
allFramesSurface->destroy();
allFramesSurface = NULL;
mFlippableH = aFlippableH;
mFlippableV = aFlippableV;
if (mFlippableH)
{
flipCounter++;
mStartFrameFlipH = mNumFrames * flipCounter;
for (int i=0; i < mNumFrames; i++)
{
CSurface *tempSurface = new CSurface(getFrame(i)->getImage()->getImage(), CSurface::FLIP_HORIZONTAL);
mFrame.push_back(new CSpriteFrame(tempSurface));
}
}
if (mFlippableV)
{
flipCounter++;
mStartFrameFlipV = mNumFrames * flipCounter;
for (int i=0; i < mNumFrames; i++)
{
CSurface *tempSurface = new CSurface(getFrame(i)->getImage()->getImage(), CSurface::FLIP_VERTICAL);
mFrame.push_back(new CSpriteFrame(tempSurface));
}
}
if (mFlippableH && mFlippableV)
{
flipCounter++;
mStartFrameFlipHV = mNumFrames * flipCounter;
for (int i=0; i < mNumFrames; i++)
{
CSurface *tempSurface = new CSurface(getFrame(i)->getImage()->getImage(), CSurface::FLIP_HORIZONTAL | CSurface::FLIP_VERTICAL);
mFrame.push_back(new CSpriteFrame(tempSurface));
}
}
mBuilt = true;
flipCounter++;
mNumFrames = mNumFrames * flipCounter;
}
CSpriteAnimation::~CSpriteAnimation(void)
{
destroy();
mBuilt = false;
}
void CSpriteAnimation::destroy(void)
{
for (int i=0; i < mNumFrames; i++)
{
if (mFrame[i] != NULL)
{
mFrame[i]->destroy();
mFrame[i] = NULL;
}
}
mFrame.clear();
}
int CSpriteAnimation::getWidth(void)
{
return mWidth;
}
int CSpriteAnimation::getHeight(void)
{
return mHeight;
}
int CSpriteAnimation::getNumFrames(void)
{
return mNumFrames;
}
bool CSpriteAnimation::isBuilt(void)
{
return mBuilt;
}
CSpriteFrame *CSpriteAnimation::getFrame(int aFrameIndex)
{
return mFrame[aFrameIndex];
}
|