Me voy a la cama. Sigo con la reescritura de todo el código
BIN
data/config/config.bin
Normal file
BIN
data/config/score.bin
Normal file
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 644 B After Width: | Height: | Size: 644 B |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 795 B After Width: | Height: | Size: 795 B |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 785 B After Width: | Height: | Size: 785 B |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 654 B After Width: | Height: | Size: 654 B |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
@@ -2,22 +2,11 @@
|
||||
#include "balloon.h"
|
||||
|
||||
// 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();
|
||||
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_POP = 12;
|
||||
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));
|
||||
}
|
||||
|
||||
// Destructor
|
||||
Balloon::~Balloon()
|
||||
{
|
||||
delete mSprite;
|
||||
mSprite = nullptr;
|
||||
}
|
||||
|
||||
// Centra el globo en la posición X
|
||||
void Balloon::allignTo(int x)
|
||||
{
|
||||
|
||||
@@ -146,14 +146,11 @@ private:
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
Balloon();
|
||||
Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture, SDL_Renderer *renderer);
|
||||
|
||||
// Destructor
|
||||
~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
|
||||
void allignTo(int x);
|
||||
|
||||
|
||||
@@ -177,75 +177,73 @@ bool Director::initSDL()
|
||||
// Crea el indice de ficheros
|
||||
bool Director::setFileList()
|
||||
{
|
||||
// Ficheros binarios
|
||||
asset->add("data/score.bin", t_data, false);
|
||||
asset->add("data/demo.bin", t_data);
|
||||
asset->add("data/config.bin", t_data, false);
|
||||
// Ficheros de configuración
|
||||
asset->add("data/config/score.bin", t_data, false);
|
||||
asset->add("data/config/demo.bin", t_data);
|
||||
asset->add("data/config/config.bin", t_data, false);
|
||||
asset->add("data/config/gamecontrollerdb.txt", t_data);
|
||||
|
||||
// Musicas
|
||||
asset->add("media/music/intro.ogg", t_music);
|
||||
asset->add("media/music/playing.ogg", t_music);
|
||||
asset->add("media/music/title.ogg", t_music);
|
||||
asset->add("data/music/intro.ogg", t_music);
|
||||
asset->add("data/music/playing.ogg", t_music);
|
||||
asset->add("data/music/title.ogg", t_music);
|
||||
|
||||
// Sonidos
|
||||
asset->add("media/sound/balloon.wav", t_sound);
|
||||
asset->add("media/sound/bubble1.wav", t_sound);
|
||||
asset->add("media/sound/bubble2.wav", t_sound);
|
||||
asset->add("media/sound/bubble3.wav", t_sound);
|
||||
asset->add("media/sound/bubble4.wav", t_sound);
|
||||
asset->add("media/sound/bullet.wav", t_sound);
|
||||
asset->add("media/sound/coffeeout.wav", t_sound);
|
||||
asset->add("media/sound/hiscore.wav", t_sound);
|
||||
asset->add("media/sound/itemdrop.wav", t_sound);
|
||||
asset->add("media/sound/itempickup.wav", t_sound);
|
||||
asset->add("media/sound/menu_cancel.wav", t_sound);
|
||||
asset->add("media/sound/menu_move.wav", t_sound);
|
||||
asset->add("media/sound/menu_select.wav", t_sound);
|
||||
asset->add("media/sound/player_collision.wav", t_sound);
|
||||
asset->add("media/sound/stage_change.wav", t_sound);
|
||||
asset->add("media/sound/title.wav", t_sound);
|
||||
asset->add("media/sound/clock.wav", t_sound);
|
||||
asset->add("media/sound/powerball.wav", t_sound);
|
||||
asset->add("data/sound/balloon.wav", t_sound);
|
||||
asset->add("data/sound/bubble1.wav", t_sound);
|
||||
asset->add("data/sound/bubble2.wav", t_sound);
|
||||
asset->add("data/sound/bubble3.wav", t_sound);
|
||||
asset->add("data/sound/bubble4.wav", t_sound);
|
||||
asset->add("data/sound/bullet.wav", t_sound);
|
||||
asset->add("data/sound/coffeeout.wav", t_sound);
|
||||
asset->add("data/sound/hiscore.wav", t_sound);
|
||||
asset->add("data/sound/itemdrop.wav", t_sound);
|
||||
asset->add("data/sound/itempickup.wav", t_sound);
|
||||
asset->add("data/sound/menu_cancel.wav", t_sound);
|
||||
asset->add("data/sound/menu_move.wav", t_sound);
|
||||
asset->add("data/sound/menu_select.wav", t_sound);
|
||||
asset->add("data/sound/player_collision.wav", t_sound);
|
||||
asset->add("data/sound/stage_change.wav", t_sound);
|
||||
asset->add("data/sound/title.wav", t_sound);
|
||||
asset->add("data/sound/clock.wav", t_sound);
|
||||
asset->add("data/sound/powerball.wav", t_sound);
|
||||
|
||||
// Texturas
|
||||
asset->add("media/gfx/balloon.png", t_bitmap);
|
||||
asset->add("media/gfx/bullet.png", t_bitmap);
|
||||
asset->add("media/gfx/game_bg.png", t_bitmap);
|
||||
asset->add("media/gfx/game_text.png", t_bitmap);
|
||||
asset->add("media/gfx/intro.png", t_bitmap);
|
||||
asset->add("media/gfx/items.png", t_bitmap);
|
||||
asset->add("media/gfx/logo.png", t_bitmap);
|
||||
asset->add("media/gfx/player1_body.png", t_bitmap);
|
||||
asset->add("media/gfx/player1_death.png", t_bitmap);
|
||||
asset->add("media/gfx/player1_legs.png", t_bitmap);
|
||||
asset->add("media/gfx/title.png", t_bitmap);
|
||||
asset->add("media/gfx/player1_head.png", t_bitmap);
|
||||
asset->add("media/gfx/player2_body.png", t_bitmap);
|
||||
asset->add("media/gfx/player2_death.png", t_bitmap);
|
||||
asset->add("media/gfx/player2_legs.png", t_bitmap);
|
||||
asset->add("media/gfx/player2_head.png", t_bitmap);
|
||||
asset->add("data/gfx/balloon.png", t_bitmap);
|
||||
asset->add("data/gfx/bullet.png", t_bitmap);
|
||||
asset->add("data/gfx/game_bg.png", t_bitmap);
|
||||
asset->add("data/gfx/game_text.png", t_bitmap);
|
||||
asset->add("data/gfx/intro.png", t_bitmap);
|
||||
asset->add("data/gfx/items.png", t_bitmap);
|
||||
asset->add("data/gfx/logo.png", t_bitmap);
|
||||
asset->add("data/gfx/player1_body.png", t_bitmap);
|
||||
asset->add("data/gfx/player1_death.png", t_bitmap);
|
||||
asset->add("data/gfx/player1_legs.png", t_bitmap);
|
||||
asset->add("data/gfx/title.png", t_bitmap);
|
||||
asset->add("data/gfx/player1_head.png", t_bitmap);
|
||||
asset->add("data/gfx/player2_body.png", t_bitmap);
|
||||
asset->add("data/gfx/player2_death.png", t_bitmap);
|
||||
asset->add("data/gfx/player2_legs.png", t_bitmap);
|
||||
asset->add("data/gfx/player2_head.png", t_bitmap);
|
||||
|
||||
// Fuentes
|
||||
asset->add("media/font/8bithud.png", t_font);
|
||||
asset->add("media/font/8bithud.txt", t_font);
|
||||
asset->add("media/font/nokia.png", t_font);
|
||||
asset->add("media/font/nokia_big2.png", t_font);
|
||||
asset->add("media/font/nokia.txt", t_font);
|
||||
asset->add("media/font/nokia2.png", t_font);
|
||||
asset->add("media/font/nokia2.txt", t_font);
|
||||
asset->add("media/font/nokia_big2.txt", t_font);
|
||||
asset->add("media/font/smb2_big.png", t_font);
|
||||
asset->add("media/font/smb2_big.txt", t_font);
|
||||
asset->add("media/font/smb2.png", t_font);
|
||||
asset->add("media/font/smb2.txt", t_font);
|
||||
asset->add("data/font/8bithud.png", t_font);
|
||||
asset->add("data/font/8bithud.txt", t_font);
|
||||
asset->add("data/font/nokia.png", t_font);
|
||||
asset->add("data/font/nokia_big2.png", t_font);
|
||||
asset->add("data/font/nokia.txt", t_font);
|
||||
asset->add("data/font/nokia2.png", t_font);
|
||||
asset->add("data/font/nokia2.txt", t_font);
|
||||
asset->add("data/font/nokia_big2.txt", t_font);
|
||||
asset->add("data/font/smb2_big.png", t_font);
|
||||
asset->add("data/font/smb2_big.txt", t_font);
|
||||
asset->add("data/font/smb2.png", t_font);
|
||||
asset->add("data/font/smb2.txt", t_font);
|
||||
|
||||
// Textos
|
||||
asset->add("media/lang/es_ES.txt", t_lang);
|
||||
asset->add("media/lang/en_UK.txt", t_lang);
|
||||
asset->add("media/lang/ba_BA.txt", t_lang);
|
||||
|
||||
// DATA
|
||||
asset->add("data/gamecontrollerdb.txt", t_data);
|
||||
asset->add("data/lang/es_ES.txt", t_lang);
|
||||
asset->add("data/lang/en_UK.txt", t_lang);
|
||||
asset->add("data/lang/ba_BA.txt", t_lang);
|
||||
|
||||
return asset->check();
|
||||
}
|
||||
|
||||
336
source/game.cpp
@@ -24,7 +24,21 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
|
||||
mDifficulty = mOptions->difficulty;
|
||||
|
||||
// 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();
|
||||
}
|
||||
@@ -41,13 +55,13 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
|
||||
|
||||
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++)
|
||||
{
|
||||
mSmartSprite[i] = new SmartSprite();
|
||||
}
|
||||
mSmartSprite[i] = new SmartSprite(nullptr, mRenderer);
|
||||
}*/
|
||||
|
||||
mTextureBalloon = new LTexture(mRenderer, mAsset->get("balloon.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);
|
||||
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);
|
||||
m1000Bitmap = new SmartSprite();
|
||||
m2500Bitmap = new SmartSprite();
|
||||
m5000Bitmap = new SmartSprite();
|
||||
|
||||
m1000Bitmap = new SmartSprite(mTextureGameText, mRenderer);
|
||||
m2500Bitmap = new SmartSprite(mTextureGameText, mRenderer);
|
||||
m5000Bitmap = new SmartSprite(mTextureGameText, 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);
|
||||
mSpriteGradient = new Sprite(0, 0, GAME_WIDTH, GAME_HEIGHT, mTextureGameBG, mRenderer);
|
||||
@@ -105,35 +121,30 @@ Game::~Game()
|
||||
mLang = nullptr;
|
||||
mInput = nullptr;
|
||||
|
||||
for (int i = 0; i < mNumPlayers; i++)
|
||||
for (auto player : players)
|
||||
{
|
||||
delete mPlayer[i];
|
||||
mPlayer[i] = nullptr;
|
||||
}
|
||||
delete player;
|
||||
};
|
||||
|
||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
||||
for (auto ballon : ballons)
|
||||
{
|
||||
delete mBalloon[i];
|
||||
mBalloon[i] = nullptr;
|
||||
}
|
||||
delete ballon;
|
||||
};
|
||||
|
||||
for (int i = 0; i < MAX_BULLETS; i++)
|
||||
for (auto bullet : bullets)
|
||||
{
|
||||
delete mBullet[i];
|
||||
mBullet[i] = nullptr;
|
||||
}
|
||||
delete bullet;
|
||||
};
|
||||
|
||||
for (int i = 0; i < MAX_ITEMS; i++)
|
||||
for (auto item : items)
|
||||
{
|
||||
delete mItem[i];
|
||||
mItem[i] = nullptr;
|
||||
}
|
||||
delete item;
|
||||
};
|
||||
|
||||
for (int i = 0; i < MAX_SMART_SPRITES; i++)
|
||||
for (auto smartSprite : smartSprites)
|
||||
{
|
||||
delete mSmartSprite[i];
|
||||
mSmartSprite[i] = nullptr;
|
||||
}
|
||||
delete smartSprite;
|
||||
};
|
||||
|
||||
mTextureBalloon->unload();
|
||||
delete mTextureBalloon;
|
||||
@@ -277,7 +288,9 @@ void Game::initSin()
|
||||
{
|
||||
// Vector con los valores del seno para 360 grados
|
||||
for (int i = 0; i < 360; i++)
|
||||
{
|
||||
mSin[i] = SDL_sinf((float)i * 3.14f / 180.0f);
|
||||
}
|
||||
}
|
||||
|
||||
// Inicializa las variables necesarias para la sección 'Game'
|
||||
@@ -428,18 +441,6 @@ void Game::init()
|
||||
mSpriteScoreBoard->setSpriteClip(0, 160, 256, 32);
|
||||
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
|
||||
resetBalloons();
|
||||
|
||||
@@ -459,7 +460,7 @@ void Game::init()
|
||||
mSpriteGetReady->setSpriteClip(0, 0, 109, 20);
|
||||
|
||||
// Inicializa el bitmap de 1000 puntos
|
||||
m1000Bitmap->init(mTextureGameText, mRenderer);
|
||||
m1000Bitmap->init();
|
||||
m1000Bitmap->setPosX(0);
|
||||
m1000Bitmap->setPosY(0);
|
||||
m1000Bitmap->setWidth(26);
|
||||
@@ -475,7 +476,7 @@ void Game::init()
|
||||
m1000Bitmap->setDestY(0);
|
||||
|
||||
// Inicializa el bitmap de 2500 puntos
|
||||
m2500Bitmap->init(mTextureGameText, mRenderer);
|
||||
m2500Bitmap->init();
|
||||
m2500Bitmap->setPosX(0);
|
||||
m2500Bitmap->setPosY(0);
|
||||
m2500Bitmap->setWidth(28);
|
||||
@@ -491,7 +492,7 @@ void Game::init()
|
||||
m2500Bitmap->setDestY(0);
|
||||
|
||||
// Inicializa el bitmap de 5000 puntos
|
||||
m5000Bitmap->init(mTextureGameText, mRenderer);
|
||||
m5000Bitmap->init();
|
||||
m5000Bitmap->setPosX(0);
|
||||
m5000Bitmap->setPosY(0);
|
||||
m5000Bitmap->setWidth(28);
|
||||
@@ -1497,11 +1498,12 @@ void Game::setHiScore(Uint32 score)
|
||||
void Game::updateHiScore()
|
||||
{
|
||||
// Si la puntuación actual es mayor que la máxima puntuación
|
||||
for (int i = 0; i < mNumPlayers; i++)
|
||||
if (mPlayer[i]->getScore() > mHiScore)
|
||||
for (auto player : players)
|
||||
// for (int i = 0; i < mNumPlayers; i++)
|
||||
if (player->getScore() > mHiScore)
|
||||
{
|
||||
// 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
|
||||
mScoreDataFile[0] = mHiScore;
|
||||
@@ -1574,21 +1576,21 @@ void Game::renderScoreBoard()
|
||||
|
||||
// PLAYER1 - SCORE
|
||||
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
|
||||
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)
|
||||
{
|
||||
// PLAYER2 - SCORE
|
||||
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
|
||||
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
|
||||
{
|
||||
@@ -1620,24 +1622,29 @@ void Game::renderScoreBoard()
|
||||
// Actualiza las variables del jugador
|
||||
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
|
||||
if (checkPlayerBalloonCollision(i))
|
||||
if (checkPlayerBalloonCollision(player))
|
||||
{
|
||||
if (mPlayer[i]->isAlive())
|
||||
if (player->isAlive())
|
||||
{
|
||||
if (mDemo.enabled)
|
||||
{
|
||||
mSection = {PROG_SECTION_TITLE, TITLE_SECTION_INSTRUCTIONS};
|
||||
}
|
||||
else
|
||||
killPlayer(i);
|
||||
{
|
||||
killPlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
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
|
||||
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();
|
||||
@@ -1696,47 +1704,48 @@ void Game::updateDeath()
|
||||
{
|
||||
// Comprueba si todos los jugadores estan muertos
|
||||
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
|
||||
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
|
||||
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());
|
||||
mSmartSprite[mPlayer[i]->mDeathIndex]->setVelX(mSmartSprite[mPlayer[i]->mDeathIndex]->getVelX() * (-1));
|
||||
mSmartSprite[mPlayer[i]->mDeathIndex]->setDestX(mSmartSprite[mPlayer[i]->mDeathIndex]->getDestX() * (-1));
|
||||
smartSprites[player->mDeathIndex]->setPosX(GAME_WIDTH - smartSprites[player->mDeathIndex]->getWidth());
|
||||
smartSprites[player->mDeathIndex]->setVelX(smartSprites[player->mDeathIndex]->getVelX() * (-1));
|
||||
smartSprites[player->mDeathIndex]->setDestX(smartSprites[player->mDeathIndex]->getDestX() * (-1));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mSmartSprite[mPlayer[i]->mDeathIndex]->getPosX() < 0)
|
||||
if (smartSprites[player->mDeathIndex]->getPosX() < 0)
|
||||
{
|
||||
mSmartSprite[mPlayer[i]->mDeathIndex]->setPosX(0);
|
||||
mSmartSprite[mPlayer[i]->mDeathIndex]->setVelX(mSmartSprite[mPlayer[i]->mDeathIndex]->getVelX() * (-1));
|
||||
mSmartSprite[mPlayer[i]->mDeathIndex]->setDestX(mSmartSprite[mPlayer[i]->mDeathIndex]->getDestX() * (-1));
|
||||
smartSprites[player->mDeathIndex]->setPosX(0);
|
||||
smartSprites[player->mDeathIndex]->setVelX(smartSprites[player->mDeathIndex]->getVelX() * (-1));
|
||||
smartSprites[player->mDeathIndex]->setDestX(smartSprites[player->mDeathIndex]->getDestX() * (-1));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1810,37 +1819,29 @@ void Game::renderDeathFade(int counter)
|
||||
// Actualiza los globos
|
||||
void Game::updateBalloons()
|
||||
{
|
||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
||||
mBalloon[i]->update();
|
||||
for (auto balloon : balloons)
|
||||
// for (int i = 0; i < MAX_BALLOONS; i++)
|
||||
balloon->update();
|
||||
}
|
||||
|
||||
// Pinta en pantalla todos los globos activos
|
||||
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();
|
||||
if ((mDebug.enabled) && (mBalloon[i]->isPopping() == false))
|
||||
mText->writeCentered(mBalloon[i]->getPosX() + (mBalloon[i]->getWidth() / 2), mBalloon[i]->getPosY() - 8, std::to_string(i));
|
||||
balloon->render();
|
||||
if ((mDebug.enabled) && (balloon->isPopping() == false))
|
||||
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
|
||||
Uint8 Game::createNewBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 creationtimer, LTexture *texture)
|
||||
{
|
||||
const Uint8 index = getBalloonFreeIndex();
|
||||
mBalloon[index]->init(x, y, kind, velx, speed, creationtimer, texture, mRenderer);
|
||||
return index;
|
||||
Balloon *b = new Balloon(x, y, kind, velx, speed, creationtimer, texture, mRenderer);
|
||||
balloons.push_back(b);
|
||||
return (Uint8)(balloons.size() - 1);
|
||||
}
|
||||
|
||||
// Crea una PowerBall
|
||||
@@ -1855,7 +1856,9 @@ void Game::createPowerBall()
|
||||
const int x[3] = {left, center, right};
|
||||
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;
|
||||
mPowerBallCounter = POWERBALL_COUNTER;
|
||||
}
|
||||
@@ -1863,16 +1866,25 @@ void Game::createPowerBall()
|
||||
// Establece a cero todos los valores del vector de objetos globo
|
||||
void Game::resetBalloons()
|
||||
{
|
||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
||||
mBalloon[i]->disable();
|
||||
for (auto balloon : balloons)
|
||||
// for (int i = 0; i < MAX_BALLOONS; i++)
|
||||
{
|
||||
balloon->disable();
|
||||
}
|
||||
}
|
||||
|
||||
// Establece la velocidad de los globos
|
||||
void Game::setBalloonSpeed(float speed)
|
||||
{
|
||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
||||
if (mBalloon[i]->isEnabled())
|
||||
mBalloon[i]->setSpeed(speed);
|
||||
for (auto balloon : balloons)
|
||||
|
||||
// for (int i = 0; i < MAX_BALLOONS; i++)
|
||||
{
|
||||
if (balloon->isEnabled())
|
||||
{
|
||||
balloon->setSpeed(speed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
void Game::popBalloon(Uint8 index)
|
||||
void Game::popBalloon(Balloon *balloon)
|
||||
{
|
||||
// Aumenta el poder de la fase
|
||||
increaseStageCurrentPower(1);
|
||||
@@ -2159,62 +2171,67 @@ bool Game::checkPlayerBalloonCollision(int index)
|
||||
}
|
||||
|
||||
// Comprueba la colisión entre el jugador y los items
|
||||
void Game::checkPlayerItemCollision(int index)
|
||||
void Game::checkPlayerItemCollision(Player *player)
|
||||
{
|
||||
if (mPlayer[index]->isAlive())
|
||||
for (int i = 0; i < MAX_ITEMS; i++)
|
||||
{
|
||||
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;
|
||||
if (!player->isAlive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
for (auto item : items)
|
||||
// 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
|
||||
@@ -2441,7 +2458,7 @@ Uint8 Game::dropItem()
|
||||
// Crea un objeto item
|
||||
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
|
||||
@@ -2494,7 +2511,7 @@ void Game::throwCoffee(int x, int y)
|
||||
{
|
||||
const Uint8 index = getSmartSpriteFreeIndex();
|
||||
|
||||
mSmartSprite[index]->init(mTextureItems, mRenderer);
|
||||
mSmartSprite[index]->init();
|
||||
mSmartSprite[index]->setPosX(x - 8);
|
||||
mSmartSprite[index]->setPosY(y - 8);
|
||||
mSmartSprite[index]->setWidth(16);
|
||||
@@ -2519,7 +2536,8 @@ void Game::throwPlayer(int x, int y, int index)
|
||||
const int sentit = ((rand() % 2) ? 1 : -1);
|
||||
|
||||
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]->setPosY(y);
|
||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setWidth(24);
|
||||
@@ -2572,12 +2590,12 @@ void Game::resetSmartSprites()
|
||||
{
|
||||
for (int i = 0; i < MAX_SMART_SPRITES; i++)
|
||||
{
|
||||
mSmartSprite[i]->erase();
|
||||
mSmartSprite[i]->init();
|
||||
}
|
||||
}
|
||||
|
||||
// Acciones a realizar cuando el jugador muere
|
||||
void Game::killPlayer(int index)
|
||||
void Game::killPlayer(Player *player)
|
||||
{
|
||||
if (!mPlayer[index]->isInvulnerable())
|
||||
{
|
||||
|
||||
@@ -132,29 +132,34 @@ private:
|
||||
Screen *mScreen; // Objeto encargado de dibujar en pantalla
|
||||
Asset *mAsset; // Objeto que gestiona todos los ficheros de recursos
|
||||
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
|
||||
Input *mInput; // Manejador de entrada
|
||||
// Player *mPlayer[2]; // Vector con los jugadores jugador
|
||||
// Balloon *mBalloon[MAX_BALLOONS]; // Vector con los objetos globo
|
||||
// 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
|
||||
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
|
||||
int mNumPlayers; // Numero de jugadores
|
||||
std::vector<Player *> players; // Vector con los jugadores
|
||||
std::vector<Balloon *> balloons; // Vector con los globos
|
||||
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 *mTextureBullet; // Textura para las balas
|
||||
LTexture *mTextureGameBG; // Textura para el fondo del juego
|
||||
LTexture *mTextureGameText; // Textura para los sprites con textos
|
||||
LTexture *mTextureItems; // Textura para los items
|
||||
LTexture *mTexturePlayer1Head; // Textura para la cabeza del jugador1
|
||||
LTexture *mTexturePlayer1Body; // Textura para el cuerpo del jugador1
|
||||
LTexture *mTexturePlayer1Death; // Textura para la animación de muerte del jugador1
|
||||
LTexture *mTexturePlayer1Legs; // Textura para las piernas del jugador
|
||||
LTexture *mTexturePlayer2Head; // Textura para la cabeza del jugador2
|
||||
LTexture *mTexturePlayer2Body; // Textura para el cuerpo del jugador2
|
||||
LTexture *mTexturePlayer2Death; // Textura para la animación de muerte del jugador2
|
||||
LTexture *mTexturePlayer2Legs; // Textura para las piernas del jugador
|
||||
LTexture *mTextureBalloon; // Textura para los enemigos
|
||||
LTexture *mTextureBullet; // Textura para las balas
|
||||
LTexture *mTextureGameBG; // Textura para el fondo del juego
|
||||
LTexture *mTextureGameText; // Textura para los sprites con textos
|
||||
LTexture *mTextureItems; // Textura para los items
|
||||
LTexture *mTexturePlayer1Head; // Textura para la cabeza del jugador1
|
||||
LTexture *mTexturePlayer1Body; // Textura para el cuerpo del jugador1
|
||||
LTexture *mTexturePlayer1Death; // Textura para la animación de muerte del jugador1
|
||||
LTexture *mTexturePlayer1Legs; // Textura para las piernas del jugador
|
||||
LTexture *mTexturePlayer2Head; // Textura para la cabeza del jugador2
|
||||
LTexture *mTexturePlayer2Body; // Textura para el cuerpo del jugador2
|
||||
LTexture *mTexturePlayer2Death; // Textura para la animación de muerte del jugador2
|
||||
LTexture *mTexturePlayer2Legs; // Textura para las piernas del jugador
|
||||
|
||||
Text *mText; // Fuente para los textos del juego
|
||||
Text *mTextBig; // Fuente de texto grande
|
||||
@@ -311,9 +316,6 @@ private:
|
||||
// Pinta en pantalla todos los globos activos
|
||||
void renderBalloons();
|
||||
|
||||
// Devuelve el primer indice no activo del vector de globos
|
||||
Uint8 getBalloonFreeIndex();
|
||||
|
||||
// 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);
|
||||
|
||||
@@ -336,10 +338,10 @@ private:
|
||||
void updateBalloonSpeed();
|
||||
|
||||
// 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
|
||||
void destroyBalloon(Uint8 index);
|
||||
void destroyBalloon(Balloon *balloon);
|
||||
|
||||
// Explosiona todos los globos
|
||||
void popAllBalloons();
|
||||
@@ -357,10 +359,10 @@ private:
|
||||
Uint8 countBalloons();
|
||||
|
||||
// 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
|
||||
void checkPlayerItemCollision(int index);
|
||||
void checkPlayerItemCollision(Player *player);
|
||||
|
||||
// Comprueba la colisión entre las balas y los globos
|
||||
void checkBulletBalloonCollision();
|
||||
@@ -371,9 +373,6 @@ private:
|
||||
// Pinta las balas activas
|
||||
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
|
||||
void resetBullets();
|
||||
|
||||
@@ -386,9 +385,6 @@ private:
|
||||
// Pinta los items activos
|
||||
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
|
||||
void resetItems();
|
||||
|
||||
@@ -419,14 +415,11 @@ private:
|
||||
// Pinta los SmartSprites activos
|
||||
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
|
||||
void resetSmartSprites();
|
||||
|
||||
// Acciones a realizar cuando el jugador muere
|
||||
void killPlayer(int index);
|
||||
void killPlayer(Player *player);
|
||||
|
||||
// Obtiene el valor de la variable
|
||||
Uint8 getSubsection();
|
||||
|
||||
@@ -13,7 +13,7 @@ Instructions::Instructions(SDL_Renderer *renderer, Screen *screen, Asset *mAsset
|
||||
|
||||
// Reserva memoria para los punteros
|
||||
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);
|
||||
mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer);
|
||||
|
||||
@@ -50,22 +50,9 @@ Instructions::~Instructions()
|
||||
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'
|
||||
void Instructions::init()
|
||||
{
|
||||
// Carga los recursos
|
||||
loadMedia();
|
||||
|
||||
// Inicializa variables
|
||||
mSection.name = SELF;
|
||||
mTicks = 0;
|
||||
|
||||
@@ -38,9 +38,6 @@ private:
|
||||
Uint8 mTicksSpeed; // Velocidad a la que se repiten los bucles del programa
|
||||
bool mManualQuit; // Indica si se quiere salir del modo manual
|
||||
|
||||
// Carga los recursos
|
||||
bool loadMedia();
|
||||
|
||||
// Actualiza las variables
|
||||
void update();
|
||||
|
||||
|
||||
@@ -11,12 +11,12 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *mAsset, Lang *lang)
|
||||
|
||||
// Reserva memoria para los punteros
|
||||
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);
|
||||
|
||||
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++)
|
||||
@@ -45,7 +45,7 @@ Intro::~Intro()
|
||||
delete mBitmap[i];
|
||||
mBitmap[i] = nullptr;
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < INTRO_TOTAL_TEXTS; i++)
|
||||
{
|
||||
delete mWriter[i];
|
||||
@@ -67,12 +67,14 @@ void Intro::init()
|
||||
|
||||
// Inicializa el vector de eventos de la intro
|
||||
for (int i = 0; i < INTRO_TOTAL_EVENTS; i++)
|
||||
{
|
||||
mEvents[i] = EVENT_WAITING;
|
||||
}
|
||||
|
||||
// Inicializa los bitmaps de la intro
|
||||
for (int i = 0; i < INTRO_TOTAL_BITMAPS; i++)
|
||||
{
|
||||
mBitmap[i]->init(mBitmapTexture, mRenderer);
|
||||
mBitmap[i]->init();
|
||||
mBitmap[i]->setId(i);
|
||||
mBitmap[i]->setIntroEvents(&mEvents[0]);
|
||||
mBitmap[i]->setWidth(128);
|
||||
@@ -191,9 +193,6 @@ bool Intro::loadMedia()
|
||||
{
|
||||
bool success = true;
|
||||
|
||||
// Texturas
|
||||
success &= loadTextureFromFile(mBitmapTexture, mAsset->get("intro.png"), mRenderer);
|
||||
|
||||
// Musicas
|
||||
mMusic = JA_LoadMusic(mAsset->get("intro.ogg").c_str());
|
||||
|
||||
|
||||
@@ -2,12 +2,23 @@
|
||||
#include "item.h"
|
||||
|
||||
// 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);
|
||||
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;
|
||||
mTimeToLive = 600;
|
||||
mPosX = x;
|
||||
@@ -32,7 +43,7 @@ Item::Item(Uint8 value, float x, float y, LTexture *texture, SDL_Renderer *rende
|
||||
mSprite->setPosX(mPosX);
|
||||
mSprite->setPosY(mPosY);
|
||||
|
||||
switch (value)
|
||||
switch (type)
|
||||
{
|
||||
case NO_KIND:
|
||||
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
|
||||
void Item::allignTo(int x)
|
||||
{
|
||||
@@ -195,7 +199,7 @@ void Item::move()
|
||||
// Pone a cero todos los valores del objeto
|
||||
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
|
||||
@@ -205,7 +209,7 @@ void Item::update()
|
||||
{
|
||||
move();
|
||||
shiftColliders();
|
||||
mSprite->animate(0);
|
||||
mSprite->animate();
|
||||
updateTimeToLive();
|
||||
checkTimeToLive();
|
||||
}
|
||||
|
||||
@@ -43,11 +43,14 @@ public:
|
||||
Uint16 mTimeToLive; // Temporizador con el tiempo que el objeto está presente
|
||||
|
||||
// Constructor
|
||||
Item(Uint8 value, float x, float y, LTexture *texture, SDL_Renderer *renderer);
|
||||
Item(LTexture *texture, SDL_Renderer *renderer);
|
||||
|
||||
// Destructor
|
||||
~Item();
|
||||
|
||||
// Inicializador
|
||||
void init(Uint8 type, float x, float y);
|
||||
|
||||
// Centra el objeto en la posición X
|
||||
void allignTo(int x);
|
||||
|
||||
|
||||
@@ -906,4 +906,13 @@ void Menu::setPos(int x, int y)
|
||||
void Menu::setBackgroundType(int 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);
|
||||
}
|
||||
}
|
||||
@@ -217,8 +217,8 @@ public:
|
||||
// Establece el tipo de fondo del menu
|
||||
void setBackgroundType(int value);
|
||||
|
||||
|
||||
// hacer procedimientos para establecer el titulo, la x, la y, la tipografia y el tipo de fondo
|
||||
// Establece la fuente de texto que se utilizará
|
||||
void setText(std::string font_png, std::string font_txt);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,11 +2,20 @@
|
||||
#include "player.h"
|
||||
|
||||
// Constructor
|
||||
Player::Player()
|
||||
Player::Player(float x, int y, LTexture *textureLegs, LTexture *textureBody, LTexture *textureHead, LTexture *textureDead, SDL_Renderer *renderer)
|
||||
{
|
||||
mSpriteLegs = new AnimatedSprite();
|
||||
mSpriteBody = new AnimatedSprite();
|
||||
mSpriteHead = new AnimatedSprite();
|
||||
mSpriteLegs = new AnimatedSprite(textureLegs, renderer);
|
||||
mSpriteBody = new AnimatedSprite(textureBody, renderer);
|
||||
mSpriteHead = new AnimatedSprite(textureHead, renderer);
|
||||
|
||||
// Copia punteros
|
||||
mPlayerDeadTexture = textureDead;
|
||||
|
||||
// Establece la posición inicial del jugador
|
||||
mPosX = x;
|
||||
mPosY = y;
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
// Destructor
|
||||
@@ -23,11 +32,8 @@ Player::~Player()
|
||||
}
|
||||
|
||||
// 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
|
||||
mAlive = true;
|
||||
mDeathCounter = DEATH_COUNTER;
|
||||
@@ -47,10 +53,6 @@ void Player::init(float x, int y, LTexture *textureLegs, LTexture *textureBody,
|
||||
mWidth = 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
|
||||
mCollider.r = 7;
|
||||
|
||||
@@ -75,8 +77,8 @@ void Player::init(float x, int y, LTexture *textureLegs, LTexture *textureBody,
|
||||
|
||||
// Inicia el sprite
|
||||
mSpriteLegs->init();
|
||||
mSpriteBody->init(textureBody, renderer);
|
||||
mSpriteHead->init(textureHead, renderer);
|
||||
mSpriteBody->init();
|
||||
mSpriteHead->init();
|
||||
|
||||
// Establece el alto y ancho del sprite
|
||||
mSpriteLegs->setWidth(mWidth);
|
||||
|
||||
@@ -97,13 +97,13 @@ public:
|
||||
Uint16 mPowerUpCounter; // Temporizador para el modo PowerUp
|
||||
|
||||
// Constructor
|
||||
Player();
|
||||
Player(float x, int y, LTexture *textureLegs, LTexture *textureBody, LTexture *textureHead, LTexture *textureDead, SDL_Renderer *renderer);
|
||||
|
||||
// Destructor
|
||||
~Player();
|
||||
|
||||
// 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
|
||||
void setInput(Uint8 input);
|
||||
|
||||
@@ -2,8 +2,10 @@
|
||||
#include "smartsprite.h"
|
||||
|
||||
// Constructor
|
||||
SmartSprite::SmartSprite()
|
||||
SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer)
|
||||
{
|
||||
setTexture(texture);
|
||||
setRenderer(renderer);
|
||||
}
|
||||
|
||||
// Destructor
|
||||
@@ -12,11 +14,8 @@ SmartSprite::~SmartSprite()
|
||||
}
|
||||
|
||||
// Inicializador
|
||||
void SmartSprite::init(LTexture *texture, SDL_Renderer *renderer)
|
||||
void SmartSprite::init()
|
||||
{
|
||||
setTexture(texture);
|
||||
setRenderer(renderer);
|
||||
|
||||
setPosX(0);
|
||||
setPosY(0);
|
||||
setWidth(0);
|
||||
@@ -48,12 +47,6 @@ void SmartSprite::init(LTexture *texture, SDL_Renderer *renderer)
|
||||
introEvents = nullptr;
|
||||
}
|
||||
|
||||
// Pone a cero los elementos del objeto
|
||||
void SmartSprite::erase()
|
||||
{
|
||||
init(nullptr, nullptr);
|
||||
}
|
||||
|
||||
// Obtiene el valor de la variable
|
||||
bool SmartSprite::isEnabled()
|
||||
{
|
||||
|
||||
@@ -21,16 +21,13 @@ private:
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
SmartSprite();
|
||||
SmartSprite(LTexture *texture, SDL_Renderer *renderer);
|
||||
|
||||
// Destructor
|
||||
~SmartSprite();
|
||||
|
||||
// Inicializador
|
||||
void init(LTexture *texture, SDL_Renderer *renderer);
|
||||
|
||||
// Pone a cero los elementos del objeto
|
||||
void erase();
|
||||
void init();
|
||||
|
||||
// Obtiene el valor de la variable
|
||||
bool isEnabled();
|
||||
|
||||
@@ -15,18 +15,21 @@ Title::Title(SDL_Window *window, SDL_Renderer *renderer, Screen *screen, Input *
|
||||
// Reserva memoria para los punteros propios
|
||||
mEventHandler = new SDL_Event();
|
||||
mFade = new Fade(renderer);
|
||||
mTitleTexture = new LTexture(mRenderer);
|
||||
mItemsTexture = new LTexture(mRenderer);
|
||||
mCoffeeBitmap = new SmartSprite();
|
||||
mCrisisBitmap = new SmartSprite();
|
||||
mDustBitmapL = new AnimatedSprite();
|
||||
mDustBitmapR = new AnimatedSprite();
|
||||
|
||||
mTitleTexture = new LTexture(mRenderer, mAsset->get("title.png"));
|
||||
mItemsTexture = new LTexture(mRenderer, mAsset->get("items.png"));
|
||||
|
||||
mCoffeeBitmap = new SmartSprite(mTitleTexture, mRenderer);
|
||||
mCrisisBitmap = new SmartSprite(mTitleTexture, mRenderer);
|
||||
mDustBitmapL = new AnimatedSprite(mTitleTexture, mRenderer);
|
||||
mDustBitmapR = new AnimatedSprite(mTitleTexture, mRenderer);
|
||||
|
||||
mTile = new Sprite();
|
||||
mGradient = new Sprite();
|
||||
mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer);
|
||||
mText2 = new Text(mAsset->get("8bithud.png"), mAsset->get("8bithud.txt"), mRenderer);
|
||||
mMenu.title = new Menu(mRenderer, mText, mInput, mAsset);
|
||||
mMenu.options = new Menu(mRenderer, mText, mInput, mAsset);
|
||||
mMenu.title = new Menu(mRenderer, mInput, mAsset);
|
||||
mMenu.options = new Menu(mRenderer, mInput, mAsset);
|
||||
|
||||
// Crea la textura para el mosaico de fondo
|
||||
mBackground = SDL_CreateTexture(mRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, GAME_WIDTH * 2, GAME_HEIGHT * 2);
|
||||
@@ -67,14 +70,6 @@ Title::~Title()
|
||||
delete mItemsTexture;
|
||||
mItemsTexture = nullptr;
|
||||
|
||||
mTextTexture->unload();
|
||||
delete mTextTexture;
|
||||
mTextTexture = nullptr;
|
||||
|
||||
mTextTexture2->unload();
|
||||
delete mTextTexture2;
|
||||
mTextTexture2 = nullptr;
|
||||
|
||||
delete mCoffeeBitmap;
|
||||
mCoffeeBitmap = nullptr;
|
||||
|
||||
@@ -154,7 +149,6 @@ void Title::init(bool demo, Uint8 subsection)
|
||||
}
|
||||
|
||||
// Inicializa el bitmap de Coffee
|
||||
mCoffeeBitmap->init(mTitleTexture, mRenderer);
|
||||
mCoffeeBitmap->setId(0);
|
||||
mCoffeeBitmap->setIntroEvents(&mEvents[0]);
|
||||
mCoffeeBitmap->setPosX(45);
|
||||
@@ -172,7 +166,6 @@ void Title::init(bool demo, Uint8 subsection)
|
||||
mCoffeeBitmap->setDestY(11);
|
||||
|
||||
// Inicializa el bitmap de Crisis
|
||||
mCrisisBitmap->init(mTitleTexture, mRenderer);
|
||||
mCrisisBitmap->setId(1);
|
||||
mCrisisBitmap->setIntroEvents(&mEvents[0]);
|
||||
mCrisisBitmap->setPosX(60);
|
||||
@@ -190,14 +183,12 @@ void Title::init(bool demo, Uint8 subsection)
|
||||
mCrisisBitmap->setDestY(57);
|
||||
|
||||
// Inicializa el bitmap de DustRight
|
||||
mDustBitmapR->init(mTitleTexture, mRenderer);
|
||||
mDustBitmapR->setPosX(218);
|
||||
mDustBitmapR->setPosY(47);
|
||||
mDustBitmapR->setWidth(16);
|
||||
mDustBitmapR->setHeight(14);
|
||||
mDustBitmapR->setCurrentFrame(0);
|
||||
mDustBitmapR->setAnimationCounter(0);
|
||||
mDustBitmapR->setAnimationNumFrames(0, 7);
|
||||
mDustBitmapR->setAnimationSpeed(0, 8);
|
||||
mDustBitmapR->setAnimationLoop(0, false);
|
||||
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());
|
||||
|
||||
// Inicializa el bitmap de DustLeft
|
||||
mDustBitmapL->init(mTitleTexture, mRenderer);
|
||||
mDustBitmapL->setPosX(33);
|
||||
mDustBitmapL->setPosY(47);
|
||||
mDustBitmapL->setWidth(16);
|
||||
mDustBitmapL->setHeight(14);
|
||||
mDustBitmapL->setCurrentFrame(0);
|
||||
mDustBitmapL->setAnimationCounter(0);
|
||||
mDustBitmapL->setAnimationNumFrames(0, 7);
|
||||
mDustBitmapL->setAnimationSpeed(0, 8);
|
||||
mDustBitmapL->setAnimationLoop(0, false);
|
||||
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
|
||||
for (int i = 0; i < TITLE_TOTAL_EVENTS; i++)
|
||||
{
|
||||
mEvents[i] = EVENT_WAITING;
|
||||
}
|
||||
|
||||
// Crea el mosaico de fondo del titulo
|
||||
createTiledBackground();
|
||||
@@ -246,22 +237,30 @@ void Title::init(bool demo, Uint8 subsection)
|
||||
|
||||
// Inicializa los valores del vector con los valores del seno
|
||||
for (int i = 0; i < 360; i++)
|
||||
{
|
||||
mSin[i] = SDL_sinf((float)i * 3.14f / 180.0f);
|
||||
}
|
||||
|
||||
// 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(52), 7); // 2 PLAYERS
|
||||
mMenu.title->addItem(mLang->getText(1), 7); // OPTIONS
|
||||
mMenu.title->addItem(mLang->getText(3)); // QUIT
|
||||
mMenu.title->setDefaultActionWhenCancel(3);
|
||||
mMenu.title->setBackgroundColor(0x30, 0x30, 0x40, 192);
|
||||
mMenu.title->setSelectorColor(0xe5, 0x1c, 0x23, 0);
|
||||
mMenu.title->setSelectorTextColor(0xFF, 0xB4, 0x00);
|
||||
mMenu.title->setBackgroundColor({0x30, 0x30, 0x40}, 192);
|
||||
mMenu.title->setSelectorColor({0xe5, 0x1c, 0x23}, 0);
|
||||
mMenu.title->setSelectorTextColor({0xFF, 0xB4, 0x00});
|
||||
mMenu.title->centerMenuOnX(SCREEN_CENTER_X);
|
||||
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(62), 2, true, false, true); // (1) PLAYER 1 CONTROLS
|
||||
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(10)); // (13) CANCEL
|
||||
mMenu.options->setDefaultActionWhenCancel(13);
|
||||
mMenu.options->setBackgroundColor(0x30, 0x30, 0x40, 192);
|
||||
mMenu.options->setSelectorColor(0xe5, 0x1c, 0x23, 255);
|
||||
mMenu.options->setSelectorTextColor(0xFF, 0xF1, 0x76);
|
||||
mMenu.options->setBackgroundColor({0x30, 0x30, 0x40}, 192);
|
||||
mMenu.options->setSelectorColor({0xe5, 0x1c, 0x23}, 255);
|
||||
mMenu.options->setSelectorTextColor({0xFF, 0xF1, 0x76});
|
||||
mMenu.options->centerMenuOnX(SCREEN_CENTER_X);
|
||||
mMenu.options->centerMenuOnY(SCREEN_CENTER_Y);
|
||||
|
||||
@@ -293,12 +292,6 @@ bool Title::loadMedia()
|
||||
// Indicador de éxito en la carga
|
||||
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
|
||||
mSound = JA_LoadSound(mAsset->get("title.wav").c_str());
|
||||
|
||||
|
||||