diff --git a/data/config/param_320x240.txt b/data/config/param_320x240.txt index cfe7e49..30e4496 100644 --- a/data/config/param_320x240.txt +++ b/data/config/param_320x240.txt @@ -1,21 +1,22 @@ ## --- GAME --- -game.item_size 20 # Tamaño de los items del juego (en píxeles) -game.width 320 # Ancho de la resolución nativa del juego (en píxeles) -game.height 240 # Alto de la resolución nativa del juego (en píxeles) -game.play_area.rect.x 0 # Posición X de la zona jugable -game.play_area.rect.y 0 # Posición Y de la zona jugable -game.play_area.rect.w 320 # Ancho de la zona jugable -game.play_area.rect.h 200 # Alto de la zona jugable -game.enter_name_seconds 10 # Segundos para introducir el nombre al finalizar la partida si no se pulsa nada +game.item_size 20 # Tamaño de los items del juego (en píxeles) +game.width 320 # Ancho de la resolución nativa del juego (en píxeles) +game.height 240 # Alto de la resolución nativa del juego (en píxeles) +game.play_area.rect.x 0 # Posición X de la zona jugable +game.play_area.rect.y 0 # Posición Y de la zona jugable +game.play_area.rect.w 320 # Ancho de la zona jugable +game.play_area.rect.h 200 # Alto de la zona jugable +game.name_entry_idle_time 10 # Segundos para introducir el nombre al finalizar la partida si no se pulsa nada +game.name_entry_total_time 60 # Segundos totales para introducir el nombre al finalizar la partida ## --- FADE --- -fade.color 1F2B30 # Color hexadecimal para el efecto de fundido -fade.num_squares_width 160 # Número de cuadrados en el eje X para el fundido -fade.num_squares_height 120 # Número de cuadrados en el eje Y para el fundido -fade.random_squares_delay 1 # Delay entre aparición de cuadrados aleatorios (frames) -fade.random_squares_mult 500 # Multiplicador para la velocidad de aparición aleatoria -fade.post_duration 80 # Duración tras el fundido (frames) -fade.venetian_size 12 # Tamaño de las bandas para el efecto veneciano (en píxeles) +fade.color 1F2B30 # Color hexadecimal para el efecto de fundido +fade.num_squares_width 160 # Número de cuadrados en el eje X para el fundido +fade.num_squares_height 120 # Número de cuadrados en el eje Y para el fundido +fade.random_squares_delay 1 # Delay entre aparición de cuadrados aleatorios (frames) +fade.random_squares_mult 500 # Multiplicador para la velocidad de aparición aleatoria +fade.post_duration 80 # Duración tras el fundido (frames) +fade.venetian_size 12 # Tamaño de las bandas para el efecto veneciano (en píxeles) ## --- SCOREBOARD --- scoreboard.rect.x 0 # Posición X del marcador diff --git a/data/config/param_320x256.txt b/data/config/param_320x256.txt index 0cdf460..b27ac6f 100644 --- a/data/config/param_320x256.txt +++ b/data/config/param_320x256.txt @@ -1,21 +1,22 @@ ## --- GAME --- -game.item_size 20 # Tamaño de los items del juego (en píxeles) -game.width 320 # Ancho de la resolución nativa del juego (en píxeles) -game.height 256 # Alto de la resolución nativa del juego (en píxeles) -game.play_area.rect.x 0 # Posición X de la zona jugable -game.play_area.rect.y 0 # Posición Y de la zona jugable -game.play_area.rect.w 320 # Ancho de la zona jugable -game.play_area.rect.h 216 # Alto de la zona jugable -game.enter_name_seconds 10 # Segundos para introducir el nombre al finalizar la partida si no se pulsa nada +game.item_size 20 # Tamaño de los items del juego (en píxeles) +game.width 320 # Ancho de la resolución nativa del juego (en píxeles) +game.height 256 # Alto de la resolución nativa del juego (en píxeles) +game.play_area.rect.x 0 # Posición X de la zona jugable +game.play_area.rect.y 0 # Posición Y de la zona jugable +game.play_area.rect.w 320 # Ancho de la zona jugable +game.play_area.rect.h 216 # Alto de la zona jugable +game.name_entry_idle_time 10 # Segundos para introducir el nombre al finalizar la partida si no se pulsa nada +game.name_entry_total_time 60 # Segundos totales para introducir el nombre al finalizar la partida ## --- FADE --- -fade.color 1F2B30 # Color hexadecimal para el efecto de fundido -fade.num_squares_width 160 # Número de cuadrados en el eje X para el fundido -fade.num_squares_height 128 # Número de cuadrados en el eje Y para el fundido -fade.random_squares_delay 1 # Delay entre aparición de cuadrados aleatorios (frames) -fade.random_squares_mult 500 # Multiplicador para la velocidad de aparición aleatoria -fade.post_duration 80 # Duración tras el fundido (frames) -fade.venetian_size 12 # Tamaño de las bandas para el efecto veneciano (en píxeles) +fade.color 1F2B30 # Color hexadecimal para el efecto de fundido +fade.num_squares_width 160 # Número de cuadrados en el eje X para el fundido +fade.num_squares_height 128 # Número de cuadrados en el eje Y para el fundido +fade.random_squares_delay 1 # Delay entre aparición de cuadrados aleatorios (frames) +fade.random_squares_mult 500 # Multiplicador para la velocidad de aparición aleatoria +fade.post_duration 80 # Duración tras el fundido (frames) +fade.venetian_size 12 # Tamaño de las bandas para el efecto veneciano (en píxeles) ## --- SCOREBOARD --- scoreboard.rect.x 0 # Posición X del marcador diff --git a/source/param.cpp b/source/param.cpp index c8a4d9c..d854e7a 100644 --- a/source/param.cpp +++ b/source/param.cpp @@ -23,7 +23,8 @@ void initParam() param.game.item_size = 20; param.game.game_area.rect = {0, 0, param.game.width, param.game.height}; param.game.play_area.rect = {0, 0, param.game.width, 216}; - param.game.enter_name_seconds = 30; + param.game.name_entry_idle_time = 10; + param.game.name_entry_total_time = 60; param.game.speed = 15; precalculateZones(); @@ -155,9 +156,14 @@ bool setParams(const std::string &var, const std::string &value) param.game.play_area.rect.h = std::stoi(value); } - else if (var == "game.enter_name_seconds") + else if (var == "game.name_entry_idle_time") { - param.game.enter_name_seconds = std::stoi(value); + param.game.name_entry_idle_time = std::stoi(value); + } + + else if (var == "game.name_entry_total_time") + { + param.game.name_entry_total_time = std::stoi(value); } // FADE diff --git a/source/param.h b/source/param.h index 10dbcf4..fca3411 100644 --- a/source/param.h +++ b/source/param.h @@ -9,13 +9,14 @@ // --- Parámetros del juego --- struct ParamGame { - float width; // Ancho de la resolución nativa del juego - float height; // Alto de la resolución nativa del juego - float item_size; // Tamaño de los ítems del juego - Zone play_area; // Rectángulo con la posición de la zona de juego - Zone game_area; // Rectángulo con las dimensiones del juego - int enter_name_seconds; // Duración en segundos para introducir el nombre al finalizar la partida - Uint32 speed; // Velocidad a la que transcurre el juego + float width; // Ancho de la resolución nativa del juego + float height; // Alto de la resolución nativa del juego + float item_size; // Tamaño de los ítems del juego + Zone play_area; // Rectángulo con la posición de la zona de juego + Zone game_area; // Rectángulo con las dimensiones del juego + int name_entry_idle_time; // Segundos para introducir el nombre al finalizar la partida si no se pulsa nada + int name_entry_total_time; // Segundos totales para introducir el nombre al finalizar la partida + Uint32 speed; // Velocidad a la que transcurre el juego }; // --- Parámetros del fade --- diff --git a/source/player.cpp b/source/player.cpp index 46811ef..e1408d8 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -1,20 +1,19 @@ #include "player.h" -#include // Para SDL_FlipMode -#include // Para SDL_GetTicks -#include // Para rand -#include // Para clamp, max, min -#include // Para array -#include "animated_sprite.h" // Para AnimatedSprite -#include "input.h" // Para InputAction -#include "audio.h" // Para JA_PlaySound -#include "param.h" // Para Param, ParamGame, param -#include "resource.h" // Para Resource -#include "scoreboard.h" // Para Scoreboard, ScoreboardMode -#include "stage.h" // Para power_can_be_added -#include "texture.h" // Para Texture +#include // Para SDL_FlipMode +#include // Para SDL_GetTicks +#include // Para rand +#include // Para clamp, max, min +#include // Para array +#include "animated_sprite.h" // Para AnimatedSprite +#include "input.h" // Para InputAction +#include "audio.h" // Para JA_PlaySound +#include "param.h" // Para Param, ParamGame, param +#include "resource.h" // Para Resource +#include "scoreboard.h" // Para Scoreboard, ScoreboardMode +#include "stage.h" // Para power_can_be_added +#include "texture.h" // Para Texture #include "manage_hiscore_table.h" // Para ManageHiScoreTable, HiScoreEntry - // Constructor Player::Player(int id, float x, int y, bool demo, SDL_FRect &play_area, std::vector> texture, const std::vector> &animations) : player_sprite_(std::make_unique(texture[0], animations[0])), @@ -53,8 +52,9 @@ void Player::init() coffees_ = 0; continue_ticks_ = 0; continue_counter_ = 10; - enter_name_ticks_ = 0; - enter_name_counter_ = param.game.enter_name_seconds; + name_entry_ticks_ = 0; + name_entry_idle_counter_ = 0; + name_entry_total_counter_ = 0; shiftColliders(); vel_x_ = 0; vel_y_ = 0; @@ -156,6 +156,7 @@ void Player::setInputEnteringName(InputAction input) default: break; } + name_entry_idle_counter_ = 0; } // Mueve el jugador a la posición y animación que le corresponde @@ -738,9 +739,9 @@ void Player::updateEnterNameCounter() if (playing_state_ == PlayerState::ENTERING_NAME || playing_state_ == PlayerState::ENTERING_NAME_GAME_COMPLETED) { constexpr int TICKS_SPEED = 1000; - if (SDL_GetTicks() - enter_name_ticks_ > TICKS_SPEED) + if (SDL_GetTicks() - name_entry_ticks_ > TICKS_SPEED) { - decEnterNameCounter(); + decNameEntryCounter(); } } } @@ -751,7 +752,7 @@ void Player::updateShowingName() if (playing_state_ == PlayerState::SHOWING_NAME) { constexpr int TICKS_SPEED = 5000; - if (SDL_GetTicks() - enter_name_ticks_ > TICKS_SPEED) + if (SDL_GetTicks() - name_entry_ticks_ > TICKS_SPEED) { game_completed_ ? setPlayingState(PlayerState::LEAVING_SCREEN) : setPlayingState(PlayerState::CONTINUE); } @@ -774,13 +775,20 @@ void Player::decContinueCounter() } // Decrementa el contador de entrar nombre -void Player::decEnterNameCounter() +void Player::decNameEntryCounter() { - enter_name_ticks_ = SDL_GetTicks(); - --enter_name_counter_; - if (enter_name_counter_ < 0) + name_entry_ticks_ = SDL_GetTicks(); + + // Actualiza contadores + ++name_entry_idle_counter_; + ++name_entry_total_counter_; + + // Comprueba los contadores + if ((name_entry_total_counter_ >= param.game.name_entry_total_time) || + (name_entry_idle_counter_ >= param.game.name_entry_idle_time)) { - enter_name_counter_ = param.game.enter_name_seconds; + name_entry_total_counter_ = 0; + name_entry_idle_counter_ = 0; if (playing_state_ == PlayerState::ENTERING_NAME) { last_enter_name_ = getRecordName(); diff --git a/source/player.h b/source/player.h index 7cfc035..f0761b1 100644 --- a/source/player.h +++ b/source/player.h @@ -191,9 +191,10 @@ private: int scoreboard_panel_ = 0; // Panel del marcador asociado al jugador std::string name_; // Nombre del jugador int controller_index_ = 0; // Índice del array de mandos que utilizará para moverse - bool demo_; // Para que el jugador sepa si está en el modo demostración - int enter_name_counter_; // Contador para poner nombre - Uint32 enter_name_ticks_ = 0; // Variable para poder cambiar el contador de poner nombre en función del tiempo + bool demo_ = false; // Para que el jugador sepa si está en el modo demostración + int name_entry_idle_counter_ = 0; // Contador para poner nombre + int name_entry_total_counter_ = 0; // Segundos totales que lleva acumulados poniendo nombre + Uint32 name_entry_ticks_ = 0; // Variable para poder cambiar el contador de poner nombre en función del tiempo Uint32 showing_name_ticks_ = 0; // Tiempo en el que se entra al estado SHOWING_NAME int step_counter_ = 0; // Cuenta los pasos para los estados en los que camina automáticamente bool game_completed_ = false; // Indica si ha completado el juego @@ -207,10 +208,10 @@ private: void updateContinueCounter(); // Actualiza el contador de continue void updateEnterNameCounter(); // Actualiza el contador de entrar nombre void updateShowingName(); // Actualiza el estado SHOWING_NAME - void decEnterNameCounter(); // Decrementa el contador de entrar nombre + void decNameEntryCounter(); // Decrementa el contador de entrar nombre void updateScoreboard(); // Actualiza el panel del marcador void setScoreboardMode(ScoreboardMode mode); // Cambia el modo del marcador - void playSound(const std::string &name); // Hace sonar un sonido + void playSound(const std::string &name); // Hace sonar un sonido bool isRenderable() const { return !isWaiting() && !isGameOver(); } void addScoreToScoreBoard(); // Añade una puntuación a la tabla de records }; \ No newline at end of file