Diffstat (limited to 'noncore/games/sfcave-sdl/animatedimage.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/games/sfcave-sdl/animatedimage.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/noncore/games/sfcave-sdl/animatedimage.cpp b/noncore/games/sfcave-sdl/animatedimage.cpp new file mode 100644 index 0000000..d9d6ff6 --- a/dev/null +++ b/noncore/games/sfcave-sdl/animatedimage.cpp | |||
@@ -0,0 +1,68 @@ | |||
1 | #include "SDL.h" | ||
2 | #include "SDL_image.h" | ||
3 | |||
4 | #include "constants.h" | ||
5 | #include "animatedimage.h" | ||
6 | |||
7 | AnimatedImage :: AnimatedImage( QString file, int nFrames ) | ||
8 | { | ||
9 | nrFrames = nFrames; | ||
10 | currentFrame = 0; | ||
11 | |||
12 | // Load image | ||
13 | image = IMG_Load( (const char *)file.c_str() ); | ||
14 | if ( !image ) | ||
15 | { | ||
16 | nrFrames = 0; | ||
17 | image = 0; | ||
18 | return; | ||
19 | } | ||
20 | |||
21 | SDL_SetColorKey(image, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB( image->format, 0, 0, 0 ) ); | ||
22 | //image = SDL_DisplayFormat( tmp ); | ||
23 | |||
24 | //SDL_FreeSurface( tmp ); | ||
25 | frameWidth = image->w/nrFrames; | ||
26 | frameHeight = image->h; | ||
27 | } | ||
28 | |||
29 | AnimatedImage :: ~AnimatedImage() | ||
30 | { | ||
31 | if ( image != 0 ) | ||
32 | SDL_FreeSurface( image ); | ||
33 | } | ||
34 | |||
35 | bool AnimatedImage :: nextFrame() | ||
36 | { | ||
37 | bool rc = true; | ||
38 | currentFrame ++; | ||
39 | if ( currentFrame >= nrFrames ) | ||
40 | { | ||
41 | currentFrame --; | ||
42 | rc = false; | ||
43 | } | ||
44 | |||
45 | return rc; | ||
46 | } | ||
47 | |||
48 | void AnimatedImage :: draw( SDL_Surface *screen, int x, int y ) | ||
49 | { | ||
50 | SDL_Rect dst; | ||
51 | dst.x = currentFrame * frameWidth; | ||
52 | dst.y = 0; | ||
53 | dst.w = frameWidth; | ||
54 | dst.h = frameHeight; | ||
55 | |||
56 | SDL_Rect dst2; | ||
57 | dst2.x = x - (frameWidth/2); | ||
58 | dst2.y = y - (frameHeight/2);; | ||
59 | SDL_BlitSurface( image, &dst, screen, &dst2 ); | ||
60 | } | ||
61 | |||
62 | bool AnimatedImage :: AtEnd() | ||
63 | { | ||
64 | if ( currentFrame +1 >= nrFrames || image == 0 ) | ||
65 | return true; | ||
66 | return false; | ||
67 | } | ||
68 | |||