#pragma once

#include "struct.h"
#include "sprite.h"
#include "const.h"
#include "globals.h"

#ifndef BALLOON_H
#define BALLOON_H

//Clase globo
class Balloon
{
public:
	//Constructor
	Balloon();

	//Inicializador
	void init(int x, int y, Uint8 kind, float velx, Uint16 creationtimer);

	//Centra el globo en la posición X
	void allignTo(int x);

	//Pinta el globo en la pantalla
	void render();

	//Actualiza la posición y estados del globo
	void move();

	//Pone a cero todos los valores del globo
	void erase();

	//Comprueba si el globo tiene algun tipo asignado
	bool isActive();

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

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

	//Obtiene del valor de la variable
	float getVelY();

	//Obtiene del valor de la variable
	int getWidth();

	//Obtiene del valor de la variable
	int getHeight();

	//Establece el valor de la variable
	void setVelY(float velY);

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

	//Establece el valor de la variable
	void setStop(bool state);

	//Obtiene del valor de la variable
	bool isStopped();

	//Establece el valor de la variable
	void setBlink(bool state);

	//Obtiene del valor de la variable
	bool isBlinking();

	//Establece el valor de la variable
	void setVisible(bool state);

	//Obtiene del valor de la variable
	bool isVisible();

	//Establece el valor de la variable
	void setInvulnerable(bool state);

	//Obtiene del valor de la variable
	bool isInvulnerable();

	//Establece el valor de la variable
	void setBeingCreated(bool state);

	//Obtiene del valor de la variable
	bool isBeingCreated();

	//Establece el valor de la variable
	void setStoppedTimer(Uint16 time);

	//Obtiene del valor de la variable
	Uint16 getStoppedTimer();

	//Obtiene del valor de la variable
	Uint16 getScore();

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

private:
	//Posición X,Y del objeto globo
	float mPosX;
	int mPosY;

	//Alto y ancho del objeto globo
	Uint8 mWidth;
	Uint8 mHeight;

	//Variables para controlar la velocidad del globo
	float mVelX;
	float mVelY;
	float mGravity;
	float mDefaultVelY;
	int mMaxVelY;

	//Puntos que da el globo al ser destruido
	Uint16 mScore;

	//Indica si el globo está parado
	bool mStopped;

	//Temporizador para controlar el estado "parado"
	Uint16 mStoppedTimer;

	//Indica si el globo está intermitente
	bool mBlinking;

	//Indica si el globo es visible
	bool mVisible;

	//Indica si el globo es invulnerable
	bool mInvulnerable;

	//Indica si el globo se está creando
	bool mBeingCreated;

	//Temporizador para controlar el estado "creandose"
	Uint16 mCreationTimer;

	//Tipo de globo
	Uint8 mKind;

	//Sprite del objeto globo
	Sprite mSprite;

	//Circulo de colisión del objeto
	Circle mCollider;

	//Alinea el circulo de colisión con la posición del objeto globo
	void shiftColliders();
};

#endif