#pragma once

#include <SDL2/SDL.h>
#include "utils.h"
#include "sprite.h"

#ifndef BULLET_H
#define BULLET_H

// Tipos de bala
#define BULLET_UP 1
#define BULLET_LEFT 2
#define BULLET_RIGHT 3

// Tipos de retorno de la funcion move de la bala
#define BULLET_MOVE_OK 0
#define BULLET_MOVE_OUT 1

// Clase Bullet
class Bullet
{
private:
	// Objetos
	Sprite *sprite; // Sprite con los graficos y métodos de pintado

	// Variables
	int posX;		   // Posición en el eje X
	int posY;		   // Posición en el eje Y
	Uint8 width;	   // Ancho del objeto
	Uint8 height;	   // Alto del objeto
	int velX;		   // Velocidad en el eje X
	int velY;		   // Velocidad en el eje Y
	int kind;		   // Tipo de objeto
	int owner;		   // Identificador del dueño del objeto
	circle_t collider; // Circulo de colisión del objeto

	// Alinea el circulo de colisión con el objeto
	void shiftColliders();

public:
	// Constructor
	Bullet(int x, int y, int kind, bool poweredUp, int owner, LTexture *texture, SDL_Renderer *renderer);

	// Destructor
	~Bullet();

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

	// Actualiza la posición y estado del objeto
	Uint8 move();

	// Comprueba si el objeto está habilitado
	bool isEnabled();

	// Deshabilita el objeto
	void disable();

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

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

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

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

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

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

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

	// Obtiene el circulo de colisión
	circle_t &getCollider();
};

#endif
