Me voy a la cama. Sigo con la reescritura de todo el código

This commit is contained in:
2022-09-26 22:25:46 +02:00
parent 35e7abcd3c
commit c8bebfd2d9
74 changed files with 365 additions and 379 deletions

BIN
data/config/config.bin Normal file

Binary file not shown.

BIN
data/config/score.bin Normal file

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

View File

Before

Width:  |  Height:  |  Size: 644 B

After

Width:  |  Height:  |  Size: 644 B

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 795 B

After

Width:  |  Height:  |  Size: 795 B

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

Before

Width:  |  Height:  |  Size: 785 B

After

Width:  |  Height:  |  Size: 785 B

View File

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

Before

Width:  |  Height:  |  Size: 654 B

After

Width:  |  Height:  |  Size: 654 B

View File

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 71 KiB

View File

@@ -2,22 +2,11 @@
#include "balloon.h" #include "balloon.h"
// Constructor // Constructor
Balloon::Balloon() Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, SDL_Renderer *renderer)
{ {
mSprite = new AnimatedSprite(); mSprite = new AnimatedSprite();
disable(); disable();
}
// Destructor
Balloon::~Balloon()
{
delete mSprite;
mSprite = nullptr;
}
// Inicializador
void Balloon::init(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, SDL_Renderer *renderer)
{
const Uint8 NUM_FRAMES_BALLON = 10; const Uint8 NUM_FRAMES_BALLON = 10;
const Uint8 NUM_FRAMES_BALLON_POP = 12; const Uint8 NUM_FRAMES_BALLON_POP = 12;
const Uint8 NUM_FRAMES_BALLON_BORN = 10; const Uint8 NUM_FRAMES_BALLON_BORN = 10;
@@ -435,6 +424,13 @@ void Balloon::init(float x, float y, Uint8 kind, float velx, float speed, Uint16
mSprite->setSpriteClip(mSprite->getAnimationClip(0, 0)); mSprite->setSpriteClip(mSprite->getAnimationClip(0, 0));
} }
// Destructor
Balloon::~Balloon()
{
delete mSprite;
mSprite = nullptr;
}
// Centra el globo en la posición X // Centra el globo en la posición X
void Balloon::allignTo(int x) void Balloon::allignTo(int x)
{ {

View File

@@ -146,14 +146,11 @@ private:
public: public:
// Constructor // Constructor
Balloon(); Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, SDL_Renderer *renderer);
// Destructor // Destructor
~Balloon(); ~Balloon();
// Inicializador
void init(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, SDL_Renderer *renderer);
// Centra el globo en la posición X // Centra el globo en la posición X
void allignTo(int x); void allignTo(int x);

View File

@@ -177,75 +177,73 @@ bool Director::initSDL()
// Crea el indice de ficheros // Crea el indice de ficheros
bool Director::setFileList() bool Director::setFileList()
{ {
// Ficheros binarios // Ficheros de configuración
asset->add("data/score.bin", t_data, false); asset->add("data/config/score.bin", t_data, false);
asset->add("data/demo.bin", t_data); asset->add("data/config/demo.bin", t_data);
asset->add("data/config.bin", t_data, false); asset->add("data/config/config.bin", t_data, false);
asset->add("data/config/gamecontrollerdb.txt", t_data);
// Musicas // Musicas
asset->add("media/music/intro.ogg", t_music); asset->add("data/music/intro.ogg", t_music);
asset->add("media/music/playing.ogg", t_music); asset->add("data/music/playing.ogg", t_music);
asset->add("media/music/title.ogg", t_music); asset->add("data/music/title.ogg", t_music);
// Sonidos // Sonidos
asset->add("media/sound/balloon.wav", t_sound); asset->add("data/sound/balloon.wav", t_sound);
asset->add("media/sound/bubble1.wav", t_sound); asset->add("data/sound/bubble1.wav", t_sound);
asset->add("media/sound/bubble2.wav", t_sound); asset->add("data/sound/bubble2.wav", t_sound);
asset->add("media/sound/bubble3.wav", t_sound); asset->add("data/sound/bubble3.wav", t_sound);
asset->add("media/sound/bubble4.wav", t_sound); asset->add("data/sound/bubble4.wav", t_sound);
asset->add("media/sound/bullet.wav", t_sound); asset->add("data/sound/bullet.wav", t_sound);
asset->add("media/sound/coffeeout.wav", t_sound); asset->add("data/sound/coffeeout.wav", t_sound);
asset->add("media/sound/hiscore.wav", t_sound); asset->add("data/sound/hiscore.wav", t_sound);
asset->add("media/sound/itemdrop.wav", t_sound); asset->add("data/sound/itemdrop.wav", t_sound);
asset->add("media/sound/itempickup.wav", t_sound); asset->add("data/sound/itempickup.wav", t_sound);
asset->add("media/sound/menu_cancel.wav", t_sound); asset->add("data/sound/menu_cancel.wav", t_sound);
asset->add("media/sound/menu_move.wav", t_sound); asset->add("data/sound/menu_move.wav", t_sound);
asset->add("media/sound/menu_select.wav", t_sound); asset->add("data/sound/menu_select.wav", t_sound);
asset->add("media/sound/player_collision.wav", t_sound); asset->add("data/sound/player_collision.wav", t_sound);
asset->add("media/sound/stage_change.wav", t_sound); asset->add("data/sound/stage_change.wav", t_sound);
asset->add("media/sound/title.wav", t_sound); asset->add("data/sound/title.wav", t_sound);
asset->add("media/sound/clock.wav", t_sound); asset->add("data/sound/clock.wav", t_sound);
asset->add("media/sound/powerball.wav", t_sound); asset->add("data/sound/powerball.wav", t_sound);
// Texturas // Texturas
asset->add("media/gfx/balloon.png", t_bitmap); asset->add("data/gfx/balloon.png", t_bitmap);
asset->add("media/gfx/bullet.png", t_bitmap); asset->add("data/gfx/bullet.png", t_bitmap);
asset->add("media/gfx/game_bg.png", t_bitmap); asset->add("data/gfx/game_bg.png", t_bitmap);
asset->add("media/gfx/game_text.png", t_bitmap); asset->add("data/gfx/game_text.png", t_bitmap);
asset->add("media/gfx/intro.png", t_bitmap); asset->add("data/gfx/intro.png", t_bitmap);
asset->add("media/gfx/items.png", t_bitmap); asset->add("data/gfx/items.png", t_bitmap);
asset->add("media/gfx/logo.png", t_bitmap); asset->add("data/gfx/logo.png", t_bitmap);
asset->add("media/gfx/player1_body.png", t_bitmap); asset->add("data/gfx/player1_body.png", t_bitmap);
asset->add("media/gfx/player1_death.png", t_bitmap); asset->add("data/gfx/player1_death.png", t_bitmap);
asset->add("media/gfx/player1_legs.png", t_bitmap); asset->add("data/gfx/player1_legs.png", t_bitmap);
asset->add("media/gfx/title.png", t_bitmap); asset->add("data/gfx/title.png", t_bitmap);
asset->add("media/gfx/player1_head.png", t_bitmap); asset->add("data/gfx/player1_head.png", t_bitmap);
asset->add("media/gfx/player2_body.png", t_bitmap); asset->add("data/gfx/player2_body.png", t_bitmap);
asset->add("media/gfx/player2_death.png", t_bitmap); asset->add("data/gfx/player2_death.png", t_bitmap);
asset->add("media/gfx/player2_legs.png", t_bitmap); asset->add("data/gfx/player2_legs.png", t_bitmap);
asset->add("media/gfx/player2_head.png", t_bitmap); asset->add("data/gfx/player2_head.png", t_bitmap);
// Fuentes // Fuentes
asset->add("media/font/8bithud.png", t_font); asset->add("data/font/8bithud.png", t_font);
asset->add("media/font/8bithud.txt", t_font); asset->add("data/font/8bithud.txt", t_font);
asset->add("media/font/nokia.png", t_font); asset->add("data/font/nokia.png", t_font);
asset->add("media/font/nokia_big2.png", t_font); asset->add("data/font/nokia_big2.png", t_font);
asset->add("media/font/nokia.txt", t_font); asset->add("data/font/nokia.txt", t_font);
asset->add("media/font/nokia2.png", t_font); asset->add("data/font/nokia2.png", t_font);
asset->add("media/font/nokia2.txt", t_font); asset->add("data/font/nokia2.txt", t_font);
asset->add("media/font/nokia_big2.txt", t_font); asset->add("data/font/nokia_big2.txt", t_font);
asset->add("media/font/smb2_big.png", t_font); asset->add("data/font/smb2_big.png", t_font);
asset->add("media/font/smb2_big.txt", t_font); asset->add("data/font/smb2_big.txt", t_font);
asset->add("media/font/smb2.png", t_font); asset->add("data/font/smb2.png", t_font);
asset->add("media/font/smb2.txt", t_font); asset->add("data/font/smb2.txt", t_font);
// Textos // Textos
asset->add("media/lang/es_ES.txt", t_lang); asset->add("data/lang/es_ES.txt", t_lang);
asset->add("media/lang/en_UK.txt", t_lang); asset->add("data/lang/en_UK.txt", t_lang);
asset->add("media/lang/ba_BA.txt", t_lang); asset->add("data/lang/ba_BA.txt", t_lang);
// DATA
asset->add("data/gamecontrollerdb.txt", t_data);
return asset->check(); return asset->check();
} }

View File

@@ -24,7 +24,21 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
mDifficulty = mOptions->difficulty; mDifficulty = mOptions->difficulty;
// Crea los objetos // Crea los objetos
for (int i = 0; i < mNumPlayers; i++) // Vector de jugadores
if (mNumPlayers == 1)
{
Player *player = new Player(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer);
players.push_back(player);
}
else if (mNumPlayers == 2)
{
Player *player1 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer);
Player *player2 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer2Legs, mTexturePlayer2Body, mTexturePlayer2Head, mTexturePlayer2Death, mRenderer);
players.push_back(player1);
players.push_back(player2);
}
/*for (int i = 0; i < mNumPlayers; i++)
{ {
mPlayer[i] = new Player(); mPlayer[i] = new Player();
} }
@@ -41,13 +55,13 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
for (int i = 0; i < MAX_ITEMS; i++) for (int i = 0; i < MAX_ITEMS; i++)
{ {
mItem[i] = new Item(); mItem[i] = new Item(mTextureItems, mRenderer);
} }
for (int i = 0; i < MAX_SMART_SPRITES; i++) for (int i = 0; i < MAX_SMART_SPRITES; i++)
{ {
mSmartSprite[i] = new SmartSprite(); mSmartSprite[i] = new SmartSprite(nullptr, mRenderer);
} }*/
mTextureBalloon = new LTexture(mRenderer, mAsset->get("balloon.png")); mTextureBalloon = new LTexture(mRenderer, mAsset->get("balloon.png"));
mTextureBullet = new LTexture(mRenderer, mAsset->get("bullet.png")); mTextureBullet = new LTexture(mRenderer, mAsset->get("bullet.png"));
@@ -81,9 +95,11 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
mClouds1b = new MovingSprite(256, 0, 256, 52, -0.4f, 0.0f, 0.0f, 0.0f, mTextureGameBG, mRenderer); mClouds1b = new MovingSprite(256, 0, 256, 52, -0.4f, 0.0f, 0.0f, 0.0f, mTextureGameBG, mRenderer);
mClouds2a = new MovingSprite(0, 52, 256, 32, -0.2f, 0.0f, 0.0f, 0.0f, mTextureGameBG, mRenderer); mClouds2a = new MovingSprite(0, 52, 256, 32, -0.2f, 0.0f, 0.0f, 0.0f, mTextureGameBG, mRenderer);
mClouds2b = new MovingSprite(256, 52, 256, 32, -0.2f, 0.0f, 0.0f, 0.0f, mTextureGameBG, mRenderer); mClouds2b = new MovingSprite(256, 52, 256, 32, -0.2f, 0.0f, 0.0f, 0.0f, mTextureGameBG, mRenderer);
m1000Bitmap = new SmartSprite();
m2500Bitmap = new SmartSprite(); m1000Bitmap = new SmartSprite(mTextureGameText, mRenderer);
m5000Bitmap = new SmartSprite(); m2500Bitmap = new SmartSprite(mTextureGameText, mRenderer);
m5000Bitmap = new SmartSprite(mTextureGameText, mRenderer);
mSpriteBackground = new Sprite(0, 0, GAME_WIDTH, GAME_HEIGHT, mTextureGameBG, mRenderer); mSpriteBackground = new Sprite(0, 0, GAME_WIDTH, GAME_HEIGHT, mTextureGameBG, mRenderer);
mSpriteGetReady = new Sprite(0, PLAY_AREA_CENTER_Y - 10, 109, 20, mTextureGameText, mRenderer); mSpriteGetReady = new Sprite(0, PLAY_AREA_CENTER_Y - 10, 109, 20, mTextureGameText, mRenderer);
mSpriteGradient = new Sprite(0, 0, GAME_WIDTH, GAME_HEIGHT, mTextureGameBG, mRenderer); mSpriteGradient = new Sprite(0, 0, GAME_WIDTH, GAME_HEIGHT, mTextureGameBG, mRenderer);
@@ -105,35 +121,30 @@ Game::~Game()
mLang = nullptr; mLang = nullptr;
mInput = nullptr; mInput = nullptr;
for (int i = 0; i < mNumPlayers; i++) for (auto player : players)
{ {
delete mPlayer[i]; delete player;
mPlayer[i] = nullptr; };
}
for (int i = 0; i < MAX_BALLOONS; i++) for (auto ballon : ballons)
{ {
delete mBalloon[i]; delete ballon;
mBalloon[i] = nullptr; };
}
for (int i = 0; i < MAX_BULLETS; i++) for (auto bullet : bullets)
{ {
delete mBullet[i]; delete bullet;
mBullet[i] = nullptr; };
}
for (int i = 0; i < MAX_ITEMS; i++) for (auto item : items)
{ {
delete mItem[i]; delete item;
mItem[i] = nullptr; };
}
for (int i = 0; i < MAX_SMART_SPRITES; i++) for (auto smartSprite : smartSprites)
{ {
delete mSmartSprite[i]; delete smartSprite;
mSmartSprite[i] = nullptr; };
}
mTextureBalloon->unload(); mTextureBalloon->unload();
delete mTextureBalloon; delete mTextureBalloon;
@@ -277,7 +288,9 @@ void Game::initSin()
{ {
// Vector con los valores del seno para 360 grados // Vector con los valores del seno para 360 grados
for (int i = 0; i < 360; i++) for (int i = 0; i < 360; i++)
{
mSin[i] = SDL_sinf((float)i * 3.14f / 180.0f); mSin[i] = SDL_sinf((float)i * 3.14f / 180.0f);
}
} }
// Inicializa las variables necesarias para la sección 'Game' // Inicializa las variables necesarias para la sección 'Game'
@@ -428,18 +441,6 @@ void Game::init()
mSpriteScoreBoard->setSpriteClip(0, 160, 256, 32); mSpriteScoreBoard->setSpriteClip(0, 160, 256, 32);
mSpritePowerMeter->setSpriteClip(256, 192 - 8, 40, 8); mSpritePowerMeter->setSpriteClip(256, 192 - 8, 40, 8);
// Vector de jugadores
if (mNumPlayers == 1)
{
mPlayer[0]->init(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer);
}
else if (mNumPlayers == 2)
{
mPlayer[0]->init((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer);
mPlayer[1]->init((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer2Legs, mTexturePlayer2Body, mTexturePlayer2Head, mTexturePlayer2Death, mRenderer);
}
// Establece a cero todos los valores del vector de objetos globo // Establece a cero todos los valores del vector de objetos globo
resetBalloons(); resetBalloons();
@@ -459,7 +460,7 @@ void Game::init()
mSpriteGetReady->setSpriteClip(0, 0, 109, 20); mSpriteGetReady->setSpriteClip(0, 0, 109, 20);
// Inicializa el bitmap de 1000 puntos // Inicializa el bitmap de 1000 puntos
m1000Bitmap->init(mTextureGameText, mRenderer); m1000Bitmap->init();
m1000Bitmap->setPosX(0); m1000Bitmap->setPosX(0);
m1000Bitmap->setPosY(0); m1000Bitmap->setPosY(0);
m1000Bitmap->setWidth(26); m1000Bitmap->setWidth(26);
@@ -475,7 +476,7 @@ void Game::init()
m1000Bitmap->setDestY(0); m1000Bitmap->setDestY(0);
// Inicializa el bitmap de 2500 puntos // Inicializa el bitmap de 2500 puntos
m2500Bitmap->init(mTextureGameText, mRenderer); m2500Bitmap->init();
m2500Bitmap->setPosX(0); m2500Bitmap->setPosX(0);
m2500Bitmap->setPosY(0); m2500Bitmap->setPosY(0);
m2500Bitmap->setWidth(28); m2500Bitmap->setWidth(28);
@@ -491,7 +492,7 @@ void Game::init()
m2500Bitmap->setDestY(0); m2500Bitmap->setDestY(0);
// Inicializa el bitmap de 5000 puntos // Inicializa el bitmap de 5000 puntos
m5000Bitmap->init(mTextureGameText, mRenderer); m5000Bitmap->init();
m5000Bitmap->setPosX(0); m5000Bitmap->setPosX(0);
m5000Bitmap->setPosY(0); m5000Bitmap->setPosY(0);
m5000Bitmap->setWidth(28); m5000Bitmap->setWidth(28);
@@ -1497,11 +1498,12 @@ void Game::setHiScore(Uint32 score)
void Game::updateHiScore() void Game::updateHiScore()
{ {
// Si la puntuación actual es mayor que la máxima puntuación // Si la puntuación actual es mayor que la máxima puntuación
for (int i = 0; i < mNumPlayers; i++) for (auto player : players)
if (mPlayer[i]->getScore() > mHiScore) // for (int i = 0; i < mNumPlayers; i++)
if (player->getScore() > mHiScore)
{ {
// Actualiza la máxima puntuación // Actualiza la máxima puntuación
mHiScore = mPlayer[i]->getScore(); mHiScore = player->getScore();
// Almacena la máxima puntuación en el fichero junto con un checksum // Almacena la máxima puntuación en el fichero junto con un checksum
mScoreDataFile[0] = mHiScore; mScoreDataFile[0] = mHiScore;
@@ -1574,21 +1576,21 @@ void Game::renderScoreBoard()
// PLAYER1 - SCORE // PLAYER1 - SCORE
mTextScoreBoard->writeCentered(offsetLeft, offset1, mLang->getText(53)); mTextScoreBoard->writeCentered(offsetLeft, offset1, mLang->getText(53));
mTextScoreBoard->writeCentered(offsetLeft, offset2, updateScoreText(mPlayer[0]->getScore())); mTextScoreBoard->writeCentered(offsetLeft, offset2, updateScoreText(players[0]->getScore()));
// PLAYER1 - MULT // PLAYER1 - MULT
mTextScoreBoard->writeCentered(offsetLeft, offset3, mLang->getText(55)); mTextScoreBoard->writeCentered(offsetLeft, offset3, mLang->getText(55));
mTextScoreBoard->writeCentered(offsetLeft, offset4, std::to_string(mPlayer[0]->getScoreMultiplier()).substr(0, 3)); mTextScoreBoard->writeCentered(offsetLeft, offset4, std::to_string(players[0]->getScoreMultiplier()).substr(0, 3));
if (mNumPlayers == 2) if (mNumPlayers == 2)
{ {
// PLAYER2 - SCORE // PLAYER2 - SCORE
mTextScoreBoard->writeCentered(offsetRight, offset1, mLang->getText(54)); mTextScoreBoard->writeCentered(offsetRight, offset1, mLang->getText(54));
mTextScoreBoard->writeCentered(offsetRight, offset2, updateScoreText(mPlayer[1]->getScore())); mTextScoreBoard->writeCentered(offsetRight, offset2, updateScoreText(players[1]->getScore()));
// PLAYER2 - MULT // PLAYER2 - MULT
mTextScoreBoard->writeCentered(offsetRight, offset3, mLang->getText(55)); mTextScoreBoard->writeCentered(offsetRight, offset3, mLang->getText(55));
mTextScoreBoard->writeCentered(offsetRight, offset4, std::to_string(mPlayer[1]->getScoreMultiplier()).substr(0, 3)); mTextScoreBoard->writeCentered(offsetRight, offset4, std::to_string(players[1]->getScoreMultiplier()).substr(0, 3));
} }
else else
{ {
@@ -1620,24 +1622,29 @@ void Game::renderScoreBoard()
// Actualiza las variables del jugador // Actualiza las variables del jugador
void Game::updatePlayer() void Game::updatePlayer()
{ {
for (int i = 0; i < mNumPlayers; i++) for (auto player : players)
// for (int i = 0; i < mNumPlayers; i++)
{ {
mPlayer[i]->update(); player->update();
// Comprueba la colisión entre el jugador y los globos // Comprueba la colisión entre el jugador y los globos
if (checkPlayerBalloonCollision(i)) if (checkPlayerBalloonCollision(player))
{ {
if (mPlayer[i]->isAlive()) if (player->isAlive())
{ {
if (mDemo.enabled) if (mDemo.enabled)
{
mSection = {PROG_SECTION_TITLE, TITLE_SECTION_INSTRUCTIONS}; mSection = {PROG_SECTION_TITLE, TITLE_SECTION_INSTRUCTIONS};
}
else else
killPlayer(i); {
killPlayer(player);
}
} }
} }
// Comprueba las colisiones entre el jugador y los items // Comprueba las colisiones entre el jugador y los items
checkPlayerItemCollision(i); checkPlayerItemCollision(player);
} }
} }
@@ -1657,11 +1664,12 @@ void Game::updateStage()
destroyAllBalloons(); // Destruye a todos los enemigos destroyAllBalloons(); // Destruye a todos los enemigos
mStage[mCurrentStage].currentPower = 0; // Vuelve a dejar el poder a cero, por lo que hubiera podido subir al destruir todos lo globos mStage[mCurrentStage].currentPower = 0; // Vuelve a dejar el poder a cero, por lo que hubiera podido subir al destruir todos lo globos
mMenaceCurrent = 255; // Sube el nivel de amenaza para que no cree mas globos mMenaceCurrent = 255; // Sube el nivel de amenaza para que no cree mas globos
for (int i = 0; i < mNumPlayers; i++) // Añade un millon de puntos a los jugadores que queden vivos for (auto player : players)
// for (int i = 0; i < mNumPlayers; i++) // Añade un millon de puntos a los jugadores que queden vivos
{ {
if (mPlayer[i]->isAlive()) if (player->isAlive())
{ {
mPlayer[i]->addScore(1000000); player->addScore(1000000);
} }
} }
updateHiScore(); updateHiScore();
@@ -1696,47 +1704,48 @@ void Game::updateDeath()
{ {
// Comprueba si todos los jugadores estan muertos // Comprueba si todos los jugadores estan muertos
bool allAreDead = true; bool allAreDead = true;
for (int i = 0; i < mNumPlayers; i++) for (auto player : players)
// for (int i = 0; i < mNumPlayers; i++)
{ {
allAreDead &= (!mPlayer[i]->isAlive()); allAreDead &= (!player->isAlive());
if (!mPlayer[i]->isAlive()) if (!player->isAlive())
{ {
// Animación // Animación
if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 0) if ((player->getDeathCounter() / 5) % 4 == 0)
{ {
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 0, 24, 24, 24); smartSprites[player->mDeathIndex]->setSpriteClip(24 * 0, 24, 24, 24);
} }
else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 1) else if ((player->getDeathCounter() / 5) % 4 == 1)
{ {
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 1, 24, 24, 24); smartSprites[player->mDeathIndex]->setSpriteClip(24 * 1, 24, 24, 24);
} }
else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 2) else if ((player->getDeathCounter() / 5) % 4 == 2)
{ {
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 2, 24, 24, 24); smartSprites[player->mDeathIndex]->setSpriteClip(24 * 2, 24, 24, 24);
} }
else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 3) else if ((player->getDeathCounter() / 5) % 4 == 3)
{ {
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 3, 24, 24, 24); smartSprites[player->mDeathIndex]->setSpriteClip(24 * 3, 24, 24, 24);
} }
// Rebote en los laterales // Rebote en los laterales
if (mSmartSprite[mPlayer[i]->mDeathIndex]->getVelX() > 0) if (smartSprites[player->mDeathIndex]->getVelX() > 0)
{ {
if (mSmartSprite[mPlayer[i]->mDeathIndex]->getPosX() > (GAME_WIDTH - mSmartSprite[mPlayer[i]->mDeathIndex]->getWidth())) if (smartSprites[player->mDeathIndex]->getPosX() > (GAME_WIDTH - smartSprites[player->mDeathIndex]->getWidth()))
{ {
mSmartSprite[mPlayer[i]->mDeathIndex]->setPosX(GAME_WIDTH - mSmartSprite[mPlayer[i]->mDeathIndex]->getWidth()); smartSprites[player->mDeathIndex]->setPosX(GAME_WIDTH - smartSprites[player->mDeathIndex]->getWidth());
mSmartSprite[mPlayer[i]->mDeathIndex]->setVelX(mSmartSprite[mPlayer[i]->mDeathIndex]->getVelX() * (-1)); smartSprites[player->mDeathIndex]->setVelX(smartSprites[player->mDeathIndex]->getVelX() * (-1));
mSmartSprite[mPlayer[i]->mDeathIndex]->setDestX(mSmartSprite[mPlayer[i]->mDeathIndex]->getDestX() * (-1)); smartSprites[player->mDeathIndex]->setDestX(smartSprites[player->mDeathIndex]->getDestX() * (-1));
} }
} }
else else
{ {
if (mSmartSprite[mPlayer[i]->mDeathIndex]->getPosX() < 0) if (smartSprites[player->mDeathIndex]->getPosX() < 0)
{ {
mSmartSprite[mPlayer[i]->mDeathIndex]->setPosX(0); smartSprites[player->mDeathIndex]->setPosX(0);
mSmartSprite[mPlayer[i]->mDeathIndex]->setVelX(mSmartSprite[mPlayer[i]->mDeathIndex]->getVelX() * (-1)); smartSprites[player->mDeathIndex]->setVelX(smartSprites[player->mDeathIndex]->getVelX() * (-1));
mSmartSprite[mPlayer[i]->mDeathIndex]->setDestX(mSmartSprite[mPlayer[i]->mDeathIndex]->getDestX() * (-1)); smartSprites[player->mDeathIndex]->setDestX(smartSprites[player->mDeathIndex]->getDestX() * (-1));
} }
} }
} }
@@ -1810,37 +1819,29 @@ void Game::renderDeathFade(int counter)
// Actualiza los globos // Actualiza los globos
void Game::updateBalloons() void Game::updateBalloons()
{ {
for (int i = 0; i < MAX_BALLOONS; i++) for (auto balloon : balloons)
mBalloon[i]->update(); // for (int i = 0; i < MAX_BALLOONS; i++)
balloon->update();
} }
// Pinta en pantalla todos los globos activos // Pinta en pantalla todos los globos activos
void Game::renderBalloons() void Game::renderBalloons()
{ {
for (int i = 0; i < MAX_BALLOONS; i++) for (auto balloon : balloons)
// for (int i = 0; i < MAX_BALLOONS; i++)
{ {
mBalloon[i]->render(); balloon->render();
if ((mDebug.enabled) && (mBalloon[i]->isPopping() == false)) if ((mDebug.enabled) && (balloon->isPopping() == false))
mText->writeCentered(mBalloon[i]->getPosX() + (mBalloon[i]->getWidth() / 2), mBalloon[i]->getPosY() - 8, std::to_string(i)); mText->writeCentered(balloon->getPosX() + (balloon->getWidth() / 2), balloon->getPosY() - 8, std::to_string(i));
} }
} }
// Devuelve el primer indice no activo del vector de globos
Uint8 Game::getBalloonFreeIndex()
{
for (int i = 0; i < MAX_BALLOONS; i++)
if (!mBalloon[i]->isEnabled())
return i;
return 0;
}
// Crea un globo nuevo en el vector de globos // Crea un globo nuevo en el vector de globos
Uint8 Game::createNewBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture) Uint8 Game::createNewBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture)
{ {
const Uint8 index = getBalloonFreeIndex(); Balloon *b = new Balloon(x, y, kind, velx, speed, creationtimer, texture, mRenderer);
mBalloon[index]->init(x, y, kind, velx, speed, creationtimer, texture, mRenderer); balloons.push_back(b);
return index; return (Uint8)(balloons.size() - 1);
} }
// Crea una PowerBall // Crea una PowerBall
@@ -1855,7 +1856,9 @@ void Game::createPowerBall()
const int x[3] = {left, center, right}; const int x[3] = {left, center, right};
const int posX = x[rand() % 3]; const int posX = x[rand() % 3];
mBalloon[getBalloonFreeIndex()]->init(posX, posY, POWER_BALL, BALLOON_VELX_POSITIVE * (((rand() % 2) * 2) - 1), mEnemySpeed, 100, mTextureBalloon, mRenderer); Balloon *b = new Balloon(posX, posY, POWER_BALL, BALLOON_VELX_POSITIVE * (((rand() % 2) * 2) - 1), mEnemySpeed, 100, mTextureBalloon, mRenderer);
balloons.push_back(b);
mPowerBallEnabled = true; mPowerBallEnabled = true;
mPowerBallCounter = POWERBALL_COUNTER; mPowerBallCounter = POWERBALL_COUNTER;
} }
@@ -1863,16 +1866,25 @@ void Game::createPowerBall()
// Establece a cero todos los valores del vector de objetos globo // Establece a cero todos los valores del vector de objetos globo
void Game::resetBalloons() void Game::resetBalloons()
{ {
for (int i = 0; i < MAX_BALLOONS; i++) for (auto balloon : balloons)
mBalloon[i]->disable(); // for (int i = 0; i < MAX_BALLOONS; i++)
{
balloon->disable();
}
} }
// Establece la velocidad de los globos // Establece la velocidad de los globos
void Game::setBalloonSpeed(float speed) void Game::setBalloonSpeed(float speed)
{ {
for (int i = 0; i < MAX_BALLOONS; i++) for (auto balloon : balloons)
if (mBalloon[i]->isEnabled())
mBalloon[i]->setSpeed(speed); // for (int i = 0; i < MAX_BALLOONS; i++)
{
if (balloon->isEnabled())
{
balloon->setSpeed(speed);
}
}
} }
// Incrementa la velocidad de los globos // Incrementa la velocidad de los globos
@@ -1951,7 +1963,7 @@ void Game::updateBalloonSpeed()
} }
// Explosiona un globo. Lo destruye y crea otros dos si es el caso // Explosiona un globo. Lo destruye y crea otros dos si es el caso
void Game::popBalloon(Uint8 index) void Game::popBalloon(Balloon *balloon)
{ {
// Aumenta el poder de la fase // Aumenta el poder de la fase
increaseStageCurrentPower(1); increaseStageCurrentPower(1);
@@ -2159,62 +2171,67 @@ bool Game::checkPlayerBalloonCollision(int index)
} }
// Comprueba la colisión entre el jugador y los items // Comprueba la colisión entre el jugador y los items
void Game::checkPlayerItemCollision(int index) void Game::checkPlayerItemCollision(Player *player)
{ {
if (mPlayer[index]->isAlive()) if (!player->isAlive())
for (int i = 0; i < MAX_ITEMS; i++) {
{ return;
if (mItem[i]->isEnabled()) }
{
if (checkCollision(mPlayer[index]->getCollider(), mItem[i]->getCollider()))
{
switch (mItem[i]->getClass())
{
case ITEM_POINTS_1_DISK:
mPlayer[index]->addScore(1000);
updateHiScore();
createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m1000Bitmap->getWidth() / 2), mPlayer[index]->getPosY(), m1000Bitmap);
JA_PlaySound(mSoundItemPickup);
break;
case ITEM_POINTS_2_GAVINA:
mPlayer[index]->addScore(2500);
updateHiScore();
createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m2500Bitmap->getWidth() / 2), mPlayer[index]->getPosY(), m2500Bitmap);
JA_PlaySound(mSoundItemPickup);
break;
case ITEM_POINTS_3_PACMAR:
mPlayer[index]->addScore(5000);
updateHiScore();
createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m5000Bitmap->getWidth() / 2), mPlayer[index]->getPosY(), m5000Bitmap);
JA_PlaySound(mSoundItemPickup);
break;
case ITEM_CLOCK:
enableTimeStopItem();
JA_PlaySound(mSoundItemPickup);
break;
case ITEM_COFFEE:
if (mPlayer[index]->getCoffees() == 2)
{
mPlayer[index]->addScore(5000);
updateHiScore();
createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m5000Bitmap->getWidth() / 2), mPlayer[index]->getPosY(), m5000Bitmap);
}
mPlayer[index]->giveExtraHit();
JA_PlaySound(mSoundItemPickup);
break;
case ITEM_COFFEE_MACHINE:
mPlayer[index]->setPowerUp(true);
JA_PlaySound(mSoundItemPickup);
mCoffeeMachineEnabled = false;
break;
default: for (auto item : items)
break; // for (int i = 0; i < MAX_ITEMS; i++)
{
if (item->isEnabled())
{
if (checkCollision(player->getCollider(), item->getCollider()))
{
switch (item->getClass())
{
case ITEM_POINTS_1_DISK:
player->addScore(1000);
updateHiScore();
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (m1000Bitmap->getWidth() / 2), player->getPosY(), m1000Bitmap);
JA_PlaySound(mSoundItemPickup);
break;
case ITEM_POINTS_2_GAVINA:
player->addScore(2500);
updateHiScore();
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (m2500Bitmap->getWidth() / 2), player->getPosY(), m2500Bitmap);
JA_PlaySound(mSoundItemPickup);
break;
case ITEM_POINTS_3_PACMAR:
player->addScore(5000);
updateHiScore();
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (m5000Bitmap->getWidth() / 2), player->getPosY(), m5000Bitmap);
JA_PlaySound(mSoundItemPickup);
break;
case ITEM_CLOCK:
enableTimeStopItem();
JA_PlaySound(mSoundItemPickup);
break;
case ITEM_COFFEE:
if (player->getCoffees() == 2)
{
player->addScore(5000);
updateHiScore();
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (m5000Bitmap->getWidth() / 2), player->getPosY(), m5000Bitmap);
} }
mItem[i]->erase(); player->giveExtraHit();
JA_PlaySound(mSoundItemPickup);
break;
case ITEM_COFFEE_MACHINE:
player->setPowerUp(true);
JA_PlaySound(mSoundItemPickup);
mCoffeeMachineEnabled = false;
break;
default:
break;
} }
item->erase();
} }
} }
}
} }
// Comprueba y procesa la colisión entre las balas y los globos // Comprueba y procesa la colisión entre las balas y los globos
@@ -2441,7 +2458,7 @@ Uint8 Game::dropItem()
// Crea un objeto item // Crea un objeto item
void Game::createItem(int x, int y, Uint8 kind) void Game::createItem(int x, int y, Uint8 kind)
{ {
mItem[getItemFreeIndex()]->init(kind, x, y, mTextureItems, mRenderer); mItem[getItemFreeIndex()]->init(kind, x, y);
} }
// Crea un objeto SmartSprite para mostrar la puntuación al coger un objeto // Crea un objeto SmartSprite para mostrar la puntuación al coger un objeto
@@ -2494,7 +2511,7 @@ void Game::throwCoffee(int x, int y)
{ {
const Uint8 index = getSmartSpriteFreeIndex(); const Uint8 index = getSmartSpriteFreeIndex();
mSmartSprite[index]->init(mTextureItems, mRenderer); mSmartSprite[index]->init();
mSmartSprite[index]->setPosX(x - 8); mSmartSprite[index]->setPosX(x - 8);
mSmartSprite[index]->setPosY(y - 8); mSmartSprite[index]->setPosY(y - 8);
mSmartSprite[index]->setWidth(16); mSmartSprite[index]->setWidth(16);
@@ -2519,7 +2536,8 @@ void Game::throwPlayer(int x, int y, int index)
const int sentit = ((rand() % 2) ? 1 : -1); const int sentit = ((rand() % 2) ? 1 : -1);
mPlayer[index]->mDeathIndex = getSmartSpriteFreeIndex(); mPlayer[index]->mDeathIndex = getSmartSpriteFreeIndex();
mSmartSprite[mPlayer[index]->mDeathIndex]->init(mPlayer[index]->getDeadTexture(), mRenderer); // mSmartSprite[mPlayer[index]->mDeathIndex]->init(mPlayer[index]->getDeadTexture(), mRenderer);
mSmartSprite[mPlayer[index]->mDeathIndex]->setTexture(mPlayer[index]->getDeadTexture());
mSmartSprite[mPlayer[index]->mDeathIndex]->setPosX(x); mSmartSprite[mPlayer[index]->mDeathIndex]->setPosX(x);
mSmartSprite[mPlayer[index]->mDeathIndex]->setPosY(y); mSmartSprite[mPlayer[index]->mDeathIndex]->setPosY(y);
mSmartSprite[mPlayer[index]->mDeathIndex]->setWidth(24); mSmartSprite[mPlayer[index]->mDeathIndex]->setWidth(24);
@@ -2572,12 +2590,12 @@ void Game::resetSmartSprites()
{ {
for (int i = 0; i < MAX_SMART_SPRITES; i++) for (int i = 0; i < MAX_SMART_SPRITES; i++)
{ {
mSmartSprite[i]->erase(); mSmartSprite[i]->init();
} }
} }
// Acciones a realizar cuando el jugador muere // Acciones a realizar cuando el jugador muere
void Game::killPlayer(int index) void Game::killPlayer(Player *player)
{ {
if (!mPlayer[index]->isInvulnerable()) if (!mPlayer[index]->isInvulnerable())
{ {

View File

@@ -132,29 +132,34 @@ private:
Screen *mScreen; // Objeto encargado de dibujar en pantalla Screen *mScreen; // Objeto encargado de dibujar en pantalla
Asset *mAsset; // Objeto que gestiona todos los ficheros de recursos Asset *mAsset; // Objeto que gestiona todos los ficheros de recursos
Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas
Input *mInput; // Manejador de entrada
int mNumPlayers; // Numero de jugadores // Player *mPlayer[2]; // Vector con los jugadores jugador
Player *mPlayer[2]; // Vector con los jugadores jugador // Balloon *mBalloon[MAX_BALLOONS]; // Vector con los objetos globo
Input *mInput; // Manejador de entrada // Bullet *mBullet[MAX_BULLETS]; // Vector con los objetos bala
// Item *mItem[MAX_ITEMS]; // Vector con los objetos item
// SmartSprite *mSmartSprite[MAX_SMART_SPRITES]; // Vector para almacenar y gestionar SmartSprites
Balloon *mBalloon[MAX_BALLOONS]; // Vector con los objetos globo int mNumPlayers; // Numero de jugadores
Bullet *mBullet[MAX_BULLETS]; // Vector con los objetos bala std::vector<Player *> players; // Vector con los jugadores
Item *mItem[MAX_ITEMS]; // Vector con los objetos item std::vector<Balloon *> balloons; // Vector con los globos
SmartSprite *mSmartSprite[MAX_SMART_SPRITES]; // Vector para almacenar y gestionar SmartSprites std::vector<Bullet *> bullets; // Vector con las balas
std::vector<Item *> items; // Vector con los items
std::vector<SmartSprite *> smartSprites; // Vector con los smartsprites
LTexture *mTextureBalloon; // Textura para los enemigos LTexture *mTextureBalloon; // Textura para los enemigos
LTexture *mTextureBullet; // Textura para las balas LTexture *mTextureBullet; // Textura para las balas
LTexture *mTextureGameBG; // Textura para el fondo del juego LTexture *mTextureGameBG; // Textura para el fondo del juego
LTexture *mTextureGameText; // Textura para los sprites con textos LTexture *mTextureGameText; // Textura para los sprites con textos
LTexture *mTextureItems; // Textura para los items LTexture *mTextureItems; // Textura para los items
LTexture *mTexturePlayer1Head; // Textura para la cabeza del jugador1 LTexture *mTexturePlayer1Head; // Textura para la cabeza del jugador1
LTexture *mTexturePlayer1Body; // Textura para el cuerpo del jugador1 LTexture *mTexturePlayer1Body; // Textura para el cuerpo del jugador1
LTexture *mTexturePlayer1Death; // Textura para la animación de muerte del jugador1 LTexture *mTexturePlayer1Death; // Textura para la animación de muerte del jugador1
LTexture *mTexturePlayer1Legs; // Textura para las piernas del jugador LTexture *mTexturePlayer1Legs; // Textura para las piernas del jugador
LTexture *mTexturePlayer2Head; // Textura para la cabeza del jugador2 LTexture *mTexturePlayer2Head; // Textura para la cabeza del jugador2
LTexture *mTexturePlayer2Body; // Textura para el cuerpo del jugador2 LTexture *mTexturePlayer2Body; // Textura para el cuerpo del jugador2
LTexture *mTexturePlayer2Death; // Textura para la animación de muerte del jugador2 LTexture *mTexturePlayer2Death; // Textura para la animación de muerte del jugador2
LTexture *mTexturePlayer2Legs; // Textura para las piernas del jugador LTexture *mTexturePlayer2Legs; // Textura para las piernas del jugador
Text *mText; // Fuente para los textos del juego Text *mText; // Fuente para los textos del juego
Text *mTextBig; // Fuente de texto grande Text *mTextBig; // Fuente de texto grande
@@ -311,9 +316,6 @@ private:
// Pinta en pantalla todos los globos activos // Pinta en pantalla todos los globos activos
void renderBalloons(); void renderBalloons();
// Devuelve el primer indice no activo del vector de globos
Uint8 getBalloonFreeIndex();
// Crea un globo nuevo en el vector de globos // Crea un globo nuevo en el vector de globos
Uint8 createNewBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 stoppedcounter, LTexture *texture); Uint8 createNewBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 stoppedcounter, LTexture *texture);
@@ -336,10 +338,10 @@ private:
void updateBalloonSpeed(); void updateBalloonSpeed();
// Explosiona un globo. Lo destruye y crea otros dos si es el caso // Explosiona un globo. Lo destruye y crea otros dos si es el caso
void popBalloon(Uint8 index); void popBalloon(Balloon *balloon);
// Explosiona un globo. Lo destruye // Explosiona un globo. Lo destruye
void destroyBalloon(Uint8 index); void destroyBalloon(Balloon *balloon);
// Explosiona todos los globos // Explosiona todos los globos
void popAllBalloons(); void popAllBalloons();
@@ -357,10 +359,10 @@ private:
Uint8 countBalloons(); Uint8 countBalloons();
// Comprueba la colisión entre el jugador y los globos activos // Comprueba la colisión entre el jugador y los globos activos
bool checkPlayerBalloonCollision(int index); bool checkPlayerBalloonCollision(Player *player);
// Comprueba la colisión entre el jugador y los items // Comprueba la colisión entre el jugador y los items
void checkPlayerItemCollision(int index); void checkPlayerItemCollision(Player *player);
// Comprueba la colisión entre las balas y los globos // Comprueba la colisión entre las balas y los globos
void checkBulletBalloonCollision(); void checkBulletBalloonCollision();
@@ -371,9 +373,6 @@ private:
// Pinta las balas activas // Pinta las balas activas
void renderBullets(); void renderBullets();
// Devuelve el primer indice no activo del vector de balas
Uint8 getBulletFreeIndex();
// Establece a cero todos los valores del vector de objetos bala // Establece a cero todos los valores del vector de objetos bala
void resetBullets(); void resetBullets();
@@ -386,9 +385,6 @@ private:
// Pinta los items activos // Pinta los items activos
void renderItems(); void renderItems();
// Devuelve el primer indice no activo del vector de items
Uint8 getItemFreeIndex();
// Establece a cero todos los valores del vector de objetos item // Establece a cero todos los valores del vector de objetos item
void resetItems(); void resetItems();
@@ -419,14 +415,11 @@ private:
// Pinta los SmartSprites activos // Pinta los SmartSprites activos
void renderSmartSprites(); void renderSmartSprites();
// Devuelve el primer indice no activo del vector de SmartSprites
Uint8 getSmartSpriteFreeIndex();
// Establece a cero todos los valores del vector de objetos SmafrtSprite // Establece a cero todos los valores del vector de objetos SmafrtSprite
void resetSmartSprites(); void resetSmartSprites();
// Acciones a realizar cuando el jugador muere // Acciones a realizar cuando el jugador muere
void killPlayer(int index); void killPlayer(Player *player);
// Obtiene el valor de la variable // Obtiene el valor de la variable
Uint8 getSubsection(); Uint8 getSubsection();

View File

@@ -13,7 +13,7 @@ Instructions::Instructions(SDL_Renderer *renderer, Screen *screen, Asset *mAsset
// Reserva memoria para los punteros // Reserva memoria para los punteros
mEventHandler = new SDL_Event(); mEventHandler = new SDL_Event();
mItemTexture = new LTexture(mRenderer); mItemTexture = new LTexture(mRenderer,mAsset->get("items.png"));
mSprite = new Sprite(0, 0, GAME_WIDTH, GAME_HEIGHT, mItemTexture, mRenderer); mSprite = new Sprite(0, 0, GAME_WIDTH, GAME_HEIGHT, mItemTexture, mRenderer);
mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer); mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer);
@@ -50,22 +50,9 @@ Instructions::~Instructions()
mBackbuffer = nullptr; mBackbuffer = nullptr;
} }
// Carga los recursos necesarios para la sección 'Instructions'
bool Instructions::loadMedia()
{
bool success = true;
success &= loadTextureFromFile(mItemTexture, mAsset->get("items.png"), mRenderer);
return success;
}
// Inicializa las variables necesarias para la sección 'Instructions' // Inicializa las variables necesarias para la sección 'Instructions'
void Instructions::init() void Instructions::init()
{ {
// Carga los recursos
loadMedia();
// Inicializa variables // Inicializa variables
mSection.name = SELF; mSection.name = SELF;
mTicks = 0; mTicks = 0;

View File

@@ -38,9 +38,6 @@ private:
Uint8 mTicksSpeed; // Velocidad a la que se repiten los bucles del programa Uint8 mTicksSpeed; // Velocidad a la que se repiten los bucles del programa
bool mManualQuit; // Indica si se quiere salir del modo manual bool mManualQuit; // Indica si se quiere salir del modo manual
// Carga los recursos
bool loadMedia();
// Actualiza las variables // Actualiza las variables
void update(); void update();

View File

@@ -11,12 +11,12 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *mAsset, Lang *lang)
// Reserva memoria para los punteros // Reserva memoria para los punteros
mEventHandler = new SDL_Event(); mEventHandler = new SDL_Event();
mBitmapTexture = new LTexture(mRenderer); mBitmapTexture = new LTexture(mRenderer,mAsset->get("intro.png"));
mText = new Text(mAsset->get("nokia.png"), mAsset->get("nokia.txt"), mRenderer); mText = new Text(mAsset->get("nokia.png"), mAsset->get("nokia.txt"), mRenderer);
for (int i = 0; i < INTRO_TOTAL_BITMAPS; i++) for (int i = 0; i < INTRO_TOTAL_BITMAPS; i++)
{ {
mBitmap[i] = new SmartSprite(); mBitmap[i] = new SmartSprite(mBitmapTexture, mRenderer);
} }
for (int i = 0; i < INTRO_TOTAL_TEXTS; i++) for (int i = 0; i < INTRO_TOTAL_TEXTS; i++)
@@ -67,12 +67,14 @@ void Intro::init()
// Inicializa el vector de eventos de la intro // Inicializa el vector de eventos de la intro
for (int i = 0; i < INTRO_TOTAL_EVENTS; i++) for (int i = 0; i < INTRO_TOTAL_EVENTS; i++)
{
mEvents[i] = EVENT_WAITING; mEvents[i] = EVENT_WAITING;
}
// Inicializa los bitmaps de la intro // Inicializa los bitmaps de la intro
for (int i = 0; i < INTRO_TOTAL_BITMAPS; i++) for (int i = 0; i < INTRO_TOTAL_BITMAPS; i++)
{ {
mBitmap[i]->init(mBitmapTexture, mRenderer); mBitmap[i]->init();
mBitmap[i]->setId(i); mBitmap[i]->setId(i);
mBitmap[i]->setIntroEvents(&mEvents[0]); mBitmap[i]->setIntroEvents(&mEvents[0]);
mBitmap[i]->setWidth(128); mBitmap[i]->setWidth(128);
@@ -191,9 +193,6 @@ bool Intro::loadMedia()
{ {
bool success = true; bool success = true;
// Texturas
success &= loadTextureFromFile(mBitmapTexture, mAsset->get("intro.png"), mRenderer);
// Musicas // Musicas
mMusic = JA_LoadMusic(mAsset->get("intro.ogg").c_str()); mMusic = JA_LoadMusic(mAsset->get("intro.ogg").c_str());

View File

@@ -2,12 +2,23 @@
#include "item.h" #include "item.h"
// Constructor // Constructor
Item::Item(Uint8 value, float x, float y, LTexture *texture, SDL_Renderer *renderer) Item::Item(LTexture *texture, SDL_Renderer *renderer)
{ {
mSprite = new AnimatedSprite(texture, renderer); mSprite = new AnimatedSprite(texture, renderer);
mClass = NO_KIND; init(NO_KIND, 0.0f, 0.0f);
}
mClass = value; // Destructor
Item::~Item()
{
delete mSprite;
mSprite = nullptr;
}
// Inicializador
void Item::init(Uint8 type, float x, float y)
{
mClass = type;
mEnabled = true; mEnabled = true;
mTimeToLive = 600; mTimeToLive = 600;
mPosX = x; mPosX = x;
@@ -32,7 +43,7 @@ Item::Item(Uint8 value, float x, float y, LTexture *texture, SDL_Renderer *rende
mSprite->setPosX(mPosX); mSprite->setPosX(mPosX);
mSprite->setPosY(mPosY); mSprite->setPosY(mPosY);
switch (value) switch (type)
{ {
case NO_KIND: case NO_KIND:
mEnabled = false; mEnabled = false;
@@ -93,13 +104,6 @@ Item::Item(Uint8 value, float x, float y, LTexture *texture, SDL_Renderer *rende
} }
} }
// Destructor
Item::~Item()
{
delete mSprite;
mSprite = nullptr;
}
// Centra el objeto en la posición X // Centra el objeto en la posición X
void Item::allignTo(int x) void Item::allignTo(int x)
{ {
@@ -195,7 +199,7 @@ void Item::move()
// Pone a cero todos los valores del objeto // Pone a cero todos los valores del objeto
void Item::erase() void Item::erase()
{ {
//init(NO_KIND, 0, 0, nullptr, nullptr); // init(NO_KIND, 0, 0, nullptr, nullptr);
} }
// Actualiza el objeto a su posicion, animación y controla los contadores // Actualiza el objeto a su posicion, animación y controla los contadores
@@ -205,7 +209,7 @@ void Item::update()
{ {
move(); move();
shiftColliders(); shiftColliders();
mSprite->animate(0); mSprite->animate();
updateTimeToLive(); updateTimeToLive();
checkTimeToLive(); checkTimeToLive();
} }

View File

@@ -43,11 +43,14 @@ public:
Uint16 mTimeToLive; // Temporizador con el tiempo que el objeto está presente Uint16 mTimeToLive; // Temporizador con el tiempo que el objeto está presente
// Constructor // Constructor
Item(Uint8 value, float x, float y, LTexture *texture, SDL_Renderer *renderer); Item(LTexture *texture, SDL_Renderer *renderer);
// Destructor // Destructor
~Item(); ~Item();
// Inicializador
void init(Uint8 type, float x, float y);
// Centra el objeto en la posición X // Centra el objeto en la posición X
void allignTo(int x); void allignTo(int x);

View File

@@ -907,3 +907,12 @@ void Menu::setBackgroundType(int value)
{ {
backgroundType = value; backgroundType = value;
} }
// Establece la fuente de texto que se utilizará
void Menu::setText(std::string font_png, std::string font_txt)
{
if (!text)
{
text = new Text(asset->get(font_png), asset->get(font_txt), renderer);
}
}

View File

@@ -217,8 +217,8 @@ public:
// Establece el tipo de fondo del menu // Establece el tipo de fondo del menu
void setBackgroundType(int value); void setBackgroundType(int value);
// Establece la fuente de texto que se utilizará
// hacer procedimientos para establecer el titulo, la x, la y, la tipografia y el tipo de fondo void setText(std::string font_png, std::string font_txt);
}; };
#endif #endif

View File

@@ -2,11 +2,20 @@
#include "player.h" #include "player.h"
// Constructor // Constructor
Player::Player() Player::Player(float x, int y, LTexture *textureLegs, LTexture *textureBody, LTexture *textureHead, LTexture *textureDead, SDL_Renderer *renderer)
{ {
mSpriteLegs = new AnimatedSprite(); mSpriteLegs = new AnimatedSprite(textureLegs, renderer);
mSpriteBody = new AnimatedSprite(); mSpriteBody = new AnimatedSprite(textureBody, renderer);
mSpriteHead = new AnimatedSprite(); mSpriteHead = new AnimatedSprite(textureHead, renderer);
// Copia punteros
mPlayerDeadTexture = textureDead;
// Establece la posición inicial del jugador
mPosX = x;
mPosY = y;
init();
} }
// Destructor // Destructor
@@ -23,11 +32,8 @@ Player::~Player()
} }
// Iniciador // Iniciador
void Player::init(float x, int y, LTexture *textureLegs, LTexture *textureBody, LTexture *textureHead, LTexture *textureDead, SDL_Renderer *renderer) void Player::init()
{ {
// Copia punteros
mPlayerDeadTexture = textureDead;
// Inicializa variables de estado // Inicializa variables de estado
mAlive = true; mAlive = true;
mDeathCounter = DEATH_COUNTER; mDeathCounter = DEATH_COUNTER;
@@ -47,10 +53,6 @@ void Player::init(float x, int y, LTexture *textureLegs, LTexture *textureBody,
mWidth = 3 * BLOCK; mWidth = 3 * BLOCK;
mHeight = 3 * BLOCK; mHeight = 3 * BLOCK;
// Establece la posición inicial del jugador
mPosX = x;
mPosY = y;
// Establece el tamaño del circulo de colisión // Establece el tamaño del circulo de colisión
mCollider.r = 7; mCollider.r = 7;
@@ -75,8 +77,8 @@ void Player::init(float x, int y, LTexture *textureLegs, LTexture *textureBody,
// Inicia el sprite // Inicia el sprite
mSpriteLegs->init(); mSpriteLegs->init();
mSpriteBody->init(textureBody, renderer); mSpriteBody->init();
mSpriteHead->init(textureHead, renderer); mSpriteHead->init();
// Establece el alto y ancho del sprite // Establece el alto y ancho del sprite
mSpriteLegs->setWidth(mWidth); mSpriteLegs->setWidth(mWidth);

View File

@@ -97,13 +97,13 @@ public:
Uint16 mPowerUpCounter; // Temporizador para el modo PowerUp Uint16 mPowerUpCounter; // Temporizador para el modo PowerUp
// Constructor // Constructor
Player(); Player(float x, int y, LTexture *textureLegs, LTexture *textureBody, LTexture *textureHead, LTexture *textureDead, SDL_Renderer *renderer);
// Destructor // Destructor
~Player(); ~Player();
// Iniciador // Iniciador
void init(float x, int y, LTexture *textureLegs, LTexture *textureBody, LTexture *textureHead, LTexture *textureDead, SDL_Renderer *renderer); void init();
// Actua en consecuencia de la entrada recibida // Actua en consecuencia de la entrada recibida
void setInput(Uint8 input); void setInput(Uint8 input);

View File

@@ -2,8 +2,10 @@
#include "smartsprite.h" #include "smartsprite.h"
// Constructor // Constructor
SmartSprite::SmartSprite() SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer)
{ {
setTexture(texture);
setRenderer(renderer);
} }
// Destructor // Destructor
@@ -12,11 +14,8 @@ SmartSprite::~SmartSprite()
} }
// Inicializador // Inicializador
void SmartSprite::init(LTexture *texture, SDL_Renderer *renderer) void SmartSprite::init()
{ {
setTexture(texture);
setRenderer(renderer);
setPosX(0); setPosX(0);
setPosY(0); setPosY(0);
setWidth(0); setWidth(0);
@@ -48,12 +47,6 @@ void SmartSprite::init(LTexture *texture, SDL_Renderer *renderer)
introEvents = nullptr; introEvents = nullptr;
} }
// Pone a cero los elementos del objeto
void SmartSprite::erase()
{
init(nullptr, nullptr);
}
// Obtiene el valor de la variable // Obtiene el valor de la variable
bool SmartSprite::isEnabled() bool SmartSprite::isEnabled()
{ {

View File

@@ -21,16 +21,13 @@ private:
public: public:
// Constructor // Constructor
SmartSprite(); SmartSprite(LTexture *texture, SDL_Renderer *renderer);
// Destructor // Destructor
~SmartSprite(); ~SmartSprite();
// Inicializador // Inicializador
void init(LTexture *texture, SDL_Renderer *renderer); void init();
// Pone a cero los elementos del objeto
void erase();
// Obtiene el valor de la variable // Obtiene el valor de la variable
bool isEnabled(); bool isEnabled();

View File

@@ -15,18 +15,21 @@ Title::Title(SDL_Window *window, SDL_Renderer *renderer, Screen *screen, Input *
// Reserva memoria para los punteros propios // Reserva memoria para los punteros propios
mEventHandler = new SDL_Event(); mEventHandler = new SDL_Event();
mFade = new Fade(renderer); mFade = new Fade(renderer);
mTitleTexture = new LTexture(mRenderer);
mItemsTexture = new LTexture(mRenderer); mTitleTexture = new LTexture(mRenderer, mAsset->get("title.png"));
mCoffeeBitmap = new SmartSprite(); mItemsTexture = new LTexture(mRenderer, mAsset->get("items.png"));
mCrisisBitmap = new SmartSprite();
mDustBitmapL = new AnimatedSprite(); mCoffeeBitmap = new SmartSprite(mTitleTexture, mRenderer);
mDustBitmapR = new AnimatedSprite(); mCrisisBitmap = new SmartSprite(mTitleTexture, mRenderer);
mDustBitmapL = new AnimatedSprite(mTitleTexture, mRenderer);
mDustBitmapR = new AnimatedSprite(mTitleTexture, mRenderer);
mTile = new Sprite(); mTile = new Sprite();
mGradient = new Sprite(); mGradient = new Sprite();
mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer); mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer);
mText2 = new Text(mAsset->get("8bithud.png"), mAsset->get("8bithud.txt"), mRenderer); mText2 = new Text(mAsset->get("8bithud.png"), mAsset->get("8bithud.txt"), mRenderer);
mMenu.title = new Menu(mRenderer, mText, mInput, mAsset); mMenu.title = new Menu(mRenderer, mInput, mAsset);
mMenu.options = new Menu(mRenderer, mText, mInput, mAsset); mMenu.options = new Menu(mRenderer, mInput, mAsset);
// Crea la textura para el mosaico de fondo // Crea la textura para el mosaico de fondo
mBackground = SDL_CreateTexture(mRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, GAME_WIDTH * 2, GAME_HEIGHT * 2); mBackground = SDL_CreateTexture(mRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, GAME_WIDTH * 2, GAME_HEIGHT * 2);
@@ -67,14 +70,6 @@ Title::~Title()
delete mItemsTexture; delete mItemsTexture;
mItemsTexture = nullptr; mItemsTexture = nullptr;
mTextTexture->unload();
delete mTextTexture;
mTextTexture = nullptr;
mTextTexture2->unload();
delete mTextTexture2;
mTextTexture2 = nullptr;
delete mCoffeeBitmap; delete mCoffeeBitmap;
mCoffeeBitmap = nullptr; mCoffeeBitmap = nullptr;
@@ -154,7 +149,6 @@ void Title::init(bool demo, Uint8 subsection)
} }
// Inicializa el bitmap de Coffee // Inicializa el bitmap de Coffee
mCoffeeBitmap->init(mTitleTexture, mRenderer);
mCoffeeBitmap->setId(0); mCoffeeBitmap->setId(0);
mCoffeeBitmap->setIntroEvents(&mEvents[0]); mCoffeeBitmap->setIntroEvents(&mEvents[0]);
mCoffeeBitmap->setPosX(45); mCoffeeBitmap->setPosX(45);
@@ -172,7 +166,6 @@ void Title::init(bool demo, Uint8 subsection)
mCoffeeBitmap->setDestY(11); mCoffeeBitmap->setDestY(11);
// Inicializa el bitmap de Crisis // Inicializa el bitmap de Crisis
mCrisisBitmap->init(mTitleTexture, mRenderer);
mCrisisBitmap->setId(1); mCrisisBitmap->setId(1);
mCrisisBitmap->setIntroEvents(&mEvents[0]); mCrisisBitmap->setIntroEvents(&mEvents[0]);
mCrisisBitmap->setPosX(60); mCrisisBitmap->setPosX(60);
@@ -190,14 +183,12 @@ void Title::init(bool demo, Uint8 subsection)
mCrisisBitmap->setDestY(57); mCrisisBitmap->setDestY(57);
// Inicializa el bitmap de DustRight // Inicializa el bitmap de DustRight
mDustBitmapR->init(mTitleTexture, mRenderer);
mDustBitmapR->setPosX(218); mDustBitmapR->setPosX(218);
mDustBitmapR->setPosY(47); mDustBitmapR->setPosY(47);
mDustBitmapR->setWidth(16); mDustBitmapR->setWidth(16);
mDustBitmapR->setHeight(14); mDustBitmapR->setHeight(14);
mDustBitmapR->setCurrentFrame(0); mDustBitmapR->setCurrentFrame(0);
mDustBitmapR->setAnimationCounter(0); mDustBitmapR->setAnimationCounter(0);
mDustBitmapR->setAnimationNumFrames(0, 7);
mDustBitmapR->setAnimationSpeed(0, 8); mDustBitmapR->setAnimationSpeed(0, 8);
mDustBitmapR->setAnimationLoop(0, false); mDustBitmapR->setAnimationLoop(0, false);
mDustBitmapR->setAnimationFrames(0, 0, 160 + (mDustBitmapR->getWidth() * 0), 80, mDustBitmapR->getWidth(), mDustBitmapR->getHeight()); mDustBitmapR->setAnimationFrames(0, 0, 160 + (mDustBitmapR->getWidth() * 0), 80, mDustBitmapR->getWidth(), mDustBitmapR->getHeight());
@@ -209,14 +200,12 @@ void Title::init(bool demo, Uint8 subsection)
mDustBitmapR->setAnimationFrames(0, 6, 160 + (mDustBitmapR->getWidth() * 6), 80, mDustBitmapR->getWidth(), mDustBitmapR->getHeight()); mDustBitmapR->setAnimationFrames(0, 6, 160 + (mDustBitmapR->getWidth() * 6), 80, mDustBitmapR->getWidth(), mDustBitmapR->getHeight());
// Inicializa el bitmap de DustLeft // Inicializa el bitmap de DustLeft
mDustBitmapL->init(mTitleTexture, mRenderer);
mDustBitmapL->setPosX(33); mDustBitmapL->setPosX(33);
mDustBitmapL->setPosY(47); mDustBitmapL->setPosY(47);
mDustBitmapL->setWidth(16); mDustBitmapL->setWidth(16);
mDustBitmapL->setHeight(14); mDustBitmapL->setHeight(14);
mDustBitmapL->setCurrentFrame(0); mDustBitmapL->setCurrentFrame(0);
mDustBitmapL->setAnimationCounter(0); mDustBitmapL->setAnimationCounter(0);
mDustBitmapL->setAnimationNumFrames(0, 7);
mDustBitmapL->setAnimationSpeed(0, 8); mDustBitmapL->setAnimationSpeed(0, 8);
mDustBitmapL->setAnimationLoop(0, false); mDustBitmapL->setAnimationLoop(0, false);
mDustBitmapL->setAnimationFrames(0, 0, 160 + (mDustBitmapL->getWidth() * 0), 66, mDustBitmapL->getWidth(), mDustBitmapL->getHeight()); mDustBitmapL->setAnimationFrames(0, 0, 160 + (mDustBitmapL->getWidth() * 0), 66, mDustBitmapL->getWidth(), mDustBitmapL->getHeight());
@@ -233,7 +222,9 @@ void Title::init(bool demo, Uint8 subsection)
// Inicializa el vector de eventos de la pantalla de titulo // Inicializa el vector de eventos de la pantalla de titulo
for (int i = 0; i < TITLE_TOTAL_EVENTS; i++) for (int i = 0; i < TITLE_TOTAL_EVENTS; i++)
{
mEvents[i] = EVENT_WAITING; mEvents[i] = EVENT_WAITING;
}
// Crea el mosaico de fondo del titulo // Crea el mosaico de fondo del titulo
createTiledBackground(); createTiledBackground();
@@ -246,22 +237,30 @@ void Title::init(bool demo, Uint8 subsection)
// Inicializa los valores del vector con los valores del seno // Inicializa los valores del vector con los valores del seno
for (int i = 0; i < 360; i++) for (int i = 0; i < 360; i++)
{
mSin[i] = SDL_sinf((float)i * 3.14f / 180.0f); mSin[i] = SDL_sinf((float)i * 3.14f / 180.0f);
}
// Inicializa los objetos de menu // Inicializa los objetos de menu
mMenu.title->init("TITLE", 0, (14 * BLOCK) + 4, MENU_BACKGROUND_TRANSPARENT); mMenu.title->setText(mAsset->get("smb2.png"), mAsset->get("smb2.txt"));
mMenu.title->setName("TITLE");
mMenu.title->setPos(0, (14 * BLOCK) + 4);
mMenu.title->setBackgroundType(MENU_BACKGROUND_TRANSPARENT);
mMenu.title->addItem(mLang->getText(51), 2); // 1 PLAYER mMenu.title->addItem(mLang->getText(51), 2); // 1 PLAYER
mMenu.title->addItem(mLang->getText(52), 7); // 2 PLAYERS mMenu.title->addItem(mLang->getText(52), 7); // 2 PLAYERS
mMenu.title->addItem(mLang->getText(1), 7); // OPTIONS mMenu.title->addItem(mLang->getText(1), 7); // OPTIONS
mMenu.title->addItem(mLang->getText(3)); // QUIT mMenu.title->addItem(mLang->getText(3)); // QUIT
mMenu.title->setDefaultActionWhenCancel(3); mMenu.title->setDefaultActionWhenCancel(3);
mMenu.title->setBackgroundColor(0x30, 0x30, 0x40, 192); mMenu.title->setBackgroundColor({0x30, 0x30, 0x40}, 192);
mMenu.title->setSelectorColor(0xe5, 0x1c, 0x23, 0); mMenu.title->setSelectorColor({0xe5, 0x1c, 0x23}, 0);
mMenu.title->setSelectorTextColor(0xFF, 0xB4, 0x00); mMenu.title->setSelectorTextColor({0xFF, 0xB4, 0x00});
mMenu.title->centerMenuOnX(SCREEN_CENTER_X); mMenu.title->centerMenuOnX(SCREEN_CENTER_X);
mMenu.title->centerMenuElementsOnX(); mMenu.title->centerMenuElementsOnX();
mMenu.options->init("OPTIONS", 0, BLOCK, MENU_BACKGROUND_TRANSPARENT); mMenu.options->setText(mAsset->get("smb2.png"), mAsset->get("smb2.txt"));
mMenu.options->setName("OPTIONS");
mMenu.options->setPos(0, BLOCK);
mMenu.options->setBackgroundType(MENU_BACKGROUND_TRANSPARENT);
mMenu.options->addItem(mLang->getText(59), 7); // (0) DIFFICULTY mMenu.options->addItem(mLang->getText(59), 7); // (0) DIFFICULTY
mMenu.options->addItem(mLang->getText(62), 2, true, false, true); // (1) PLAYER 1 CONTROLS mMenu.options->addItem(mLang->getText(62), 2, true, false, true); // (1) PLAYER 1 CONTROLS
mMenu.options->addItem(mLang->getText(69), 7, false, false); // (2) KEYBOARD mMenu.options->addItem(mLang->getText(69), 7, false, false); // (2) KEYBOARD
@@ -277,9 +276,9 @@ void Title::init(bool demo, Uint8 subsection)
mMenu.options->addItem(mLang->getText(9), 2); // (12) ACCEPT mMenu.options->addItem(mLang->getText(9), 2); // (12) ACCEPT
mMenu.options->addItem(mLang->getText(10)); // (13) CANCEL mMenu.options->addItem(mLang->getText(10)); // (13) CANCEL
mMenu.options->setDefaultActionWhenCancel(13); mMenu.options->setDefaultActionWhenCancel(13);
mMenu.options->setBackgroundColor(0x30, 0x30, 0x40, 192); mMenu.options->setBackgroundColor({0x30, 0x30, 0x40}, 192);
mMenu.options->setSelectorColor(0xe5, 0x1c, 0x23, 255); mMenu.options->setSelectorColor({0xe5, 0x1c, 0x23}, 255);
mMenu.options->setSelectorTextColor(0xFF, 0xF1, 0x76); mMenu.options->setSelectorTextColor({0xFF, 0xF1, 0x76});
mMenu.options->centerMenuOnX(SCREEN_CENTER_X); mMenu.options->centerMenuOnX(SCREEN_CENTER_X);
mMenu.options->centerMenuOnY(SCREEN_CENTER_Y); mMenu.options->centerMenuOnY(SCREEN_CENTER_Y);
@@ -293,12 +292,6 @@ bool Title::loadMedia()
// Indicador de éxito en la carga // Indicador de éxito en la carga
bool success = true; bool success = true;
// Texturas
success &= loadTextureFromFile(mTitleTexture, mAsset->get("title.png"), mRenderer);
success &= loadTextureFromFile(mItemsTexture, mAsset->get("items.png"), mRenderer);
success &= loadTextureFromFile(mTextTexture, mAsset->get("smb2.png"), mRenderer);
success &= loadTextureFromFile(mTextTexture2, mAsset->get("8bithud.png"), mRenderer);
// Sonidos // Sonidos
mSound = JA_LoadSound(mAsset->get("title.wav").c_str()); mSound = JA_LoadSound(mAsset->get("title.wav").c_str());