diff --git a/source/balloon.cpp b/source/balloon.cpp index 96f1485..76d99a7 100644 --- a/source/balloon.cpp +++ b/source/balloon.cpp @@ -13,10 +13,17 @@ Balloon::Balloon(float x, float y, Uint8 kind, float vel_x, float speed, Uint16 pos_y_(y), vel_x_(vel_x), being_created_(creation_timer > 0), + blinking_(false), + enabled_(true), invulnerable_(creation_timer > 0), + stopped_(true), + visible_(true), creation_counter_(creation_timer), creation_counter_ini_(creation_timer), + stopped_counter_(0), kind_(kind), + counter_(0), + travel_y_(1.0f), speed_(speed) { @@ -220,9 +227,23 @@ Balloon::Balloon(float x, float y, Uint8 kind, float vel_x, float speed, Uint16 break; } + // Valores para el efecto de rebote + bouncing_.enabled = false; + bouncing_.counter = 0; + bouncing_.speed = 2; + bouncing_.zoomW = 1.0f; + bouncing_.zoomH = 1.0f; + bouncing_.despX = 0.0f; + bouncing_.despY = 0.0f; + bouncing_.w = {1.10f, 1.05f, 1.00f, 0.95f, 0.90f, 0.95f, 1.00f, 1.02f, 1.05f, 1.02f}; + bouncing_.h = {0.90f, 0.95f, 1.00f, 1.05f, 1.10f, 1.05f, 1.00f, 0.98f, 0.95f, 0.98f}; + // Configura el sprite sprite_->setPos({static_cast(pos_x_), static_cast(pos_y_), width_, height_}); + // Tamaño del circulo de colisión + collider_.r = width_ / 2; + // Alinea el circulo de colisión con el objeto updateColliders(); } @@ -705,8 +726,8 @@ Circle &Balloon::getCollider() // Alinea el circulo de colisión con la posición del objeto globo void Balloon::updateColliders() { - collider_.x = static_cast(pos_x_ + collider_.r); - collider_.y = static_cast(pos_y_ + collider_.r); + collider_.x = Uint16(pos_x_ + collider_.r); + collider_.y = pos_y_ + collider_.r; } // Obtiene le valor de la variable diff --git a/source/balloon.h b/source/balloon.h index c050a38..ed93dd0 100644 --- a/source/balloon.h +++ b/source/balloon.h @@ -74,53 +74,49 @@ private: // Estructura para las variables para el efecto de los rebotes struct Bouncing { - bool enabled = false; // Si el efecto está activo - Uint8 counter = 0; // Countador para el efecto - Uint8 speed = 2; // Velocidad a la que transcurre el efecto - float zoomW = 1.0f; // Zoom aplicado a la anchura - float zoomH = 1.0f; // Zoom aplicado a la altura - float despX = 0.0f; // Desplazamiento de pixeles en el eje X antes de pintar el objeto con zoom - float despY = 0.0f; // Desplazamiento de pixeles en el eje Y antes de pintar el objeto con zoom - - std::vector w = {1.10f, 1.05f, 1.00f, 0.95f, 0.90f, 0.95f, 1.00f, 1.02f, 1.05f, 1.02f}; // Vector con los valores de zoom para el ancho del globo - std::vector h = {0.90f, 0.95f, 1.00f, 1.05f, 1.10f, 1.05f, 1.00f, 0.98f, 0.95f, 0.98f}; // Vector con los valores de zoom para el alto del globo - - // Constructor por defecto - Bouncing() {} + bool enabled; // Si el efecto está activo + Uint8 counter; // Countador para el efecto + Uint8 speed; // Velocidad a la que transcurre el efecto + float zoomW; // Zoom aplicado a la anchura + float zoomH; // Zoom aplicado a la altura + float despX; // Desplazamiento de pixeles en el eje X antes de pintar el objeto con zoom + float despY; // Desplazamiento de pixeles en el eje Y antes de pintar el objeto con zoom + std::vector w; // Vector con los valores de zoom para el ancho del globo + std::vector h; // Vector con los valores de zoom para el alto del globo }; // Objetos y punteros std::unique_ptr sprite_; // Sprite del objeto globo // Variables - float pos_x_; // Posición en el eje X - float pos_y_; // Posición en el eje Y - Uint8 width_; // Ancho - Uint8 height_; // Alto - float vel_x_; // Velocidad en el eje X. Cantidad de pixeles a desplazarse - float vel_y_; // Velocidad en el eje Y. Cantidad de pixeles a desplazarse - float gravity_; // Aceleración en el eje Y. Modifica la velocidad - float default_vel_y_; // Velocidad inicial que tienen al rebotar contra el suelo - float max_vel_y_; // Máxima velocidad que puede alcanzar el objeto en el eje Y - bool being_created_; // Indica si el globo se está creando - bool blinking_ = false; // Indica si el globo está intermitente - bool enabled_ = true; // Indica si el globo esta activo - bool invulnerable_; // Indica si el globo es invulnerable - bool stopped_ = true; // Indica si el globo está parado - bool visible_ = true; // Indica si el globo es visible - Circle collider_ = Circle(0, 0, width_ / 2); // Circulo de colisión del objeto - Uint16 creation_counter_; // Temporizador para controlar el estado "creandose" - Uint16 creation_counter_ini_; // Valor inicial para el temporizador para controlar el estado "creandose" - Uint16 score_; // Puntos que da el globo al ser destruido - Uint16 stopped_counter_ = 0; // Contador para controlar el estado "parado" - Uint8 kind_; // Tipo de globo - Uint8 menace_; // Cantidad de amenaza que genera el globo - Uint32 counter_ = 0; // Contador interno - float travel_y_ = 1.0f; // Distancia que ha de recorrer el globo en el eje Y antes de que se le aplique la gravedad - float speed_; // Velocidad a la que se mueven los globos - Uint8 size_; // Tamaño del globo - Uint8 power_; // Cantidad de poder que alberga el globo - Bouncing bouncing_ = Bouncing(); // Contiene las variables para el efecto de rebote + float pos_x_; // Posición en el eje X + float pos_y_; // Posición en el eje Y + Uint8 width_; // Ancho + Uint8 height_; // Alto + float vel_x_; // Velocidad en el eje X. Cantidad de pixeles a desplazarse + float vel_y_; // Velocidad en el eje Y. Cantidad de pixeles a desplazarse + float gravity_; // Aceleración en el eje Y. Modifica la velocidad + float default_vel_y_; // Velocidad inicial que tienen al rebotar contra el suelo + float max_vel_y_; // Máxima velocidad que puede alcanzar el objeto en el eje Y + bool being_created_; // Indica si el globo se está creando + bool blinking_; // Indica si el globo está intermitente + bool enabled_; // Indica si el globo esta activo + bool invulnerable_; // Indica si el globo es invulnerable + bool stopped_; // Indica si el globo está parado + bool visible_; // Indica si el globo es visible + Circle collider_; // Circulo de colisión del objeto + Uint16 creation_counter_; // Temporizador para controlar el estado "creandose" + Uint16 creation_counter_ini_; // Valor inicial para el temporizador para controlar el estado "creandose" + Uint16 score_; // Puntos que da el globo al ser destruido + Uint16 stopped_counter_; // Contador para controlar el estado "parado" + Uint8 kind_; // Tipo de globo + Uint8 menace_; // Cantidad de amenaza que genera el globo + Uint32 counter_; // Contador interno + float travel_y_; // Distancia que ha de recorrer el globo en el eje Y antes de que se le aplique la gravedad + float speed_; // Velocidad a la que se mueven los globos + Uint8 size_; // Tamaño del globo + Uint8 power_; // Cantidad de poder que alberga el globo + Bouncing bouncing_; // Contiene las variables para el efecto de rebote // Alinea el circulo de colisión con la posición del objeto globo void updateColliders();