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

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

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())
{