#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:
	int mPosX;			// Posición en el eje X
	int mPosY;			// Posición en el eje Y
	Uint8 mWidth;		// Ancho del objeto
	Uint8 mHeight;		// Alto del objeto
	int mVelX;			// Velocidad en el eje X
	int mVelY;			// Velocidad en el eje Y
	int mKind;			// Tipo de objeto
	int mOwner;			// Identificador del dueño del objeto
	Sprite *mSprite;	// Sprite con los graficos y métodos de pintado
	circle_t mCollider; // 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á activo
	bool isActive();

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