diff --git a/data/config/config.bin b/data/config/config.bin index 9dcfbed..0f82916 100644 Binary files a/data/config/config.bin and b/data/config/config.bin differ diff --git a/data/menu/options.men b/data/menu/options.men index f86d43e..5290c85 100644 --- a/data/menu/options.men +++ b/data/menu/options.men @@ -20,7 +20,7 @@ isCenteredOnY=true centerY=96 selector_color=229,28,35,255 -selector_text_color=255,180,0 +selector_text_color=255,241,118 defaultActionWhenCancel=13 diff --git a/source/animatedsprite.cpp b/source/animatedsprite.cpp index 4775e24..c51dda1 100644 --- a/source/animatedsprite.cpp +++ b/source/animatedsprite.cpp @@ -493,4 +493,12 @@ void AnimatedSprite::setAnimationCounter(int 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; } \ No newline at end of file diff --git a/source/animatedsprite.h b/source/animatedsprite.h index d8b6f33..bc0ca50 100644 --- a/source/animatedsprite.h +++ b/source/animatedsprite.h @@ -8,7 +8,6 @@ #include #include - #ifndef ANIMATEDSPRITE_H #define ANIMATEDSPRITE_H @@ -85,6 +84,9 @@ public: // OLD - Establece el contador para todas las animaciones void setAnimationCounter(int value); + + // Reinicia la animación + void resetAnimation(); }; #endif \ No newline at end of file diff --git a/source/balloon.cpp b/source/balloon.cpp index 44a3f91..82dd622 100644 --- a/source/balloon.cpp +++ b/source/balloon.cpp @@ -323,26 +323,26 @@ void Balloon::render() // Aplica alpha blending sprite->getTexture()->setAlpha(255 - (int)((float)creationCounter * (255.0f / (float)creationCounterIni))); sprite->render(); - if (kind == POWER_BALL) - { - Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture(), sprite->getRenderer()); - sp->setSpriteClip(407, 0, 37, 37); - sp->render(); - delete sp; - } + //if (kind == POWER_BALL) + //{ + // Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture(), sprite->getRenderer()); + // sp->setSpriteClip(407, 0, 37, 37); + // sp->render(); + // delete sp; + //} sprite->getTexture()->setAlpha(255); } else { sprite->render(); - if (kind == POWER_BALL and !popping) - { - Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture(), sprite->getRenderer()); - sp->setSpriteClip(407, 0, 37, 37); - sp->render(); - delete sp; - } + //if (kind == POWER_BALL and !popping) + //{ + // Sprite *sp = new Sprite(sprite->getRect(), sprite->getTexture(), sprite->getRenderer()); + // sp->setSpriteClip(407, 0, 37, 37); + // sp->render(); + // delete sp; + //} } } } diff --git a/source/director.cpp b/source/director.cpp index 93c87b1..487478b 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -12,6 +12,8 @@ Director::Director(std::string path) section.name = PROG_SECTION_GAME; section.subsection = GAME_SECTION_PLAY_1P; + section.name = PROG_SECTION_INTRO; + // Crea el objeto que controla los ficheros de recursos asset = new Asset(path.substr(0, path.find_last_of("\\/")) + "/../"); @@ -100,7 +102,8 @@ bool Director::initSDL() bool success = true; // 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()); success = false; @@ -127,9 +130,13 @@ bool Director::initSDL() { // Crea un renderizador para la ventana. El vsync se activa en funcion de las opciones if (options->vSync) + { renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + } else + { renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + } if (renderer == nullptr) { @@ -208,7 +215,7 @@ bool Director::setFileList() asset->add("data/gfx/intro.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.ani", t_data); asset->add("data/gfx/item_points2_gavina.png", t_bitmap); diff --git a/source/intro.cpp b/source/intro.cpp index 696600f..dd8bf30 100644 --- a/source/intro.cpp +++ b/source/intro.cpp @@ -101,19 +101,19 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang) // Un dia qualsevol de l'any 2000 texts.at(0)->setCaption(lang->getText(27)); - texts.at(0)->setSpeed(10); + texts.at(0)->setSpeed(8); // Tot esta tranquil a la UPV texts.at(1)->setCaption(lang->getText(28)); - texts.at(1)->setSpeed(10); + texts.at(1)->setSpeed(8); // Fins que un desaprensiu... texts.at(2)->setCaption(lang->getText(29)); - texts.at(2)->setSpeed(15); + texts.at(2)->setSpeed(12); // HEY! ME ANE A FERME UN CORTAET... texts.at(3)->setCaption(lang->getText(30)); - texts.at(3)->setSpeed(10); + texts.at(3)->setSpeed(8); // UAAAAAAAAAAAAA!!! 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... texts.at(5)->setCaption(lang->getText(32)); - texts.at(5)->setSpeed(20); + texts.at(5)->setSpeed(16); // Si resulta que no tinc solt! 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... texts.at(8)->setCaption(lang->getText(35)); - texts.at(8)->setSpeed(20); + texts.at(8)->setSpeed(16); for (auto text : texts) { diff --git a/source/menu.cpp b/source/menu.cpp index 8a969cc..071e430 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -554,7 +554,7 @@ bool Menu::decreaseSelectorIndex() // Calcula cual es el siguiente elemento if (selector.index == 0) { - selector.index = item.size(); + selector.index = item.size() - 1; } else { @@ -565,7 +565,7 @@ bool Menu::decreaseSelectorIndex() { if (selector.index == 0) { - selector.index = item.size(); + selector.index = item.size() - 1; } else { @@ -738,13 +738,13 @@ void Menu::centerMenuElementsOnX() void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool greyed, bool linkedDown) { item_t temp; - + 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; } 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; } @@ -755,7 +755,7 @@ void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool gre temp.linkedDown = linkedDown; item.push_back(temp); - + setItemCaption(item.size() - 1, text); if (item.size() > 1) diff --git a/source/screen.cpp b/source/screen.cpp index 84479c9..aa9bad0 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -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 gameCanvas = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, gameCanvasWidth, gameCanvasHeight); if (gameCanvas == NULL) + { printf("TitleSurface could not be created!\nSDL Error: %s\n", SDL_GetError()); + } // Establece el modo de video setVideoMode(options->fullScreenMode); diff --git a/source/smartsprite.cpp b/source/smartsprite.cpp index 8dc9e38..52ced2f 100644 --- a/source/smartsprite.cpp +++ b/source/smartsprite.cpp @@ -8,7 +8,18 @@ SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer) setTexture(texture); setRenderer(renderer); - // Inicializa variables + // Inicializa el objeto + init(); +} + +// Destructor +SmartSprite::~SmartSprite() +{ +} + +// Inicializa el objeto +void SmartSprite::init() +{ enabled = false; enabledCounter = 0; onDestination = false; @@ -18,11 +29,6 @@ SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer) finished = false; } -// Destructor -SmartSprite::~SmartSprite() -{ -} - // Actualiza la posición y comprueba si ha llegado a su destino void SmartSprite::update() { diff --git a/source/smartsprite.h b/source/smartsprite.h index 81904da..8362465 100644 --- a/source/smartsprite.h +++ b/source/smartsprite.h @@ -33,6 +33,9 @@ public: // Destructor ~SmartSprite(); + // Inicializa el objeto + void init(); + // Actualiza la posición y comprueba si ha llegado a su destino void update(); diff --git a/source/title.cpp b/source/title.cpp index 8b72430..52d614f 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -10,6 +10,8 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, this->asset = asset; this->options = options; this->lang = lang; + + this->section = section; // Reserva memoria para los punteros propios eventHandler = new SDL_Event(); @@ -38,8 +40,51 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, // Musicas 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 - this->section = section; + section.subsection = TITLE_SECTION_1; counter = TITLE_COUNTER; backgroundCounter = 0; backgroundMode = rand() % 2; @@ -83,6 +128,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, } // Inicializa el bitmap de Coffee + coffeeBitmap->init(); coffeeBitmap->setPosX(45); coffeeBitmap->setPosY(11 - 200); coffeeBitmap->setWidth(167); @@ -98,6 +144,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, coffeeBitmap->setDestY(11); // Inicializa el bitmap de Crisis + crisisBitmap->init(); crisisBitmap->setPosX(60); crisisBitmap->setPosY(57 + 200); crisisBitmap->setWidth(137); @@ -113,6 +160,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, crisisBitmap->setDestY(57); // Inicializa el bitmap de DustRight + dustBitmapR->resetAnimation(); dustBitmapR->setPosX(218); dustBitmapR->setPosY(47); dustBitmapR->setWidth(16); @@ -120,6 +168,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, dustBitmapR->setFlip(SDL_FLIP_HORIZONTAL); // Inicializa el bitmap de DustLeft + dustBitmapL->resetAnimation(); dustBitmapL->setPosX(33); dustBitmapL->setPosY(47); dustBitmapL->setWidth(16); @@ -147,42 +196,6 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, 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 void Title::update() { @@ -439,6 +452,7 @@ void Title::update() { runDemoGame(); runInstructions(m_auto); + init(); demo = false; counter = TITLE_COUNTER; } diff --git a/source/title.h b/source/title.h index b4a9e4b..aa00e4e 100644 --- a/source/title.h +++ b/source/title.h @@ -91,6 +91,9 @@ private: std::vector availableInputDevices; // Vector con todos los metodos de control disponibles std::vector deviceIndex; // Indice para el jugador [i] del vector de dispositivos de entrada disponibles + // Inicializa los valores + void init(); + // Actualiza las variables del objeto void update();