Me voy a la cama. Sigo con la reescritura de todo el código
This commit is contained in:
336
source/game.cpp
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())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user