1 #include <SDL.h>
2 #include <SDL_rotozoom.h>
3
4 #include <string>
5
6 using namespace std;
7
8 #include "image.h"
9 #include "utils.h"
10 #include "rendermanager.h"
11 #include "actor.h"
12 #include "collision.h"
13
init()14 void Image::init()
15 {
16 img=LoadImgAlpha(name);
17 center=owner->getCenter();
18 }
19
activate()20 void Image::activate()
21 {
22 rect=owner->getRect();
23 center=owner->getCenter();
24 g->rendermanager->addToDraw(rect);
25 }
26
update()27 void Image::update()
28 {
29 if(center!=owner->getCenter())
30 {
31 //Poner el fondo donde estaba antes
32 g->rendermanager->addToDraw(rect);
33
34 center=owner->getCenter();
35 rect=owner->getRect();
36
37 //Poner el fondo donde va a estar ahora
38 g->rendermanager->addToDraw(rect);
39 }
40 }
41
desactivate()42 void Image::desactivate()
43 {
44 g->rendermanager->addToDraw(rect);
45 }
46
flip()47 void Image::flip()
48 {
49 SDL_Surface *aux=img;
50 img=rotozoomSurface(img,180,1,SMOOTHING_ON);
51 SDL_FreeSurface(aux);
52 g->rendermanager->addToDraw(rect);
53 change=true;
54 }
55
draw()56 void Image::draw()
57 {
58 SDL_Rect r=rect;
59 SDL_BlitSurface(img,NULL,SDL_GetVideoSurface(),&r);
60 }
61
draw(SDL_Rect & r)62 void Image::draw(SDL_Rect &r)
63 {
64 SDL_Rect src;
65 SDL_Rect dst;
66
67 dst=getRectCollision(rect,r);
68 src.w=dst.w;
69 src.h=dst.h;
70
71 //Rellenamos los rectangulos src y dst
72 //para pintar solo lo que se ha modificado
73 //Si el actor esta a la derecha del rect
74 if(r.x<=rect.x)
75 {
76 src.x=0;
77 }
78 //Si el actor esta a la izquierda del rect
79 else
80 {
81 //Si el actor esta fuera de la pantalla
82 src.x=r.x-rect.x;
83 }
84
85 //Si el actor esta por debajo del rectangulo
86 if(r.y<=rect.y)
87 {
88 src.y=0;
89 }
90 //Si el actor esta por encima del rectangulo
91 else
92 {
93 src.y=r.y-rect.y;
94 }
95
96 SDL_BlitSurface(img,&src,SDL_GetVideoSurface(),&dst);
97 }
98