time-based: Game::update(dt_s) sense gate, propaga dt a totes les entitats i sub-comptadors (counter_/death/stage/time-stopped/enemy-deploy/shake/game-completed)
This commit is contained in:
+59
-31
@@ -38,6 +38,11 @@ class Game {
|
||||
void handleEvent(const SDL_Event *event); // Procesa un evento
|
||||
|
||||
private:
|
||||
// Branques de iterate() — separades per a reduir la complexitat cognitiva
|
||||
void iteratePaused();
|
||||
void iterateGameOver();
|
||||
void iteratePlaying(float dt_s);
|
||||
|
||||
// Cantidad de elementos a escribir en los ficheros de datos
|
||||
static constexpr int TOTAL_SCORE_DATA = 3;
|
||||
static constexpr int TOTAL_DEMO_DATA = 2000;
|
||||
@@ -141,10 +146,11 @@ class Game {
|
||||
DemoKeys data_file[TOTAL_DEMO_DATA]; // Datos del fichero con los movimientos para la demo
|
||||
};
|
||||
|
||||
void update(); // Actualiza el juego
|
||||
void render(); // Dibuja el juego
|
||||
void init(); // Inicializa las variables necesarias para la sección 'Game'
|
||||
void loadMedia(); // Carga los recursos necesarios para la sección 'Game'
|
||||
void update(); // Actualiza el juego (frame-based)
|
||||
void update(float dt_s); // Actualiza el juego (time-based)
|
||||
void render(); // Dibuja el juego
|
||||
void init(); // Inicializa las variables necesarias para la sección 'Game'
|
||||
void loadMedia(); // Carga los recursos necesarios para la sección 'Game'
|
||||
|
||||
auto loadScoreFile() -> bool; // Carga el fichero de puntos
|
||||
auto loadDemoFile() -> bool; // Carga el fichero de datos para la demo
|
||||
@@ -167,14 +173,18 @@ class Game {
|
||||
static auto updateScoreText(Uint32 num) -> std::string; // Transforma un valor numérico en una cadena de 6 cifras
|
||||
void renderScoreBoard(); // Pinta el marcador en pantalla usando un objeto texto
|
||||
|
||||
void updatePlayers(); // Actualiza las variables del jugador
|
||||
void renderPlayers(); // Dibuja a los jugadores
|
||||
void updatePlayers(); // Actualiza las variables del jugador (frame-based)
|
||||
void updatePlayers(float dt_s); // Actualiza las variables del jugador (time-based)
|
||||
void renderPlayers(); // Dibuja a los jugadores
|
||||
|
||||
void updateStage(); // Actualiza las variables de la fase
|
||||
void updateDeath(); // Actualiza el estado de muerte
|
||||
void updateStage(); // Actualiza las variables de la fase (frame-based)
|
||||
void updateStage(float dt_s); // Actualiza las variables de la fase (time-based)
|
||||
void updateDeath(); // Actualiza el estado de muerte (frame-based)
|
||||
void updateDeath(float dt_s); // Actualiza el estado de muerte (time-based)
|
||||
void renderDeathFade(int counter); // Renderiza el fade final cuando se acaba la partida
|
||||
|
||||
void updateBalloons(); // Actualiza los globos
|
||||
void updateBalloons(); // Actualiza los globos (frame-based)
|
||||
void updateBalloons(float dt_s); // Actualiza los globos (time-based)
|
||||
void renderBalloons(); // Pinta en pantalla todos los globos activos
|
||||
auto createBalloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer) -> Uint8; // Crea un globo nuevo en el vector de globos
|
||||
void createPowerBall(); // Crea una PowerBall
|
||||
@@ -193,12 +203,14 @@ class Game {
|
||||
void checkBulletBalloonCollision(); // Comprueba la colisión entre las balas y los globos
|
||||
void resolveBulletBalloonHit(Bullet *bullet, Balloon *balloon); // Resuelve un impacto bala-globo (helper de checkBulletBalloonCollision)
|
||||
|
||||
void moveBullets(); // Mueve las balas activas
|
||||
void moveBullets(); // Mueve las balas activas (frame-based)
|
||||
void moveBullets(float dt_s); // Mueve las balas activas (time-based)
|
||||
void renderBullets(); // Pinta las balas activas
|
||||
void createBullet(int x, int y, Bullet::Kind kind, bool powered_up, int owner); // Crea un objeto bala
|
||||
void freeBullets(); // Vacia el vector de balas
|
||||
|
||||
void updateItems(); // Actualiza los items
|
||||
void updateItems(); // Actualiza los items (frame-based)
|
||||
void updateItems(float dt_s); // Actualiza los items (time-based)
|
||||
void renderItems(); // Pinta los items activos
|
||||
auto dropItem() -> Item::Id; // Devuelve un item en función del azar
|
||||
void createItem(Item::Id kind, float x, float y); // Crea un objeto item
|
||||
@@ -207,11 +219,13 @@ class Game {
|
||||
void createItemScoreSprite(int x, int y, const SmartSprite *sprite); // Crea un objeto SmartSprite
|
||||
void freeSmartSprites(); // Vacia el vector de smartsprites
|
||||
|
||||
void renderFlashEffect(); // Dibuja el efecto de flash
|
||||
void updateShakeEffect(); // Actualiza el efecto de agitar la pantalla
|
||||
void throwCoffee(int x, int y); // Crea un SmartSprite para arrojar el item café al recibir un impacto
|
||||
void updateSmartSprites(); // Actualiza los SmartSprites
|
||||
void renderSmartSprites(); // Pinta los SmartSprites activos
|
||||
void renderFlashEffect(); // Dibuja el efecto de flash
|
||||
void updateShakeEffect(); // Actualiza el efecto de agitar la pantalla (frame-based)
|
||||
void updateShakeEffect(float dt_s); // Actualiza el efecto de agitar la pantalla (time-based)
|
||||
void throwCoffee(int x, int y); // Crea un SmartSprite para arrojar el item café al recibir un impacto
|
||||
void updateSmartSprites(); // Actualiza los SmartSprites (frame-based)
|
||||
void updateSmartSprites(float dt_s); // Actualiza los SmartSprites (time-based)
|
||||
void renderSmartSprites(); // Pinta los SmartSprites activos
|
||||
|
||||
void killPlayer(Player *player); // Acciones a realizar cuando el jugador muere
|
||||
void evaluateAndSetMenace(); // Calcula y establece el valor de amenaza en funcion de los globos activos
|
||||
@@ -222,11 +236,14 @@ class Game {
|
||||
void setTimeStoppedCounter(Uint16 value); // Establece el valor de la variable
|
||||
void incTimeStoppedCounter(Uint16 value); // Incrementa el valor de la variable
|
||||
|
||||
void updateEnemyDeployCounter(); // Actualiza la variable EnemyDeployCounter
|
||||
void updateTimeStoppedCounter(); // Actualiza y comprueba el valor de la variable
|
||||
void updateMenace(); // Gestiona el nivel de amenaza
|
||||
void updateBackground(); // Actualiza el fondo
|
||||
void renderBackground(); // Dibuja el fondo
|
||||
void updateEnemyDeployCounter(); // Actualiza la variable EnemyDeployCounter (frame-based)
|
||||
void updateEnemyDeployCounter(float dt_s); // Actualiza la variable EnemyDeployCounter (time-based)
|
||||
void updateTimeStoppedCounter(); // Actualiza y comprueba el valor de la variable (frame-based)
|
||||
void updateTimeStoppedCounter(float dt_s); // Actualiza y comprueba el valor de la variable (time-based)
|
||||
void updateMenace(); // Gestiona el nivel de amenaza
|
||||
void updateBackground(); // Actualiza el fondo (frame-based)
|
||||
void updateBackground(float dt_s); // Actualiza el fondo (time-based)
|
||||
void renderBackground(); // Dibuja el fondo
|
||||
|
||||
void checkGameInput(); // Gestiona la entrada durante el juego
|
||||
void processDemoInput(); // Helper de checkGameInput
|
||||
@@ -254,8 +271,10 @@ class Game {
|
||||
auto canPowerBallBeCreated() -> bool; // Indica si se puede crear una powerball
|
||||
auto calculateScreenPower() -> int; // Calcula el poder actual de los globos en pantalla
|
||||
void initPaths(); // Inicializa las variables que contienen puntos de ruta para mover objetos
|
||||
void updateGameCompleted(); // Actualiza el tramo final de juego, una vez completado
|
||||
void updateHelper(); // Actualiza las variables de ayuda
|
||||
void updateGameCompleted(); // Actualiza el tramo final de juego (frame-based)
|
||||
void updateGameCompleted(float dt_s); // Actualiza el tramo final de juego (time-based)
|
||||
void updateHelper(); // Actualiza las variables de ayuda (frame-based)
|
||||
void updateHelper(float dt_s); // Actualiza las variables de ayuda (time-based)
|
||||
auto allPlayersAreDead() -> bool; // Comprueba si todos los jugadores han muerto
|
||||
void deleteAllVectorObjects(); // Elimina todos los objetos contenidos en vectores
|
||||
void setHiScore(); // Establece la máxima puntuación desde fichero o desde las puntuaciones online
|
||||
@@ -337,30 +356,38 @@ class Game {
|
||||
|
||||
// Variables
|
||||
int num_players_; // Numero de jugadores
|
||||
Uint32 ticks_; // Contador de ticks para ajustar la velocidad del programa
|
||||
Uint8 ticks_speed_; // Velocidad a la que se repiten los bucles del programa
|
||||
Uint32 ticks_; // Contador de ticks para ajustar la velocidad del programa (frame-based)
|
||||
Uint8 ticks_speed_; // Velocidad a la que se repiten los bucles del programa (frame-based)
|
||||
float elapsed_s_{0.0F}; // Acumulador global de temps de joc (time-based)
|
||||
Uint32 hi_score_; // Puntuación máxima
|
||||
bool hi_score_achieved_; // Indica si se ha superado la puntuación máxima
|
||||
std::string hi_score_name_; // Nombre del jugador que ostenta la máxima puntuación
|
||||
Stage stage_[10]; // Variable con los datos de cada pantalla
|
||||
Uint8 current_stage_; // Indica la fase actual
|
||||
Uint8 stage_bitmap_counter_; // Contador para el tiempo visible del texto de Stage
|
||||
Uint8 stage_bitmap_counter_; // Contador para el tiempo visible del texto de Stage (frame-based)
|
||||
float stage_bitmap_counter_s_{0.0F}; // Contador (time-based)
|
||||
float stage_bitmap_path_[STAGE_COUNTER]; // Vector con los puntos Y por donde se desplaza el texto
|
||||
float get_ready_bitmap_path_[STAGE_COUNTER]; // Vector con los puntos X por donde se desplaza el texto
|
||||
Uint16 death_counter_; // Contador para la animación de muerte del jugador
|
||||
Uint16 death_counter_; // Contador para la animación de muerte del jugador (frame-based)
|
||||
float death_counter_s_{0.0F}; // Contador (time-based)
|
||||
Uint8 menace_current_; // Nivel de amenaza actual
|
||||
Uint8 menace_threshold_; // Umbral del nivel de amenaza. Si el nivel de amenaza cae por debajo del umbral, se generan más globos. Si el umbral aumenta, aumenta el numero de globos
|
||||
bool time_stopped_; // Indica si el tiempo está detenido
|
||||
Uint16 time_stopped_counter_; // Temporizador para llevar la cuenta del tiempo detenido
|
||||
Uint32 counter_; // Contador para el juego
|
||||
Uint16 time_stopped_counter_; // Temporizador (frame-based)
|
||||
float time_stopped_counter_s_{0.0F}; // Temporizador (time-based)
|
||||
Uint32 counter_; // Contador para el juego (frame-based, derivat de elapsed_s_*60 en time-based)
|
||||
Uint32 score_data_file_[TOTAL_SCORE_DATA]; // Datos del fichero de puntos
|
||||
SDL_Rect sky_colors_rect_[4]; // Vector con las coordenadas de los 4 colores de cielo
|
||||
Uint16 balloons_popped_; // Lleva la cuenta de los globos explotados
|
||||
Uint8 last_enemy_deploy_; // Guarda cual ha sido la última formación desplegada para no repetir;
|
||||
int enemy_deploy_counter_; // Cuando se lanza una formación, se le da un valor y no sale otra hasta que llegue a cero
|
||||
int enemy_deploy_counter_; // Cuando se lanza una formación, se le da un valor y no sale otra hasta que llegue a cero (frame-based)
|
||||
float enemy_deploy_counter_s_{0.0F}; // Comptador (time-based)
|
||||
float enemy_speed_; // Velocidad a la que se mueven los enemigos
|
||||
float default_enemy_speed_; // Velocidad base de los enemigos, sin incrementar
|
||||
Effect effect_; // Variable para gestionar los efectos visuales
|
||||
float shake_phase_s_{0.0F}; // Acumulador per decrementar shake_counter a 60Hz (time-based)
|
||||
float helper_counter_s_{0.0F}; // Acumulador per al comptador helper_.counter (time-based)
|
||||
float enemy_deploy_phase_s_{0.0F}; // Acumulador per al decrement de enemy_deploy_counter_ (time-based)
|
||||
DeathShake death_shake_; // Variable para gestionar el efecto de agitación intensa
|
||||
DeathSequence death_sequence_; // Variable para gestionar la secuencia de muerte
|
||||
Helper helper_; // Variable para gestionar las ayudas
|
||||
@@ -368,7 +395,8 @@ class Game {
|
||||
Uint8 power_ball_counter_; // Contador de formaciones enemigas entre la aparicion de una PowerBall y otra
|
||||
bool coffee_machine_enabled_; // Indica si hay una máquina de café en el terreno de juego
|
||||
bool game_completed_; // Indica si se ha completado la partida, llegando al final de la ultima pantalla
|
||||
int game_completed_counter_; // Contador para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos
|
||||
int game_completed_counter_; // Contador per al tram final (frame-based)
|
||||
float game_completed_counter_s_{0.0F}; // Comptador (time-based)
|
||||
Uint8 difficulty_; // Dificultad del juego
|
||||
float difficulty_score_multiplier_; // Multiplicador de puntos en función de la dificultad
|
||||
Color difficulty_color_; // Color asociado a la dificultad
|
||||
|
||||
Reference in New Issue
Block a user