#pragma once

#include <SDL2/SDL.h>
#include "animatedsprite.h"
#include "utils.h"
#include <vector>

#ifndef SMARTSPRITE_H
#define SMARTSPRITE_H

// Clase SmartSprite
class SmartSprite : public AnimatedSprite
{
private:
	// VAriables
	bool enabled;		// Indica si esta habilitado
	bool onDestination; // Indica si está en el destino
	int destX;			// Posicion de destino en el eje X
	int destY;			// Posicion de destino en el eje Y
	int enabledCounter; // Contador para deshabilitarlo
	bool finished;		// Indica si ya ha terminado

	// Comprueba el movimiento
	void checkMove();

	// Comprueba si ha terminado
	void checkFinished();

public:
	// Constructor
	SmartSprite(LTexture *texture, SDL_Renderer *renderer);

	// Destructor
	~SmartSprite();

	// Actualiza la posición y comprueba si ha llegado a su destino
	void update();

	// Pinta el objeto en pantalla
	void render();

	// Obtiene el valor de la variable
	bool isEnabled();

	// Establece el valor de la variable
	void setEnabled(bool enabled);

	// Obtiene el valor de la variable
	int getEnabledCounter();

	// Establece el valor de la variable
	void setEnabledCounter(int value);

	// Establece el valor de la variable
	void setDestX(int x);

	// Establece el valor de la variable
	void setDestY(int y);

	// Obtiene el valor de la variable
	int getDestX();

	// Obtiene el valor de la variable
	int getDestY();

	// Obtiene el valor de la variable
	bool isOnDestination();

	// Obtiene el valor de la variable
	bool hasFinished();
};

#endif
