Arreglados dos fallos del menu

This commit is contained in:
2022-10-06 19:06:39 +02:00
parent bebc016f3c
commit bb20522172
13 changed files with 118 additions and 73 deletions

Binary file not shown.

View File

@@ -20,7 +20,7 @@ isCenteredOnY=true
centerY=96 centerY=96
selector_color=229,28,35,255 selector_color=229,28,35,255
selector_text_color=255,180,0 selector_text_color=255,241,118
defaultActionWhenCancel=13 defaultActionWhenCancel=13

View File

@@ -493,4 +493,12 @@ void AnimatedSprite::setAnimationCounter(int value)
{ {
a.counter = value; a.counter = value;
} }
}
// Reinicia la animación
void AnimatedSprite::resetAnimation()
{
animation.at(currentAnimation).currentFrame = 0;
animation.at(currentAnimation).counter = 0;
animation.at(currentAnimation).completed = false;
} }

View File

@@ -8,7 +8,6 @@
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#ifndef ANIMATEDSPRITE_H #ifndef ANIMATEDSPRITE_H
#define ANIMATEDSPRITE_H #define ANIMATEDSPRITE_H
@@ -85,6 +84,9 @@ public:
// OLD - Establece el contador para todas las animaciones // OLD - Establece el contador para todas las animaciones
void setAnimationCounter(int value); void setAnimationCounter(int value);
// Reinicia la animación
void resetAnimation();
}; };
#endif #endif

View File

@@ -323,26 +323,26 @@ void Balloon::render()
// Aplica alpha blending // Aplica alpha blending
sprite->getTexture()->setAlpha(255 - (int)((float)creationCounter * (255.0f / (float)creationCounterIni))); sprite->getTexture()->setAlpha(255 - (int)((float)creationCounter * (255.0f / (float)creationCounterIni)));
sprite->render(); sprite->render();
if (kind == POWER_BALL) //if (kind == POWER_BALL)
{ //{
Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture(), sprite->getRenderer()); // Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture(), sprite->getRenderer());
sp->setSpriteClip(407, 0, 37, 37); // sp->setSpriteClip(407, 0, 37, 37);
sp->render(); // sp->render();
delete sp; // delete sp;
} //}
sprite->getTexture()->setAlpha(255); sprite->getTexture()->setAlpha(255);
} }
else else
{ {
sprite->render(); sprite->render();
if (kind == POWER_BALL and !popping) //if (kind == POWER_BALL and !popping)
{ //{
Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture(), sprite->getRenderer()); // Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture(), sprite->getRenderer());
sp->setSpriteClip(407, 0, 37, 37); // sp->setSpriteClip(407, 0, 37, 37);
sp->render(); // sp->render();
delete sp; // delete sp;
} //}
} }
} }
} }

View File

@@ -12,6 +12,8 @@ Director::Director(std::string path)
section.name = PROG_SECTION_GAME; section.name = PROG_SECTION_GAME;
section.subsection = GAME_SECTION_PLAY_1P; section.subsection = GAME_SECTION_PLAY_1P;
section.name = PROG_SECTION_INTRO;
// Crea el objeto que controla los ficheros de recursos // Crea el objeto que controla los ficheros de recursos
asset = new Asset(path.substr(0, path.find_last_of("\\/")) + "/../"); asset = new Asset(path.substr(0, path.find_last_of("\\/")) + "/../");
@@ -100,7 +102,8 @@ bool Director::initSDL()
bool success = true; bool success = true;
// Inicializa SDL // Inicializa SDL
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER | SDL_INIT_AUDIO) < 0) if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
// if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER | SDL_INIT_AUDIO) < 0)
{ {
printf("SDL could not initialize!\nSDL Error: %s\n", SDL_GetError()); printf("SDL could not initialize!\nSDL Error: %s\n", SDL_GetError());
success = false; success = false;
@@ -127,9 +130,13 @@ bool Director::initSDL()
{ {
// Crea un renderizador para la ventana. El vsync se activa en funcion de las opciones // Crea un renderizador para la ventana. El vsync se activa en funcion de las opciones
if (options->vSync) if (options->vSync)
{
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
}
else else
{
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
}
if (renderer == nullptr) if (renderer == nullptr)
{ {
@@ -208,7 +215,7 @@ bool Director::setFileList()
asset->add("data/gfx/intro.png", t_bitmap); asset->add("data/gfx/intro.png", t_bitmap);
asset->add("data/gfx/logo.png", t_bitmap); asset->add("data/gfx/logo.png", t_bitmap);
asset->add("data/gfx/item_points1_disk.png", t_bitmap); asset->add("data/gfx/item_points1_disk.png", t_bitmap);
asset->add("data/gfx/item_points1_disk.ani", t_data); asset->add("data/gfx/item_points1_disk.ani", t_data);
asset->add("data/gfx/item_points2_gavina.png", t_bitmap); asset->add("data/gfx/item_points2_gavina.png", t_bitmap);

View File

@@ -101,19 +101,19 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang)
// Un dia qualsevol de l'any 2000 // Un dia qualsevol de l'any 2000
texts.at(0)->setCaption(lang->getText(27)); texts.at(0)->setCaption(lang->getText(27));
texts.at(0)->setSpeed(10); texts.at(0)->setSpeed(8);
// Tot esta tranquil a la UPV // Tot esta tranquil a la UPV
texts.at(1)->setCaption(lang->getText(28)); texts.at(1)->setCaption(lang->getText(28));
texts.at(1)->setSpeed(10); texts.at(1)->setSpeed(8);
// Fins que un desaprensiu... // Fins que un desaprensiu...
texts.at(2)->setCaption(lang->getText(29)); texts.at(2)->setCaption(lang->getText(29));
texts.at(2)->setSpeed(15); texts.at(2)->setSpeed(12);
// HEY! ME ANE A FERME UN CORTAET... // HEY! ME ANE A FERME UN CORTAET...
texts.at(3)->setCaption(lang->getText(30)); texts.at(3)->setCaption(lang->getText(30));
texts.at(3)->setSpeed(10); texts.at(3)->setSpeed(8);
// UAAAAAAAAAAAAA!!! // UAAAAAAAAAAAAA!!!
texts.at(4)->setCaption(lang->getText(31)); texts.at(4)->setCaption(lang->getText(31));
@@ -121,7 +121,7 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang)
// Espera un moment... // Espera un moment...
texts.at(5)->setCaption(lang->getText(32)); texts.at(5)->setCaption(lang->getText(32));
texts.at(5)->setSpeed(20); texts.at(5)->setSpeed(16);
// Si resulta que no tinc solt! // Si resulta que no tinc solt!
texts.at(6)->setCaption(lang->getText(33)); texts.at(6)->setCaption(lang->getText(33));
@@ -133,7 +133,7 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang)
// Blop... blop... blop... // Blop... blop... blop...
texts.at(8)->setCaption(lang->getText(35)); texts.at(8)->setCaption(lang->getText(35));
texts.at(8)->setSpeed(20); texts.at(8)->setSpeed(16);
for (auto text : texts) for (auto text : texts)
{ {

View File

@@ -554,7 +554,7 @@ bool Menu::decreaseSelectorIndex()
// Calcula cual es el siguiente elemento // Calcula cual es el siguiente elemento
if (selector.index == 0) if (selector.index == 0)
{ {
selector.index = item.size(); selector.index = item.size() - 1;
} }
else else
{ {
@@ -565,7 +565,7 @@ bool Menu::decreaseSelectorIndex()
{ {
if (selector.index == 0) if (selector.index == 0)
{ {
selector.index = item.size(); selector.index = item.size() - 1;
} }
else else
{ {
@@ -738,13 +738,13 @@ void Menu::centerMenuElementsOnX()
void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool greyed, bool linkedDown) void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool greyed, bool linkedDown)
{ {
item_t temp; item_t temp;
if (item.empty()) if (item.empty())
{// Si es el primer item coge la posición en el eje Y del propio menu { // Si es el primer item coge la posición en el eje Y del propio menu
temp.rect.y = y; temp.rect.y = y;
} }
else else
{// En caso contrario, coge la posición en el eje Y a partir del último elemento { // En caso contrario, coge la posición en el eje Y a partir del último elemento
temp.rect.y = item.back().rect.y + item.back().rect.h + item.back().hPaddingDown; temp.rect.y = item.back().rect.y + item.back().rect.h + item.back().hPaddingDown;
} }
@@ -755,7 +755,7 @@ void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool gre
temp.linkedDown = linkedDown; temp.linkedDown = linkedDown;
item.push_back(temp); item.push_back(temp);
setItemCaption(item.size() - 1, text); setItemCaption(item.size() - 1, text);
if (item.size() > 1) if (item.size() > 1)

View File

@@ -22,7 +22,9 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer, options_t *options, i
// Crea la textura donde se dibujan los graficos del juego // Crea la textura donde se dibujan los graficos del juego
gameCanvas = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, gameCanvasWidth, gameCanvasHeight); gameCanvas = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, gameCanvasWidth, gameCanvasHeight);
if (gameCanvas == NULL) if (gameCanvas == NULL)
{
printf("TitleSurface could not be created!\nSDL Error: %s\n", SDL_GetError()); printf("TitleSurface could not be created!\nSDL Error: %s\n", SDL_GetError());
}
// Establece el modo de video // Establece el modo de video
setVideoMode(options->fullScreenMode); setVideoMode(options->fullScreenMode);

View File

@@ -8,7 +8,18 @@ SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer)
setTexture(texture); setTexture(texture);
setRenderer(renderer); setRenderer(renderer);
// Inicializa variables // Inicializa el objeto
init();
}
// Destructor
SmartSprite::~SmartSprite()
{
}
// Inicializa el objeto
void SmartSprite::init()
{
enabled = false; enabled = false;
enabledCounter = 0; enabledCounter = 0;
onDestination = false; onDestination = false;
@@ -18,11 +29,6 @@ SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer)
finished = false; finished = false;
} }
// Destructor
SmartSprite::~SmartSprite()
{
}
// Actualiza la posición y comprueba si ha llegado a su destino // Actualiza la posición y comprueba si ha llegado a su destino
void SmartSprite::update() void SmartSprite::update()
{ {

View File

@@ -33,6 +33,9 @@ public:
// Destructor // Destructor
~SmartSprite(); ~SmartSprite();
// Inicializa el objeto
void init();
// Actualiza la posición y comprueba si ha llegado a su destino // Actualiza la posición y comprueba si ha llegado a su destino
void update(); void update();

View File

@@ -10,6 +10,8 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
this->asset = asset; this->asset = asset;
this->options = options; this->options = options;
this->lang = lang; this->lang = lang;
this->section = section;
// Reserva memoria para los punteros propios // Reserva memoria para los punteros propios
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
@@ -38,8 +40,51 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
// Musicas // Musicas
titleMusic = JA_LoadMusic(asset->get("title.ogg").c_str()); titleMusic = JA_LoadMusic(asset->get("title.ogg").c_str());
// Inicializa los valores
init();
}
// Destructor
Title::~Title()
{
delete eventHandler;
delete fade;
dustTexture->unload();
delete dustTexture;
coffeeTexture->unload();
delete coffeeTexture;
crisisTexture->unload();
delete crisisTexture;
gradientTexture->unload();
delete gradientTexture;
delete coffeeBitmap;
delete crisisBitmap;
delete dustBitmapL;
delete dustBitmapR;
delete gradient;
delete text1;
delete text2;
delete menu.title;
delete menu.options;
JA_DeleteSound(crashSound);
JA_DeleteMusic(titleMusic);
SDL_DestroyTexture(background);
}
// Inicializa los valores
void Title::init()
{
// Inicializa variables // Inicializa variables
this->section = section; section.subsection = TITLE_SECTION_1;
counter = TITLE_COUNTER; counter = TITLE_COUNTER;
backgroundCounter = 0; backgroundCounter = 0;
backgroundMode = rand() % 2; backgroundMode = rand() % 2;
@@ -83,6 +128,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
} }
// Inicializa el bitmap de Coffee // Inicializa el bitmap de Coffee
coffeeBitmap->init();
coffeeBitmap->setPosX(45); coffeeBitmap->setPosX(45);
coffeeBitmap->setPosY(11 - 200); coffeeBitmap->setPosY(11 - 200);
coffeeBitmap->setWidth(167); coffeeBitmap->setWidth(167);
@@ -98,6 +144,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
coffeeBitmap->setDestY(11); coffeeBitmap->setDestY(11);
// Inicializa el bitmap de Crisis // Inicializa el bitmap de Crisis
crisisBitmap->init();
crisisBitmap->setPosX(60); crisisBitmap->setPosX(60);
crisisBitmap->setPosY(57 + 200); crisisBitmap->setPosY(57 + 200);
crisisBitmap->setWidth(137); crisisBitmap->setWidth(137);
@@ -113,6 +160,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
crisisBitmap->setDestY(57); crisisBitmap->setDestY(57);
// Inicializa el bitmap de DustRight // Inicializa el bitmap de DustRight
dustBitmapR->resetAnimation();
dustBitmapR->setPosX(218); dustBitmapR->setPosX(218);
dustBitmapR->setPosY(47); dustBitmapR->setPosY(47);
dustBitmapR->setWidth(16); dustBitmapR->setWidth(16);
@@ -120,6 +168,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
dustBitmapR->setFlip(SDL_FLIP_HORIZONTAL); dustBitmapR->setFlip(SDL_FLIP_HORIZONTAL);
// Inicializa el bitmap de DustLeft // Inicializa el bitmap de DustLeft
dustBitmapL->resetAnimation();
dustBitmapL->setPosX(33); dustBitmapL->setPosX(33);
dustBitmapL->setPosY(47); dustBitmapL->setPosY(47);
dustBitmapL->setWidth(16); dustBitmapL->setWidth(16);
@@ -147,42 +196,6 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset,
updateMenuLabels(); updateMenuLabels();
} }
// Destructor
Title::~Title()
{
delete eventHandler;
delete fade;
dustTexture->unload();
delete dustTexture;
coffeeTexture->unload();
delete coffeeTexture;
crisisTexture->unload();
delete crisisTexture;
gradientTexture->unload();
delete gradientTexture;
delete coffeeBitmap;
delete crisisBitmap;
delete dustBitmapL;
delete dustBitmapR;
delete gradient;
delete text1;
delete text2;
delete menu.title;
delete menu.options;
JA_DeleteSound(crashSound);
JA_DeleteMusic(titleMusic);
SDL_DestroyTexture(background);
}
// Actualiza las variables del objeto // Actualiza las variables del objeto
void Title::update() void Title::update()
{ {
@@ -439,6 +452,7 @@ void Title::update()
{ {
runDemoGame(); runDemoGame();
runInstructions(m_auto); runInstructions(m_auto);
init();
demo = false; demo = false;
counter = TITLE_COUNTER; counter = TITLE_COUNTER;
} }

View File

@@ -91,6 +91,9 @@ private:
std::vector<input_t> availableInputDevices; // Vector con todos los metodos de control disponibles std::vector<input_t> availableInputDevices; // Vector con todos los metodos de control disponibles
std::vector<int> deviceIndex; // Indice para el jugador [i] del vector de dispositivos de entrada disponibles std::vector<int> deviceIndex; // Indice para el jugador [i] del vector de dispositivos de entrada disponibles
// Inicializa los valores
void init();
// Actualiza las variables del objeto // Actualiza las variables del objeto
void update(); void update();