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

This commit is contained in:
JailDesigner committed 2022-09-26 22:25:46 +02:00
1 parent 35e7abcd3c
commit c8bebfd2d9
74 files changed
+365 -379

No files matched your search

Binary file not shown.
File renamed without changes.
File renamed without changes.
Binary file not shown.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+8 -12
View File
@@ -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)
{
+1 -4
View File
@@ -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);
+57 -59
View File
@@ -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();
}
+177 -159
View File
@@ -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())
{
+30 -37
View File
@@ -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();
+1 -14
View File
@@ -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;
-3
View File
@@ -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();
+6 -7
View File
@@ -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());
+17 -13
View File
@@ -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();
}
+4 -1
View File
@@ -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);
+9
View File
@@ -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);
}
}
+2 -2
View File
@@ -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
+16 -14
View File
@@ -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);
+2 -2
View File
@@ -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);
+4 -11
View File
@@ -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()
{
+2 -5
View File
@@ -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();
+29 -36
View File
@@ -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());