Compare commits

4 Commits

17 changed files with 141 additions and 148 deletions

View File

@@ -7,6 +7,7 @@ game.play_area.rect.y 0 # Rectangulo con la posición de la zona de juego
game.play_area.rect.w 320 # Rectangulo con la posición de la zona de juego game.play_area.rect.w 320 # Rectangulo con la posición de la zona de juego
game.play_area.rect.h 216 # Rectangulo con la posición de la zona de juego game.play_area.rect.h 216 # Rectangulo con la posición de la zona de juego
game.enter_name_seconds 30 # Duración en segundos para introducir el nombre al finalizar la partida game.enter_name_seconds 30 # Duración en segundos para introducir el nombre al finalizar la partida
game.game_text.dest_y
## FADE ## FADE
fade.num_squares_width 160 fade.num_squares_width 160

Binary file not shown.

Before

Width:  |  Height:  |  Size: 337 B

After

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 376 B

After

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 B

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 487 B

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 580 B

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 B

After

Width:  |  Height:  |  Size: 176 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 B

After

Width:  |  Height:  |  Size: 172 B

View File

@@ -84,13 +84,22 @@ Director::Director(int argc, const char *argv[])
#ifdef ANBERNIC #ifdef ANBERNIC
const std::string paramFilePath = asset->get("param_320x240.txt"); const std::string paramFilePath = asset->get("param_320x240.txt");
#else #else
const std::string paramFilePath = param_file_argument_ == "--320x240" ? Asset::get()->get("param_320x240.txt") : Asset::get()->get("param_320x256.txt"); const std::string paramFilePath = overrides.param_file == "--320x240" ? Asset::get()->get("param_320x240.txt") : Asset::get()->get("param_320x256.txt");
#endif #endif
loadParams(paramFilePath); loadParams(paramFilePath);
// Carga el fichero de puntuaciones // Carga el fichero de puntuaciones
auto manager = std::make_unique<ManageHiScoreTable>(&options.game.hi_score_table); {
auto manager = std::make_unique<ManageHiScoreTable>(options.game.hi_score_table);
if (overrides.clear_hi_score_table)
{
manager->clear();
}
else
{
manager->loadFromFile(Asset::get()->get("score.bin")); manager->loadFromFile(Asset::get()->get("score.bin"));
}
}
// Inicializa SDL // Inicializa SDL
initSDL(); initSDL();
@@ -513,18 +522,33 @@ void Director::loadParams(const std::string &file_path)
// Comprueba los parametros del programa // Comprueba los parametros del programa
void Director::checkProgramArguments(int argc, const char *argv[]) void Director::checkProgramArguments(int argc, const char *argv[])
{ {
const std::vector<std::string> argument_list = {"--h", "--320x240", "--clear_score"};
// Establece la ruta del programa // Establece la ruta del programa
executable_path_ = argv[0]; executable_path_ = argv[0];
// Valores por defecto
param_file_argument_.clear();
// Comprueba el resto de parámetros // Comprueba el resto de parámetros
for (int i = 1; i < argc; ++i) for (int i = 1; i < argc; ++i)
{ {
if (strcmp(argv[i], "--h") == 0)
{
for (const auto &argument : argument_list)
{
std::cout << argument << std::endl;
}
// std::exit(EXIT_SUCCESS);
section::name = section::Name::QUIT;
section::options = section::Options::QUIT_FROM_EVENT;
}
if (strcmp(argv[i], "--320x240") == 0) if (strcmp(argv[i], "--320x240") == 0)
{ {
param_file_argument_ = argv[i]; overrides.param_file = argv[i];
}
if (strcmp(argv[i], "--clear_score") == 0)
{
overrides.clear_hi_score_table = true;
} }
} }
} }

View File

@@ -25,7 +25,6 @@ private:
// Variables // Variables
std::string executable_path_; // Path del ejecutable std::string executable_path_; // Path del ejecutable
std::string system_folder_; // Carpeta del sistema donde guardar datos std::string system_folder_; // Carpeta del sistema donde guardar datos
std::string param_file_argument_; // Argumento para gestionar el fichero con los parametros del programa
// Inicializa jail_audio // Inicializa jail_audio
void initJailAudio(); void initJailAudio();

View File

@@ -64,8 +64,8 @@ Game::Game(int player_id, int current_stage, bool demo)
explosions_ = std::make_unique<Explosions>(); explosions_ = std::make_unique<Explosions>();
balloon_formations_ = std::make_unique<BalloonFormations>(); balloon_formations_ = std::make_unique<BalloonFormations>();
// Carga los recursos // Asigna los recursos a variables privadas del objeto
loadMedia(); setResources();
// Inicializa los vectores con los datos para la demo // Inicializa los vectores con los datos para la demo
if (demo_.enabled) if (demo_.enabled)
@@ -86,39 +86,6 @@ Game::Game(int player_id, int current_stage, bool demo)
canvas_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param.game.play_area.rect.w, param.game.play_area.rect.h); canvas_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param.game.play_area.rect.w, param.game.play_area.rect.h);
SDL_SetTextureBlendMode(canvas_, SDL_BLENDMODE_BLEND); SDL_SetTextureBlendMode(canvas_, SDL_BLENDMODE_BLEND);
// Inicializa las variables necesarias para la sección 'Game'
init(player_id);
}
Game::~Game()
{
// Guarda las puntuaciones en un fichero
if (!demo_.enabled)
{
auto manager = std::make_unique<ManageHiScoreTable>(&options.game.hi_score_table);
manager->saveToFile(asset_->get("score.bin"));
}
#ifdef RECORDING
saveDemoFile(Asset::get()->get("demo1.bin"), demo_.data.at(0));
#endif
// Elimina todos los objetos contenidos en vectores
deleteAllVectorObjects();
// Libera los recursos
unloadMedia();
Scoreboard::destroy();
SDL_DestroyTexture(canvas_);
}
// Inicializa las variables necesarias para la sección 'Game'
void Game::init(int player_id)
{
// Elimina qualquier jugador que hubiese antes de crear los nuevos
players_.clear();
// Crea los dos jugadores // Crea los dos jugadores
auto player1 = std::make_unique<Player>(1, (param.game.play_area.first_quarter_x * ((0 * 2) + 1)) - 11, param.game.play_area.rect.h - 30, demo_.enabled, &param.game.play_area.rect, player_textures_[0], player_animations_); auto player1 = std::make_unique<Player>(1, (param.game.play_area.first_quarter_x * ((0 * 2) + 1)) - 11, param.game.play_area.rect.h - 30, demo_.enabled, &param.game.play_area.rect, player_textures_[0], player_animations_);
player1->setScoreBoardPanel(SCOREBOARD_LEFT_PANEL); player1->setScoreBoardPanel(SCOREBOARD_LEFT_PANEL);
@@ -134,14 +101,12 @@ void Game::init(int player_id)
player2->setController(controller2); player2->setController(controller2);
players_.push_back(std::move(player2)); players_.push_back(std::move(player2));
// Obtiene mediante "playerID" el jugador que va a empezar jugar // Activa el jugador que coincide con el "player_id"
auto main_player = getPlayer(player_id); {
auto player = getPlayer(player_id);
// Cambia el estado del jugador seleccionado player->setStatusPlaying(PlayerStatus::PLAYING);
main_player->setStatusPlaying(PlayerStatus::PLAYING); player->setInvulnerable(false);
}
// Como es el principio del juego, empieza sin inmunidad
main_player->setInvulnerable(false);
// Variables relacionadas con la dificultad // Variables relacionadas con la dificultad
switch (difficulty_) switch (difficulty_)
@@ -150,8 +115,7 @@ void Game::init(int player_id)
{ {
default_balloon_speed_ = BALLOON_SPEED_1; default_balloon_speed_ = BALLOON_SPEED_1;
difficulty_score_multiplier_ = 0.5f; difficulty_score_multiplier_ = 0.5f;
difficulty_color_ = difficulty_easy_color; scoreboard_->setColor(scoreboard_easy_color);
scoreboard_->setColor(difficulty_color_);
break; break;
} }
@@ -159,8 +123,7 @@ void Game::init(int player_id)
{ {
default_balloon_speed_ = BALLOON_SPEED_1; default_balloon_speed_ = BALLOON_SPEED_1;
difficulty_score_multiplier_ = 1.0f; difficulty_score_multiplier_ = 1.0f;
difficulty_color_ = difficulty_normal_color; scoreboard_->setColor(scoreboard_normal_color);
scoreboard_->setColor(scoreboard_color);
break; break;
} }
@@ -168,8 +131,7 @@ void Game::init(int player_id)
{ {
default_balloon_speed_ = BALLOON_SPEED_5; default_balloon_speed_ = BALLOON_SPEED_5;
difficulty_score_multiplier_ = 1.5f; difficulty_score_multiplier_ = 1.5f;
difficulty_color_ = difficulty_hard_color; scoreboard_->setColor(scoreboard_hard_color);
scoreboard_->setColor(difficulty_color_);
break; break;
} }
@@ -299,11 +261,26 @@ void Game::init(int player_id)
smart_sprites_.clear(); smart_sprites_.clear();
} }
// Carga los recursos necesarios para la sección 'Game' Game::~Game()
void Game::loadMedia()
{ {
unloadMedia(); // Guarda las puntuaciones en un fichero
if (!demo_.enabled)
{
auto manager = std::make_unique<ManageHiScoreTable>(options.game.hi_score_table);
manager->saveToFile(asset_->get("score.bin"));
}
#ifdef RECORDING
saveDemoFile(Asset::get()->get("demo1.bin"), demo_.data.at(0));
#endif
Scoreboard::destroy();
SDL_DestroyTexture(canvas_);
}
// Asigna los recursos a variables privadas del objeto
void Game::setResources()
{
// Texturas // Texturas
{ {
bullet_texture_ = Resource::get()->getTexture("bullet.png"); bullet_texture_ = Resource::get()->getTexture("bullet.png");
@@ -403,23 +380,6 @@ void Game::loadMedia()
} }
} }
// Libera los recursos previamente cargados
void Game::unloadMedia()
{
// Texturas
game_text_textures_.clear();
balloon_textures_.clear();
explosions_textures_.clear();
item_textures_.clear();
player_textures_.clear();
// Animaciones
player_animations_.clear();
balloon_animations_.clear();
explosions_animations_.clear();
item_animations_.clear();
}
// Crea una formación de enemigos // Crea una formación de enemigos
void Game::deployBalloonFormation() void Game::deployBalloonFormation()
{ {
@@ -1945,16 +1905,6 @@ void Game::checkEvents()
} }
} }
// Elimina todos los objetos contenidos en vectores
void Game::deleteAllVectorObjects()
{
players_.clear();
balloons_.clear();
bullets_.clear();
items_.clear();
smart_sprites_.clear();
}
// Recarga las texturas // Recarga las texturas
void Game::reloadTextures() void Game::reloadTextures()
{ {
@@ -2014,8 +1964,8 @@ void Game::pause(bool value)
// Añade una puntuación a la tabla de records // Añade una puntuación a la tabla de records
void Game::addScoreToScoreBoard(const std::string &name, int score) void Game::addScoreToScoreBoard(const std::string &name, int score)
{ {
const auto entry = (HiScoreEntry){trim(name), score}; const auto entry = HiScoreEntry(trim(name), score);
auto manager = std::make_unique<ManageHiScoreTable>(&options.game.hi_score_table); auto manager = std::make_unique<ManageHiScoreTable>(options.game.hi_score_table);
manager->add(entry); manager->add(entry);
manager->saveToFile(asset_->get("score.bin")); manager->saveToFile(asset_->get("score.bin"));
} }

View File

@@ -76,6 +76,12 @@ private:
int item_clock_odds; // Probabilidad de aparición del objeto int item_clock_odds; // Probabilidad de aparición del objeto
int item_coffee_odds; // Probabilidad de aparición del objeto int item_coffee_odds; // Probabilidad de aparición del objeto
int item_coffee_machine_odds; // Probabilidad de aparición del objeto int item_coffee_machine_odds; // Probabilidad de aparición del objeto
// Constructor con valores predeterminados
Helper(bool nc = false, bool ncm = false, bool npb = false, int c = 0, int ido = 0, int igo = 0, int ipo = 0, int ico = 0, int icoffo = 0, int icmo = 0)
: need_coffee(nc), need_coffee_machine(ncm), need_power_ball(npb), counter(c),
item_disk_odds(ido), item_gavina_odds(igo), item_pacmar_odds(ipo), item_clock_odds(ico),
item_coffee_odds(icoffo), item_coffee_machine_odds(icmo) {}
}; };
// Constantes // Constantes
@@ -164,7 +170,6 @@ private:
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 para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos
GameDifficulty difficulty_; // Dificultad del juego GameDifficulty difficulty_; // Dificultad del juego
float difficulty_score_multiplier_; // Multiplicador de puntos en función de la dificultad float difficulty_score_multiplier_; // Multiplicador de puntos en función de la dificultad
Color difficulty_color_; // Color asociado a la dificultad
int last_stage_reached_; // Contiene el número de la última pantalla que se ha alcanzado int last_stage_reached_; // Contiene el número de la última pantalla que se ha alcanzado
Demo demo_; // Variable con todas las variables relacionadas con el modo demo Demo demo_; // Variable con todas las variables relacionadas con el modo demo
int total_power_to_complete_game_; // La suma del poder necesario para completar todas las fases int total_power_to_complete_game_; // La suma del poder necesario para completar todas las fases
@@ -183,14 +188,8 @@ private:
// Comprueba los eventos que hay en cola // Comprueba los eventos que hay en cola
void checkEvents(); void checkEvents();
// Inicializa las variables necesarias para la sección 'Game' // Asigna los recursos a variables privadas del objeto
void init(int player_id); void setResources();
// Carga los recursos necesarios para la sección 'Game'
void loadMedia();
// Libera los recursos previamente cargados
void unloadMedia();
// Crea una formación de enemigos // Crea una formación de enemigos
void deployBalloonFormation(); void deployBalloonFormation();
@@ -366,9 +365,6 @@ private:
// Comprueba si todos los jugadores han terminado de jugar // Comprueba si todos los jugadores han terminado de jugar
bool allPlayersAreNotPlaying(); bool allPlayersAreNotPlaying();
// Elimina todos los objetos contenidos en vectores
void deleteAllVectorObjects();
// Recarga las texturas // Recarga las texturas
void reloadTextures(); void reloadTextures();

View File

@@ -6,42 +6,38 @@
#include <iostream> // for basic_ostream, char_traits, operator<< #include <iostream> // for basic_ostream, char_traits, operator<<
#include "utils.h" // for HiScoreEntry #include "utils.h" // for HiScoreEntry
// Constructor
ManageHiScoreTable::ManageHiScoreTable(std::vector<HiScoreEntry> *table)
: table_(table) {}
// Resetea la tabla a los valores por defecto // Resetea la tabla a los valores por defecto
void ManageHiScoreTable::clear() void ManageHiScoreTable::clear()
{ {
// Limpia la tabla // Limpia la tabla
table_->clear(); table_.clear();
// Añade 10 entradas predefinidas // Añade 10 entradas predefinidas
table_->push_back({"Bry", 1000000}); table_.push_back({"Bry", 1000000});
table_->push_back({"Usufondo", 500000}); table_.push_back({"Usufondo", 500000});
table_->push_back({"G.Lucas", 100000}); table_.push_back({"G.Lucas", 100000});
table_->push_back({"P.Delgat", 50000}); table_.push_back({"P.Delgat", 50000});
table_->push_back({"P.Arrabalera", 10000}); table_.push_back({"P.Arrabalera", 10000});
table_->push_back({"Pelechano", 5000}); table_.push_back({"Pelechano", 5000});
table_->push_back({"Sahuquillo", 1000}); table_.push_back({"Sahuquillo", 1000});
table_->push_back({"Bacteriol", 500}); table_.push_back({"Bacteriol", 500});
table_->push_back({"Pepe", 200}); table_.push_back({"Pepe", 200});
table_->push_back({"Rosita", 100}); table_.push_back({"Rosita", 100});
} }
// Añade un elemento a la tabla // Añade un elemento a la tabla
void ManageHiScoreTable::add(HiScoreEntry entry) void ManageHiScoreTable::add(HiScoreEntry entry)
{ {
// Añade la entrada a la tabla // Añade la entrada a la tabla
table_->push_back(entry); table_.push_back(entry);
// Ordena la tabla // Ordena la tabla
sort(); sort();
// Deja solo las 10 primeras entradas // Deja solo las 10 primeras entradas
if (static_cast<int>(table_->size()) > 10) if (static_cast<int>(table_.size()) > 10)
{ {
table_->resize(10); table_.resize(10);
} }
} }
@@ -53,26 +49,26 @@ void ManageHiScoreTable::sort()
bool operator()(const HiScoreEntry &a, const HiScoreEntry &b) const { return a.score > b.score; } bool operator()(const HiScoreEntry &a, const HiScoreEntry &b) const { return a.score > b.score; }
} custom_less; } custom_less;
std::sort(table_->begin(), table_->end(), custom_less); std::sort(table_.begin(), table_.end(), custom_less);
} }
// Carga la tabla con los datos de un fichero // Carga la tabla con los datos de un fichero
bool ManageHiScoreTable::loadFromFile(const std::string &file_path) bool ManageHiScoreTable::loadFromFile(const std::string &file_path)
{ {
clear(); clear();
auto success = true; auto success = true;
auto file = SDL_RWFromFile(file_path.c_str(), "r+b"); auto file = SDL_RWFromFile(file_path.c_str(), "r+b");
if (file) if (file)
{ {
const std::string file_name = file_path.substr(file_path.find_last_of("\\/") + 1); const std::string file_name = file_path.substr(file_path.find_last_of("\\/") + 1);
std::cout << "Reading file: " << file_name.c_str() << std::endl; std::cout << "Reading file: " << file_name << std::endl;
for (int i = 0; i < (int)table_->size(); ++i)
for (auto &entry : table_)
{ {
int nameSize = 0; int nameSize = 0;
if (SDL_RWread(file, &table_->at(i).score, sizeof(int), 1) == 0) if (SDL_RWread(file, &entry.score, sizeof(int), 1) == 0)
{ {
success = false; success = false;
break; break;
@@ -84,19 +80,15 @@ bool ManageHiScoreTable::loadFromFile(const std::string &file_path)
break; break;
} }
char *name = static_cast<char *>(malloc(nameSize + 1)); std::vector<char> nameBuffer(nameSize + 1);
if (SDL_RWread(file, name, sizeof(char) * nameSize, 1) == 0) if (SDL_RWread(file, nameBuffer.data(), sizeof(char) * nameSize, 1) == 0)
{ {
success = false; success = false;
free(name);
break; break;
} }
else
{ nameBuffer[nameSize] = '\0';
name[nameSize] = 0; entry.name = std::string(nameBuffer.data());
table_->at(i).name = name;
free(name);
}
} }
SDL_RWclose(file); SDL_RWclose(file);
@@ -120,12 +112,12 @@ bool ManageHiScoreTable::saveToFile(const std::string &file_path)
if (file) if (file)
{ {
// Guarda los datos // Guarda los datos
for (int i = 0; i < (int)table_->size(); ++i) for (int i = 0; i < (int)table_.size(); ++i)
{ {
SDL_RWwrite(file, &table_->at(i).score, sizeof(int), 1); SDL_RWwrite(file, &table_.at(i).score, sizeof(int), 1);
const int nameSize = (int)table_->at(i).name.size(); const int nameSize = (int)table_.at(i).name.size();
SDL_RWwrite(file, &nameSize, sizeof(int), 1); SDL_RWwrite(file, &nameSize, sizeof(int), 1);
SDL_RWwrite(file, table_->at(i).name.c_str(), nameSize, 1); SDL_RWwrite(file, table_.at(i).name.c_str(), nameSize, 1);
} }
std::cout << "Writing file: " << file_name.c_str() << std::endl; std::cout << "Writing file: " << file_name.c_str() << std::endl;

View File

@@ -17,14 +17,15 @@ class ManageHiScoreTable
{ {
private: private:
// Variables // Variables
std::vector<HiScoreEntry> *table_; // Tabla con los records std::vector<HiScoreEntry> &table_; // Tabla con los records
// Ordena la tabla // Ordena la tabla
void sort(); void sort();
public: public:
// Constructor // Constructor
explicit ManageHiScoreTable(std::vector<HiScoreEntry> *table); explicit ManageHiScoreTable(std::vector<HiScoreEntry> &table)
: table_(table) {} // Inicialización en el constructor
// Destructor // Destructor
~ManageHiScoreTable() = default; ~ManageHiScoreTable() = default;

View File

@@ -480,7 +480,10 @@ void Screen::displayInfo()
// Resolution // Resolution
dbg_print(0, 0, info_resolution_.c_str(), 255, 255, 0); dbg_print(0, 0, info_resolution_.c_str(), 255, 255, 0);
dbg_print(0, 8, std::to_string(globalInputs::service_pressed_counter[0]).c_str(), 255, 255, 0); // Contador de service_pressed_counter
const int counter = globalInputs::service_pressed_counter[0];
if (counter > 0)
dbg_print(0, 8, std::to_string(counter).c_str(), 255, 0, 255);
} }
} }

View File

@@ -8,15 +8,17 @@
struct JA_Music_t; // lines 7-7 struct JA_Music_t; // lines 7-7
struct JA_Sound_t; // lines 8-8 struct JA_Sound_t; // lines 8-8
// Variables
Overrides overrides = Overrides();
// Colores // Colores
const Color bg_color = {0x27, 0x27, 0x36}; const Color bg_color = {0x27, 0x27, 0x36};
const Color no_color = {0xFF, 0xFF, 0xFF}; const Color no_color = {0xFF, 0xFF, 0xFF};
const Color shdw_txt_color = {0x43, 0x43, 0x4F}; const Color shdw_txt_color = {0x43, 0x43, 0x4F};
const Color separator_color = {0x0D, 0x1A, 0x2B}; const Color separator_color = {0x0D, 0x1A, 0x2B};
const Color scoreboard_color = {0x2E, 0x3F, 0x47}; const Color scoreboard_easy_color = {0x4B, 0x69, 0x2F};
const Color difficulty_easy_color = {0x4B, 0x69, 0x2F}; const Color scoreboard_normal_color = {0x2E, 0x3F, 0x47};
const Color difficulty_normal_color = {0xFF, 0x7A, 0x00}; const Color scoreboard_hard_color = {0x76, 0x42, 0x8A};
const Color difficulty_hard_color = {0x76, 0x42, 0x8A};
const Color flash_color = {0xFF, 0xFF, 0xFF}; const Color flash_color = {0xFF, 0xFF, 0xFF};
const Color fade_color = {0x27, 0x27, 0x36}; const Color fade_color = {0x27, 0x27, 0x36};
const Color orange_color = {0xFF, 0x7A, 0x00}; const Color orange_color = {0xFF, 0x7A, 0x00};

View File

@@ -29,6 +29,20 @@ enum class GameDifficulty
HARD = 2, HARD = 2,
}; };
// Variables para que los argumentos del programa tengan mas peso que los definidos en otros lugares
struct Overrides
{
std::string param_file; // Fichero de parametros a utilizar
bool clear_hi_score_table; // Reinicia la tabla de records
bool set_v_sync; // Establece el vsync
// Constructor por defecto
Overrides()
: param_file(""), clear_hi_score_table(false), set_v_sync(false) {}
};
extern Overrides overrides;
// Estructura para definir un circulo // Estructura para definir un circulo
struct Circle struct Circle
{ {
@@ -57,6 +71,10 @@ struct HiScoreEntry
{ {
std::string name; // Nombre std::string name; // Nombre
int score; // Puntuación int score; // Puntuación
// Constructor
HiScoreEntry(const std::string &n = "", int s = 0)
: name(n), score(s) {}
}; };
struct DemoKeys struct DemoKeys
@@ -82,6 +100,14 @@ struct Demo
int counter; // Contador para el modo demo int counter; // Contador para el modo demo
DemoKeys keys; // Variable con las pulsaciones de teclas del modo demo DemoKeys keys; // Variable con las pulsaciones de teclas del modo demo
std::vector<DemoData> data; // Vector con diferentes sets de datos con los movimientos para la demo std::vector<DemoData> data; // Vector con diferentes sets de datos con los movimientos para la demo
// Constructor por defecto
Demo()
: enabled(false), recording(false), counter(0), keys(), data() {}
// Constructor con parámetros
Demo(bool e, bool r, int c, const DemoKeys &k, const std::vector<DemoData> &d)
: enabled(e), recording(r), counter(c), keys(k), data(d) {}
}; };
// Estructura para las opciones de la ventana // Estructura para las opciones de la ventana
@@ -294,10 +320,9 @@ extern const Color bg_color;
extern const Color no_color; extern const Color no_color;
extern const Color shdw_txt_color; extern const Color shdw_txt_color;
extern const Color separator_color; extern const Color separator_color;
extern const Color scoreboard_color; extern const Color scoreboard_easy_color;
extern const Color difficulty_easy_color; extern const Color scoreboard_normal_color;
extern const Color difficulty_normal_color; extern const Color scoreboard_hard_color;
extern const Color difficulty_hard_color;
extern const Color flash_color; extern const Color flash_color;
extern const Color fade_color; extern const Color fade_color;
extern const Color orange_color; extern const Color orange_color;