#pragma once #include #include "asset.h" #include "movingsprite.h" #include "utils.h" /* Esta clase es la encargada de dibujar el fondo que aparece durante la sección jugable. Utiliza una textura donde compone la imagen y luego tiene una textura superior rellena de un color sólido cuya opacidad se puede modificar. El objeto tiene un tamaño total definido en la variable "rect". En principio este tamaño coincide con el tamaño de la ventana o resolución del juego, pero se pinta solo el rectangulo definido en srcRect en la posición de la pantalla definida en dstRect. Ambos rectangulos han de coincidir en tamaño y por definición, el punto comun es el inferior derecho el rectangulo. Utiliza varios métodos para definir su comportamiento: - setCloudsSpeed(float value) Velocidad a la que se desplazan las nubes cada frame - setGradientNumber(int value) Escoge el índice de la textura de fondo a usar (el color del cielo) - setTransition(float value) Porcentaje (entre 0.0f (textura actual) y 1.0f (textura siguiente)) para mostrar entre la textura de fondo actual y la siguiente - setSrcRect(SDL_Rect value) Rectangulo de la textura de fondo que se desea mostrar - setDstRecr(SDL_Rect value) Rectangulo de destino donde se mostrará el rectángulo antrior. Automaticamente modifica srcRect para coincidor en tamaño con el destino. - setColor(color_t color) Establece el color de la textura de superposición - setAlpha(int alpha) Establece la transparencia de la textura de superposición */ // Clase Background class Background { private: // Objetos y punteros SDL_Renderer *renderer; // El renderizador de la ventana Asset *asset; // Objeto que gestiona todos los ficheros de recursos Texture *buildingsTexture; // Textura con los edificios de fondo Texture *topCloudsTexture; // Textura con las nubes de fondo Texture *bottomCloudsTexture; // Textura con las nubes de fondo Texture *grassTexture; // Textura con la hierba del suelo Texture *gradientsTexture; // Textura con los diferentes colores de fondo del juego MovingSprite *topCloudsSprite_A; // Sprite para las nubes superiores MovingSprite *topCloudsSprite_B; // Sprite para las nubes superiores MovingSprite *bottomCloudsSprite_A; // Sprite para las nubes inferiores MovingSprite *bottomCloudsSprite_B; // Sprite para las nubes inferiores Sprite *buildingsSprite; // Sprite con los edificios de fondo Sprite *gradientSprite; // Sprite con los graficos del degradado de color de fondo Sprite *grassSprite; // Sprite para la hierba SDL_Texture *canvas; // Textura para componer el fondo SDL_Texture *colorTexture; // Textura para atenuar el fondo // Variables SDL_Rect gradientRect[4]; // Vector con las coordenadas de los 4 degradados para el cielo SDL_Rect topCloudsRect[4]; // Vector con las coordenadas de los 4 nubes de arriba SDL_Rect bottomCloudsRect[4]; // Vector con las coordenadas de los 4 nubes de abajo int gradientNumber; // Indica el número de degradado de fondo que se va a dibujar int alpha; // Transparencia entre los dos degradados float cloudsSpeed; // Velocidad a la que se desplazan las nubes float transition; // Nivel de transición del fondo 0..1 int counter; // Contador interno SDL_Rect rect; // Tamaño del objeto fondo SDL_Rect srcRect; // Parte del objeto fondo que se va a dibujará en pantalla SDL_Rect dstRect; // Posición donde dibujar la parte del objeto fondo que se dibujará en pantalla int base; // Linea de fondo coincidente con el area inferior de la zona de juego color_t color; // Color para atenuar el fondo int alphaColorText; // Alpha para atenuar el fondo int alphaColorTextTemp; // Valor temporal para hacer la transición de alpha // Dibuja el gradiente de fondo void renderGradient(); // Dibuja las nubes de arriba void renderTopClouds(); // Dibuja las nubes de abajo void renderBottomClouds(); // Compone todos los elementos del fondo en la textura void fillCanvas(); // Actualiza el valor de alpha void updateAlphaColorText(); // Actualiza las nubes void updateClouds(); public: // Constructor Background(SDL_Renderer *renderer, Asset *asset); // Destructor ~Background(); // Actualiza la lógica del objeto void update(); // Dibuja el objeto void render(); // Establece la posición del objeto void setPos(SDL_Rect pos); // Vuelve a cargar las texturas void reloadTextures(); // Ajusta el valor de la variable void setCloudsSpeed(float value); // Ajusta el valor de la variable void setGradientNumber(int value); // Ajusta el valor de la variable void setTransition(float value); // Ajusta el valor de la variable void setSrcRect(SDL_Rect value); // Ajusta el valor de la variable void setDstRect(SDL_Rect value); // Establece el color de atenuación void setColor(color_t color); // Establece la transparencia de la atenuación void setAlpha(int alpha); };