#include "const.h"
#include "movingsprite.h"
#include <iostream>

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

// Destructor
MovingSprite::~MovingSprite()
{
	init(0, 0, 0, 0, 0, 0, 0, 0, nullptr, nullptr);
}

// Iniciador
void MovingSprite::init(float x, float y, Uint16 w, Uint16 h, float velx, float vely, float accelx, float accely,
						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 la velocidad X,Y del sprite
	setVelX(velx);
	setVelY(vely);

	// Establece la aceleración X,Y del sprite
	setAccelX(accelx);
	setAccelY(accely);

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

	// Establece el renderizador
	setRenderer(renderer);

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

// Coloca el sprite en su nueva posición en funcion de la velocidad
void MovingSprite::move()
{
	mPosX += mVelX;
	mPosY += mVelY;
}

// Actualiza las variables internas del sprite: posición y velocidad
void MovingSprite::update()
{
	move();

	mVelX += mAccelX;
	mVelY += mAccelY;
}

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

// Establece el valor de la variable
float MovingSprite::getPosX()
{
	return mPosX;
}

// Establece el valor de la variable
float MovingSprite::getPosY()
{
	return mPosY;
}

// Establece el valor de la variable
float MovingSprite::getVelX()
{
	return mVelX;
}

// Establece el valor de la variable
float MovingSprite::getVelY()
{
	return mVelY;
}

// Establece el valor de la variable
float MovingSprite::getAccelX()
{
	return mAccelX;
}

// Establece el valor de la variable
float MovingSprite::getAccelY()
{
	return mAccelY;
}

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

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

// Establece el valor de la variable
void MovingSprite::setVelX(float x)
{
	mVelX = x;
}

// Establece el valor de la variable
void MovingSprite::setVelY(float y)
{
	mVelY = y;
}

// Establece el valor de la variable
void MovingSprite::setAccelX(float x)
{
	mAccelX = x;
}

// Establece el valor de la variable
void MovingSprite::setAccelY(float y)
{
	mAccelY = y;
}