posant ordre en Stage i Background
This commit is contained in:
@@ -16,21 +16,29 @@ class Texture;
|
||||
/*
|
||||
Esta clase gestiona el fondo que aparece en la sección jugable.
|
||||
|
||||
Usa una textura compuesta y una capa superior con un color sólido cuya opacidad es ajustable.
|
||||
Su área total está definida por "rect", pero solo se pinta la región "srcRect" en la pantalla en "dstRect".
|
||||
Maneja internamente su progresión a través de diferentes estados del día/noche,
|
||||
controlando las transiciones entre gradientes, posiciones del sol/luna y velocidad de nubes.
|
||||
|
||||
Estados:
|
||||
- NORMAL: Progresión normal del día
|
||||
- COMPLETED: Reducción gradual de la actividad (nubes más lentas)
|
||||
|
||||
Métodos clave:
|
||||
- setCloudsSpeed(float value) -> Define la velocidad de las nubes
|
||||
- setGradientNumber(int value) -> Ajusta el índice del color de cielo
|
||||
- setTransition(float value) -> Configura la transición entre texturas
|
||||
- setColor(Color color) -> Aplica un color de atenuación
|
||||
- setAlpha(int alpha) -> Ajusta la transparencia de la capa de atenuación
|
||||
- incrementProgress() -> Avanza la progresión del fondo
|
||||
- setState() -> Cambia el estado del fondo
|
||||
- setColor/setAlpha -> Efectos de atenuación
|
||||
*/
|
||||
|
||||
class Background {
|
||||
public:
|
||||
// Enumeración de estados
|
||||
enum class State {
|
||||
NORMAL,
|
||||
COMPLETED
|
||||
};
|
||||
|
||||
// Constructor y Destructor
|
||||
Background();
|
||||
Background(float total_progress_to_complete = 6100.0f);
|
||||
~Background();
|
||||
|
||||
// Actualización y renderizado
|
||||
@@ -40,20 +48,40 @@ class Background {
|
||||
// Configuración de posición
|
||||
void setPos(SDL_FRect pos); // Establece la posición del objeto
|
||||
|
||||
// Configuración de animaciones y efectos
|
||||
void setCloudsSpeed(float value); // Ajusta la velocidad de desplazamiento de las nubes
|
||||
void setGradientNumber(int value); // Establece el degradado de fondo a usar
|
||||
void setTransition(float value); // Ajusta la transición entre texturas de fondo
|
||||
// Control de progresión
|
||||
void incrementProgress(float amount = 1.0f); // Incrementa la progresión interna
|
||||
void setState(State new_state); // Cambia el estado del fondo
|
||||
void reset(); // Reinicia la progresión
|
||||
|
||||
// Configuración manual (para uso fuera del juego principal)
|
||||
void setManualMode(bool manual); // Activa/desactiva el modo manual
|
||||
void setCloudsSpeed(float value); // Ajusta la velocidad de las nubes
|
||||
void setGradientNumber(int value); // Establece el degradado de fondo
|
||||
void setTransition(float value); // Ajusta la transición entre texturas
|
||||
void setSunProgression(float progress); // Establece la posición del sol
|
||||
void setMoonProgression(float progress); // Establece la posición de la luna
|
||||
|
||||
// Configuración de efectos visuales
|
||||
void setColor(Color color); // Establece el color de atenuación
|
||||
void setAlpha(int alpha); // Ajusta la transparencia del fondo
|
||||
|
||||
// Configuración del sol y la luna
|
||||
void setSunProgression(float progress); // Establece la posición del sol
|
||||
void setMoonProgression(float progress); // Establece la posición de la luna
|
||||
// Getters para información del estado
|
||||
float getProgress() const { return progress_; }
|
||||
State getState() const { return state_; }
|
||||
int getCurrentGradient() const { return static_cast<int>(gradient_number_); }
|
||||
|
||||
private:
|
||||
// Constantes de configuración
|
||||
static constexpr size_t STAGES = 4;
|
||||
static constexpr float COMPLETED_REDUCTION_RATE = 25.0f;
|
||||
static constexpr float MINIMUM_COMPLETED_PROGRESS = 200.0f;
|
||||
static constexpr float SUN_COMPLETION_FACTOR = 0.5f; // El sol completa su recorrido a la mitad del progreso total
|
||||
|
||||
// Configuración paramétrica
|
||||
const float total_progress_to_complete_;
|
||||
const float progress_per_stage_;
|
||||
const float sun_completion_progress_;
|
||||
|
||||
// Objetos y punteros
|
||||
SDL_Renderer *renderer_; // Renderizador de la ventana
|
||||
|
||||
@@ -81,28 +109,39 @@ class Background {
|
||||
SDL_Texture *canvas_; // Textura para componer el fondo
|
||||
SDL_Texture *color_texture_; // Textura para atenuar el fondo
|
||||
|
||||
// Variables de control
|
||||
std::array<SDL_FRect, 4> gradient_rect_;
|
||||
std::array<SDL_FRect, 4> top_clouds_rect_;
|
||||
std::array<SDL_FRect, 4> bottom_clouds_rect_;
|
||||
int gradient_number_ = 0;
|
||||
int alpha_ = 0;
|
||||
float clouds_speed_ = 0;
|
||||
float transition_ = 0;
|
||||
int counter_ = 0;
|
||||
SDL_FRect rect_;
|
||||
SDL_FRect src_rect_;
|
||||
SDL_FRect dst_rect_;
|
||||
int base_;
|
||||
Color attenuate_color_;
|
||||
int alpha_color_text_;
|
||||
int alpha_color_text_temp_;
|
||||
std::vector<SDL_FPoint> sun_path_;
|
||||
std::vector<SDL_FPoint> moon_path_;
|
||||
size_t sun_index_ = 0;
|
||||
size_t moon_index_ = 0;
|
||||
// Variables de estado y progresión
|
||||
State state_ = State::NORMAL;
|
||||
float progress_ = 0.0f; // Progresión interna (0 a total_progress_to_complete_)
|
||||
bool manual_mode_ = false; // Si está en modo manual, no actualiza automáticamente
|
||||
|
||||
// Variables de renderizado
|
||||
SDL_FRect rect_; // Tamaño del objeto
|
||||
SDL_FRect src_rect_; // Parte del objeto para copiar en pantalla
|
||||
SDL_FRect dst_rect_; // Posición en pantalla donde se copia el objeto
|
||||
std::array<SDL_FRect, STAGES> gradient_rect_; // Fondos degradados
|
||||
std::array<SDL_FRect, 4> top_clouds_rect_; // Nubes superiores
|
||||
std::array<SDL_FRect, 4> bottom_clouds_rect_; // Nubes inferiores
|
||||
Color attenuate_color_; // Color de atenuación
|
||||
|
||||
std::vector<SDL_FPoint> sun_path_; // Recorrido del sol
|
||||
std::vector<SDL_FPoint> moon_path_; // Recorrido de la luna
|
||||
|
||||
float clouds_speed_ = 0; // Velocidad de las nubes
|
||||
float transition_ = 0; // Porcentaje de transición
|
||||
|
||||
size_t gradient_number_ = 0; // Índice de fondo degradado
|
||||
size_t counter_ = 0; // Contador interno
|
||||
size_t alpha_color_texture_ = 0; // Transparencia de atenuación
|
||||
size_t previous_alpha_color_texture_ = 0; // Transparencia anterior
|
||||
size_t sun_index_ = 0; // Índice del recorrido del sol
|
||||
size_t moon_index_ = 0; // Índice del recorrido de la luna
|
||||
int base_ = 0; // Posición base del fondo
|
||||
|
||||
Uint8 alpha_ = 0; // Transparencia entre fases
|
||||
|
||||
// Métodos internos
|
||||
void updateProgression(); // Actualiza la progresión y calcula transiciones (solo si no está en modo manual)
|
||||
void updateCloudsSpeed(); // Actualiza la velocidad de las nubes según el estado
|
||||
void renderGradient(); // Dibuja el gradiente de fondo
|
||||
void renderTopClouds(); // Dibuja las nubes superiores
|
||||
void renderBottomClouds(); // Dibuja las nubes inferiores
|
||||
@@ -111,4 +150,4 @@ class Background {
|
||||
void updateClouds(); // Actualiza el movimiento de las nubes
|
||||
void createSunPath(); // Precalcula el recorrido del sol
|
||||
void createMoonPath(); // Precalcula el recorrido de la luna
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user