#include"texture.h"

Texture::Texture(){
	//Initialize variables
	szW = 0;
	szH = 0;

	//Set the SDL_Texture to null
	texture = NULL;

    //Initialize the SDL_Image library
	IMG_Init(IMG_INIT_PNG);
};

void Texture::setRenderer(SDL_Renderer* render){
    //Set renderer
	renderer = render;
};

Texture::~Texture(){
    //Deallocate the texture when the class closes
    free();
};

void Texture::loadTexture(std::string path){
	//Get rid of preexisting texture
	free();

	//Load image at specified path
	SDL_Surface* loadedSurface = IMG_Load( path.c_str() );

	if(loadedSurface == NULL){
		std::cout << "Couldn't load " << path.c_str() << std::endl;
	}
	else{
		//Create texture from surface pixels
        	texture = SDL_CreateTextureFromSurface
					(renderer,loadedSurface);

		if(texture == NULL){
			std::cout << "Couldn't create texture from " << path.c_str() << std::endl;
		}
		else{
			//Get image dimensions
			szW = loadedSurface->w;
			szH = loadedSurface->h;
		}
		//Get rid of old loaded surface
		SDL_FreeSurface(loadedSurface);
	}
};

void Texture::free(){
	//Free texture if it exists
	if(texture != NULL){
		SDL_DestroyTexture(texture);
		texture = NULL;
		szW = 0;
		szH = 0;
	}
};

void Texture::render(SDL_Rect* quad,SDL_Rect* frame){
    //Render the texture
	SDL_RenderCopy(renderer,texture,frame,quad);
};

void Texture::render(SDL_Rect* quad){
    //Make a frame of the size of the quad
    SDL_Rect frame = {0,0,quad->w,quad->h};
    //Render the texture
	SDL_RenderCopy(renderer,texture,&frame,quad);
};

int Texture::getWidth(){
	return szW;
};

int Texture::getHeight(){
	return szH;
};
