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