#pragma once
#include "ifdefs.h"
#include "ltexture.h"

#ifndef SPRITE_H
#define SPRITE_H

// Clase sprite
class Sprite
{
public:
    // Constructor
    Sprite();

    // Destructor
    ~Sprite();

    // Inicializador
    void init(int x, int y, Uint16 w, Uint16 h, LTexture *texture, SDL_Renderer *renderer);
    void init(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer);

    // Muestra el sprite por pantalla
    void render();

    // Obten el valor de la variable
    int getPosX();

    // Obten el valor de la variable
    int getPosY();

    // Obten el valor de la variable
    Uint16 getWidth();

    // Obten el valor de la variable
    Uint16 getHeight();

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

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

    // Establece el valor de la variable
    void setWidth(Uint16 w);

    // Establece el valor de la variable
    void setHeight(Uint16 h);

    // Obten el valor de la variable
    SDL_Rect getSpriteClip();

    // Establece el valor de la variable
    void setSpriteClip(int x, int y, Uint16 w, Uint16 h);
    void setSpriteClip(SDL_Rect rect);

    // Obten el valor de la variable
    LTexture *getTexture();

    // Establece el valor de la variable
    void setTexture(LTexture *texture);

    // Establece el valor de la variable
    void setRenderer(SDL_Renderer *renderer);

protected:
    int mPosX; // Posición X donde dibujar el sprite
    int mPosY; // Posición Y donde dibujar el sprite

    Uint16 mWidth;  // Ancho del sprite
    Uint16 mHeight; // Alto del sprite

    SDL_Renderer *mRenderer; // Puntero al renderizador

    LTexture *mTexture; // Textura donde estan todos los dibujos del sprite

    SDL_Rect mSpriteClip; // Rectangulo de la textura que se dibujará en pantalla
};

#endif
