#include "sprite.h"

// Constructor
Sprite::Sprite()
{
	init(0, 0, 0, 0, nullptr, nullptr);
}

// Destructor
Sprite::~Sprite()
{
	mTexture = nullptr;
	mRenderer = nullptr;
}

// Inicializador
void Sprite::init(int x, int y, Uint16 w, Uint16 h, LTexture *texture, SDL_Renderer *renderer)
{
	// Establece el alto y el ancho del sprite
	setWidth(w);
	setHeight(h);

	// Establece la posición X,Y del sprite
	setPosX(x);
	setPosY(y);

	// Establece el puntero al renderizador de la ventana
	setRenderer(renderer);

	// Establece la textura donde están los gráficos para el sprite
	setTexture(texture);

	// Establece el rectangulo de donde coger la imagen
	setSpriteClip(0, 0, w, h);
}

// Inicializador
void Sprite::init(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer)
{
	// Establece el alto y el ancho del sprite
	mWidth = rect.w;
	mHeight = rect.h;

	// Establece la posición X,Y del sprite
	mPosX = rect.x;
	mPosY = rect.y;

	// Establece el puntero al renderizador de la ventana
	setRenderer(renderer);

	// Establece la textura donde están los gráficos para el sprite
	setTexture(texture);

	// Establece el rectangulo de donde coger la imagen
	setSpriteClip(rect);
}

// Muestra el sprite por pantalla
void Sprite::render()
{
	mTexture->render(mRenderer, mPosX, mPosY, &mSpriteClip);
}

// Obten el valor de la variable
int Sprite::getPosX()
{
	return mPosX;
}

// Obten el valor de la variable
int Sprite::getPosY()
{
	return mPosY;
}

// Obten el valor de la variable
Uint16 Sprite::getWidth()
{
	return mWidth;
}

// Obten el valor de la variable
Uint16 Sprite::getHeight()
{
	return mHeight;
}

// Establece el valor de la variable
void Sprite::setPosX(int x)
{
	mPosX = x;
}

// Establece el valor de la variable
void Sprite::setPosY(int y)
{
	mPosY = y;
}

// Establece el valor de la variable
void Sprite::setWidth(Uint16 w)
{
	mWidth = w;
}

// Establece el valor de la variable
void Sprite::setHeight(Uint16 h)
{
	mHeight = h;
}

// Obten el valor de la variable
SDL_Rect Sprite::getSpriteClip()
{
	return mSpriteClip;
}

// Establece el valor de la variable
void Sprite::setSpriteClip(int x, int y, Uint16 w, Uint16 h)
{
	mSpriteClip.x = x;
	mSpriteClip.y = y;
	mSpriteClip.w = w;
	mSpriteClip.h = h;
}

// Establece el valor de la variable
void Sprite::setSpriteClip(SDL_Rect rect)
{
	mSpriteClip = rect;
}

// Obten el valor de la variable
LTexture *Sprite::getTexture()
{
	return mTexture;
}

// Establece el valor de la variable
void Sprite::setTexture(LTexture *texture)
{
	mTexture = texture;
}

// Establece el valor de la variable
void Sprite::setRenderer(SDL_Renderer *renderer)
{
	mRenderer = renderer;
}