#include "sprite.h"

// Constructor
Sprite::Sprite(int x, int y, int w, int 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(x, y, w, h);

	// Inicializa variables
	setEnabled(true);
}

Sprite::Sprite(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer)
{
	// Establece el alto y el ancho del sprite
	setWidth(rect.w);
	setHeight(rect.h);

	// Establece la posición X,Y del sprite
	setPosX(rect.x);
	setPosY(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);

	// Inicializa variables
	setEnabled(true);
}

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

// Muestra el sprite por pantalla
void Sprite::render()
{
	if (mEnabled)
	{
		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
int Sprite::getWidth()
{
	return mWidth;
}

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

// Establece la posición del objeto
void Sprite::setPos(SDL_Rect rect)
{
	mPosX = rect.x;
	mPosY = rect.y;
}

// 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(int w)
{
	mWidth = w;
}

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

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

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

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

// 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;
}

// Establece el valor de la variable
void Sprite::setEnabled(bool value)
{
	mEnabled = value;
}

// Comprueba si el objeto está habilitado
bool Sprite::isEnabled()
{
	return mEnabled;
}

// Devuelve el rectangulo donde está el sprite
SDL_Rect Sprite::getRect()
{
	SDL_Rect rect = {getPosX(), getPosY(), getWidth(), getHeight()};
	return rect;
}