Actualizando el código
This commit is contained in:
@@ -151,6 +151,12 @@ SDL_Rect AnimatedSprite::getAnimationClip(std::string name, Uint8 index)
|
|||||||
return animation[getIndex(name)].frames[index];
|
return animation[getIndex(name)].frames[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Devuelve el rectangulo de una animación y frame concreto
|
||||||
|
SDL_Rect AnimatedSprite::getAnimationClip(int indexA, Uint8 indexF)
|
||||||
|
{
|
||||||
|
return animation[indexA].frames[indexF];
|
||||||
|
}
|
||||||
|
|
||||||
// Carga la animación desde un fichero
|
// Carga la animación desde un fichero
|
||||||
bool AnimatedSprite::load(std::string filePath)
|
bool AnimatedSprite::load(std::string filePath)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ public:
|
|||||||
|
|
||||||
// Devuelve el rectangulo de una animación y frame concreto
|
// Devuelve el rectangulo de una animación y frame concreto
|
||||||
SDL_Rect getAnimationClip(std::string name, Uint8 index);
|
SDL_Rect getAnimationClip(std::string name, Uint8 index);
|
||||||
|
SDL_Rect getAnimationClip(int indexA, Uint8 indexF);
|
||||||
|
|
||||||
// Obtiene el indice de la animación a partir del nombre
|
// Obtiene el indice de la animación a partir del nombre
|
||||||
int getIndex(std::string name);
|
int getIndex(std::string name);
|
||||||
|
|||||||
@@ -2,22 +2,10 @@
|
|||||||
#include "bullet.h"
|
#include "bullet.h"
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Bullet::Bullet()
|
Bullet::Bullet(int x, int y, int kind, bool poweredUp, int owner, LTexture *texture, SDL_Renderer *renderer)
|
||||||
{
|
{
|
||||||
mSprite = new Sprite();
|
mSprite = new Sprite({x,y,10,10},texture, renderer);
|
||||||
mKind = NO_KIND;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Destructor
|
|
||||||
Bullet::~Bullet()
|
|
||||||
{
|
|
||||||
delete mSprite;
|
|
||||||
mSprite = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Iniciador
|
|
||||||
void Bullet::init(int x, int y, int kind, bool poweredUp, int owner, LTexture *texture, SDL_Renderer *renderer)
|
|
||||||
{
|
|
||||||
// Posición inicial del objeto
|
// Posición inicial del objeto
|
||||||
mPosX = x;
|
mPosX = x;
|
||||||
mPosY = y;
|
mPosY = y;
|
||||||
@@ -35,20 +23,6 @@ void Bullet::init(int x, int y, int kind, bool poweredUp, int owner, LTexture *t
|
|||||||
// Identificador del dueño del objeto
|
// Identificador del dueño del objeto
|
||||||
mOwner = owner;
|
mOwner = owner;
|
||||||
|
|
||||||
// Textura con los gráficos del objeto
|
|
||||||
mSprite->setTexture(texture);
|
|
||||||
|
|
||||||
// Renderizador
|
|
||||||
mSprite->setRenderer(renderer);
|
|
||||||
|
|
||||||
// Alto y ancho del sprite
|
|
||||||
mSprite->setWidth(mWidth);
|
|
||||||
mSprite->setHeight(mHeight);
|
|
||||||
|
|
||||||
// Posición inicial del sprite
|
|
||||||
mSprite->setPosX(mPosX);
|
|
||||||
mSprite->setPosY(mPosY);
|
|
||||||
|
|
||||||
// Valores especificos según el tipo
|
// Valores especificos según el tipo
|
||||||
switch (kind)
|
switch (kind)
|
||||||
{
|
{
|
||||||
@@ -96,6 +70,13 @@ void Bullet::init(int x, int y, int kind, bool poweredUp, int owner, LTexture *t
|
|||||||
shiftColliders();
|
shiftColliders();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
Bullet::~Bullet()
|
||||||
|
{
|
||||||
|
delete mSprite;
|
||||||
|
mSprite = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// Pinta el objeto en pantalla
|
// Pinta el objeto en pantalla
|
||||||
void Bullet::render()
|
void Bullet::render()
|
||||||
{
|
{
|
||||||
@@ -144,12 +125,6 @@ Uint8 Bullet::move()
|
|||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deshabilita el objeto
|
|
||||||
void Bullet::erase()
|
|
||||||
{
|
|
||||||
init(0, 0, 0, false, -1, nullptr, nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Comprueba si el objeto está activo
|
// Comprueba si el objeto está activo
|
||||||
bool Bullet::isActive()
|
bool Bullet::isActive()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,23 +36,17 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Bullet();
|
Bullet(int x, int y, int kind, bool poweredUp, int owner, LTexture *texture, SDL_Renderer *renderer);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~Bullet();
|
~Bullet();
|
||||||
|
|
||||||
// Iniciador
|
|
||||||
void init(int x, int y, int kind, bool poweredUp, int owner, LTexture *texture, SDL_Renderer *renderer);
|
|
||||||
|
|
||||||
// Pinta el objeto en pantalla
|
// Pinta el objeto en pantalla
|
||||||
void render();
|
void render();
|
||||||
|
|
||||||
// Actualiza la posición y estado del objeto
|
// Actualiza la posición y estado del objeto
|
||||||
Uint8 move();
|
Uint8 move();
|
||||||
|
|
||||||
// Deshabilita el objeto
|
|
||||||
void erase();
|
|
||||||
|
|
||||||
// Comprueba si el objeto está activo
|
// Comprueba si el objeto está activo
|
||||||
bool isActive();
|
bool isActive();
|
||||||
|
|
||||||
|
|||||||
486
source/game.cpp
486
source/game.cpp
@@ -38,30 +38,6 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
|
|||||||
players.push_back(player1);
|
players.push_back(player1);
|
||||||
players.push_back(player2);
|
players.push_back(player2);
|
||||||
}
|
}
|
||||||
/*for (int i = 0; i < mNumPlayers; i++)
|
|
||||||
{
|
|
||||||
mPlayer[i] = new Player();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
|
||||||
{
|
|
||||||
mBalloon[i] = new Balloon();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < MAX_BULLETS; i++)
|
|
||||||
{
|
|
||||||
mBullet[i] = new Bullet();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < MAX_ITEMS; i++)
|
|
||||||
{
|
|
||||||
mItem[i] = new Item(mTextureItems, mRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < MAX_SMART_SPRITES; i++)
|
|
||||||
{
|
|
||||||
mSmartSprite[i] = new SmartSprite(nullptr, mRenderer);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
mTextureBalloon = new LTexture(mRenderer, mAsset->get("balloon.png"));
|
mTextureBalloon = new LTexture(mRenderer, mAsset->get("balloon.png"));
|
||||||
mTextureBullet = new LTexture(mRenderer, mAsset->get("bullet.png"));
|
mTextureBullet = new LTexture(mRenderer, mAsset->get("bullet.png"));
|
||||||
@@ -126,7 +102,7 @@ Game::~Game()
|
|||||||
delete player;
|
delete player;
|
||||||
};
|
};
|
||||||
|
|
||||||
for (auto ballon : ballons)
|
for (auto ballon : balloons)
|
||||||
{
|
{
|
||||||
delete ballon;
|
delete ballon;
|
||||||
};
|
};
|
||||||
@@ -441,26 +417,13 @@ void Game::init()
|
|||||||
mSpriteScoreBoard->setSpriteClip(0, 160, 256, 32);
|
mSpriteScoreBoard->setSpriteClip(0, 160, 256, 32);
|
||||||
mSpritePowerMeter->setSpriteClip(256, 192 - 8, 40, 8);
|
mSpritePowerMeter->setSpriteClip(256, 192 - 8, 40, 8);
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos globo
|
|
||||||
resetBalloons();
|
|
||||||
|
|
||||||
// Con los globos creados, calcula el nivel de amenaza
|
// Con los globos creados, calcula el nivel de amenaza
|
||||||
evaluateAndSetMenace();
|
evaluateAndSetMenace();
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos bala
|
|
||||||
resetBullets();
|
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos item
|
|
||||||
resetItems();
|
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos SmafrtSprite
|
|
||||||
resetSmartSprites();
|
|
||||||
|
|
||||||
// Inicializa el bitmap de GetReady!
|
// Inicializa el bitmap de GetReady!
|
||||||
mSpriteGetReady->setSpriteClip(0, 0, 109, 20);
|
mSpriteGetReady->setSpriteClip(0, 0, 109, 20);
|
||||||
|
|
||||||
// Inicializa el bitmap de 1000 puntos
|
// Inicializa el bitmap de 1000 puntos
|
||||||
m1000Bitmap->init();
|
|
||||||
m1000Bitmap->setPosX(0);
|
m1000Bitmap->setPosX(0);
|
||||||
m1000Bitmap->setPosY(0);
|
m1000Bitmap->setPosY(0);
|
||||||
m1000Bitmap->setWidth(26);
|
m1000Bitmap->setWidth(26);
|
||||||
@@ -476,7 +439,6 @@ void Game::init()
|
|||||||
m1000Bitmap->setDestY(0);
|
m1000Bitmap->setDestY(0);
|
||||||
|
|
||||||
// Inicializa el bitmap de 2500 puntos
|
// Inicializa el bitmap de 2500 puntos
|
||||||
m2500Bitmap->init();
|
|
||||||
m2500Bitmap->setPosX(0);
|
m2500Bitmap->setPosX(0);
|
||||||
m2500Bitmap->setPosY(0);
|
m2500Bitmap->setPosY(0);
|
||||||
m2500Bitmap->setWidth(28);
|
m2500Bitmap->setWidth(28);
|
||||||
@@ -492,7 +454,6 @@ void Game::init()
|
|||||||
m2500Bitmap->setDestY(0);
|
m2500Bitmap->setDestY(0);
|
||||||
|
|
||||||
// Inicializa el bitmap de 5000 puntos
|
// Inicializa el bitmap de 5000 puntos
|
||||||
m5000Bitmap->init();
|
|
||||||
m5000Bitmap->setPosX(0);
|
m5000Bitmap->setPosX(0);
|
||||||
m5000Bitmap->setPosY(0);
|
m5000Bitmap->setPosY(0);
|
||||||
m5000Bitmap->setWidth(28);
|
m5000Bitmap->setWidth(28);
|
||||||
@@ -1820,19 +1781,17 @@ void Game::renderDeathFade(int counter)
|
|||||||
void Game::updateBalloons()
|
void Game::updateBalloons()
|
||||||
{
|
{
|
||||||
for (auto balloon : balloons)
|
for (auto balloon : balloons)
|
||||||
// for (int i = 0; i < MAX_BALLOONS; i++)
|
{
|
||||||
balloon->update();
|
balloon->update();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Pinta en pantalla todos los globos activos
|
// Pinta en pantalla todos los globos activos
|
||||||
void Game::renderBalloons()
|
void Game::renderBalloons()
|
||||||
{
|
{
|
||||||
for (auto balloon : balloons)
|
for (auto balloon : balloons)
|
||||||
// for (int i = 0; i < MAX_BALLOONS; i++)
|
|
||||||
{
|
{
|
||||||
balloon->render();
|
balloon->render();
|
||||||
if ((mDebug.enabled) && (balloon->isPopping() == false))
|
|
||||||
mText->writeCentered(balloon->getPosX() + (balloon->getWidth() / 2), balloon->getPosY() - 8, std::to_string(i));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1863,16 +1822,6 @@ void Game::createPowerBall()
|
|||||||
mPowerBallCounter = POWERBALL_COUNTER;
|
mPowerBallCounter = POWERBALL_COUNTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos globo
|
|
||||||
void Game::resetBalloons()
|
|
||||||
{
|
|
||||||
for (auto balloon : balloons)
|
|
||||||
// for (int i = 0; i < MAX_BALLOONS; i++)
|
|
||||||
{
|
|
||||||
balloon->disable();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece la velocidad de los globos
|
// Establece la velocidad de los globos
|
||||||
void Game::setBalloonSpeed(float speed)
|
void Game::setBalloonSpeed(float speed)
|
||||||
{
|
{
|
||||||
@@ -1969,17 +1918,17 @@ void Game::popBalloon(Balloon *balloon)
|
|||||||
increaseStageCurrentPower(1);
|
increaseStageCurrentPower(1);
|
||||||
mBalloonsPopped++;
|
mBalloonsPopped++;
|
||||||
|
|
||||||
const Uint8 kind = mBalloon[index]->getKind();
|
const Uint8 kind = balloon->getKind();
|
||||||
Uint8 freeIndex = 0;
|
Uint8 freeIndex = 0;
|
||||||
switch (kind)
|
switch (kind)
|
||||||
{
|
{
|
||||||
// Si es del tipo más pequeño, simplemente elimina el globo
|
// Si es del tipo más pequeño, simplemente elimina el globo
|
||||||
case BALLOON_1:
|
case BALLOON_1:
|
||||||
mBalloon[index]->pop();
|
balloon->pop();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HEXAGON_1:
|
case HEXAGON_1:
|
||||||
mBalloon[index]->pop();
|
balloon->pop();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Si es del tipo PowerBall, destruye todos los globos
|
// Si es del tipo PowerBall, destruye todos los globos
|
||||||
@@ -1991,32 +1940,32 @@ void Game::popBalloon(Balloon *balloon)
|
|||||||
|
|
||||||
// En cualquier otro caso, crea dos globos de un tipo inferior
|
// En cualquier otro caso, crea dos globos de un tipo inferior
|
||||||
default:
|
default:
|
||||||
freeIndex = getBalloonFreeIndex();
|
Balloon *b1 = new Balloon(0, balloon->getPosY(), balloon->getKind() - 1, BALLOON_VELX_NEGATIVE, mEnemySpeed, 0, mTextureBalloon, mRenderer);
|
||||||
mBalloon[freeIndex]->init(0, mBalloon[index]->getPosY(), mBalloon[index]->getKind() - 1, BALLOON_VELX_NEGATIVE, mEnemySpeed, 0, mTextureBalloon, mRenderer);
|
balloons.push_back(b1);
|
||||||
mBalloon[freeIndex]->allignTo(mBalloon[index]->getPosX() + (mBalloon[index]->getWidth() / 2));
|
b1->allignTo(balloon->getPosX() + (balloon->getWidth() / 2));
|
||||||
if (mBalloon[freeIndex]->getClass() == BALLOON_CLASS)
|
if (b1->getClass() == BALLOON_CLASS)
|
||||||
{
|
{
|
||||||
mBalloon[freeIndex]->setVelY(-2.50f);
|
b1->setVelY(-2.50f);
|
||||||
}
|
}
|
||||||
else if (mBalloon[freeIndex]->getClass() == HEXAGON_CLASS)
|
else if (b1->getClass() == HEXAGON_CLASS)
|
||||||
{
|
{
|
||||||
mBalloon[freeIndex]->setVelY(BALLOON_VELX_NEGATIVE);
|
b1->setVelY(BALLOON_VELX_NEGATIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
freeIndex = getBalloonFreeIndex();
|
Balloon *b2 = new Balloon(0, balloon->getPosY(), balloon->getKind() - 1, BALLOON_VELX_POSITIVE, mEnemySpeed, 0, mTextureBalloon, mRenderer);
|
||||||
mBalloon[freeIndex]->init(0, mBalloon[index]->getPosY(), mBalloon[index]->getKind() - 1, BALLOON_VELX_POSITIVE, mEnemySpeed, 0, mTextureBalloon, mRenderer);
|
balloons.push_back(b2);
|
||||||
mBalloon[freeIndex]->allignTo(mBalloon[index]->getPosX() + (mBalloon[index]->getWidth() / 2));
|
b2->allignTo(balloon->getPosX() + (balloon->getWidth() / 2));
|
||||||
if (mBalloon[freeIndex]->getClass() == BALLOON_CLASS)
|
if (b2->getClass() == BALLOON_CLASS)
|
||||||
{
|
{
|
||||||
mBalloon[freeIndex]->setVelY(-2.50f);
|
b2->setVelY(-2.50f);
|
||||||
}
|
}
|
||||||
else if (mBalloon[freeIndex]->getClass() == HEXAGON_CLASS)
|
else if (b2->getClass() == HEXAGON_CLASS)
|
||||||
{
|
{
|
||||||
mBalloon[freeIndex]->setVelY(BALLOON_VELX_NEGATIVE);
|
b2->setVelY(BALLOON_VELX_NEGATIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Elimina el globo
|
// Elimina el globo
|
||||||
mBalloon[index]->pop();
|
balloon->pop();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2025,13 +1974,13 @@ void Game::popBalloon(Balloon *balloon)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Explosiona un globo. Lo destruye
|
// Explosiona un globo. Lo destruye
|
||||||
void Game::destroyBalloon(Uint8 index)
|
void Game::destroyBalloon(Balloon *balloon)
|
||||||
{
|
{
|
||||||
int score = 0;
|
int score = 0;
|
||||||
Uint8 power = 0;
|
Uint8 power = 0;
|
||||||
|
|
||||||
// Calcula la puntuación y el poder que generaria el globo en caso de romperlo a él y a sus hijos
|
// Calcula la puntuación y el poder que generaria el globo en caso de romperlo a él y a sus hijos
|
||||||
switch (mBalloon[index]->getSize())
|
switch (balloon->getSize())
|
||||||
{
|
{
|
||||||
case BALLOON_SIZE_4:
|
case BALLOON_SIZE_4:
|
||||||
score = BALLOON_SCORE_4 + (2 * BALLOON_SCORE_3) + (4 * BALLOON_SCORE_2) + (8 * BALLOON_SCORE_1);
|
score = BALLOON_SCORE_4 + (2 * BALLOON_SCORE_3) + (4 * BALLOON_SCORE_2) + (8 * BALLOON_SCORE_1);
|
||||||
@@ -2060,9 +2009,9 @@ void Game::destroyBalloon(Uint8 index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Otorga los puntos correspondientes al globo
|
// Otorga los puntos correspondientes al globo
|
||||||
for (int i = 0; i < mNumPlayers; i++)
|
for (auto player : players)
|
||||||
{
|
{
|
||||||
mPlayer[i]->addScore(Uint32(score * mPlayer[i]->getScoreMultiplier() * mDifficultyScoreMultiplier));
|
player->addScore(Uint32(score * player->getScoreMultiplier() * mDifficultyScoreMultiplier));
|
||||||
}
|
}
|
||||||
updateHiScore();
|
updateHiScore();
|
||||||
|
|
||||||
@@ -2071,7 +2020,7 @@ void Game::destroyBalloon(Uint8 index)
|
|||||||
mBalloonsPopped += power;
|
mBalloonsPopped += power;
|
||||||
|
|
||||||
// Destruye el globo
|
// Destruye el globo
|
||||||
mBalloon[index]->pop();
|
balloon->pop();
|
||||||
|
|
||||||
// Recalcula el nivel de amenaza
|
// Recalcula el nivel de amenaza
|
||||||
evaluateAndSetMenace();
|
evaluateAndSetMenace();
|
||||||
@@ -2080,11 +2029,11 @@ void Game::destroyBalloon(Uint8 index)
|
|||||||
// Explosiona todos los globos
|
// Explosiona todos los globos
|
||||||
void Game::popAllBalloons()
|
void Game::popAllBalloons()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
for (auto balloon : balloons)
|
||||||
{
|
{
|
||||||
if ((mBalloon[i]->isEnabled()) && (!mBalloon[i]->isPopping()) && (!mBalloon[i]->isBeingCreated()))
|
if ((balloon->isEnabled()) && (!balloon->isPopping()) && (!balloon->isBeingCreated()))
|
||||||
{
|
{
|
||||||
popBalloon(i);
|
popBalloon(balloon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2094,11 +2043,11 @@ void Game::popAllBalloons()
|
|||||||
// Destruye todos los globos
|
// Destruye todos los globos
|
||||||
void Game::destroyAllBalloons()
|
void Game::destroyAllBalloons()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
for (auto balloon : balloons)
|
||||||
{
|
{
|
||||||
if ((mBalloon[i]->isEnabled()) && (!mBalloon[i]->isPopping()))
|
if ((balloon->isEnabled()) && (!balloon->isPopping()))
|
||||||
{
|
{
|
||||||
destroyBalloon(i);
|
destroyBalloon(balloon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2111,12 +2060,12 @@ void Game::destroyAllBalloons()
|
|||||||
// Detiene todos los globos
|
// Detiene todos los globos
|
||||||
void Game::stopAllBalloons(Uint16 time)
|
void Game::stopAllBalloons(Uint16 time)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
for (auto balloon : balloons)
|
||||||
{
|
{
|
||||||
if (mBalloon[i]->isEnabled())
|
if (balloon->isEnabled())
|
||||||
{
|
{
|
||||||
mBalloon[i]->setStop(true);
|
balloon->setStop(true);
|
||||||
mBalloon[i]->setStoppedTimer(time);
|
balloon->setStoppedTimer(time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2124,12 +2073,12 @@ void Game::stopAllBalloons(Uint16 time)
|
|||||||
// Pone en marcha todos los globos
|
// Pone en marcha todos los globos
|
||||||
void Game::startAllBalloons()
|
void Game::startAllBalloons()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
for (auto balloon : balloons)
|
||||||
{
|
{
|
||||||
if ((mBalloon[i]->isEnabled()) && (!mBalloon[i]->isBeingCreated()))
|
if ((balloon->isEnabled()) && (!balloon->isBeingCreated()))
|
||||||
{
|
{
|
||||||
mBalloon[i]->setStop(false);
|
balloon->setStop(false);
|
||||||
mBalloon[i]->setStoppedTimer(0);
|
balloon->setStoppedTimer(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2139,11 +2088,11 @@ Uint8 Game::countBalloons()
|
|||||||
{
|
{
|
||||||
Uint8 num = 0;
|
Uint8 num = 0;
|
||||||
|
|
||||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
for (auto balloon : balloons)
|
||||||
{
|
{
|
||||||
if (mBalloon[i]->isEnabled())
|
if (balloon->isEnabled())
|
||||||
{
|
{
|
||||||
if (!mBalloon[i]->isPopping())
|
if (!balloon->isPopping())
|
||||||
{
|
{
|
||||||
num++;
|
num++;
|
||||||
}
|
}
|
||||||
@@ -2154,13 +2103,13 @@ Uint8 Game::countBalloons()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba la colisión entre el jugador y los globos activos
|
// Comprueba la colisión entre el jugador y los globos activos
|
||||||
bool Game::checkPlayerBalloonCollision(int index)
|
bool Game::checkPlayerBalloonCollision(Player *player)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
for (auto balloon : balloons)
|
||||||
{
|
{
|
||||||
if ((mBalloon[i]->isEnabled()) && !(mBalloon[i]->isStopped()) && !(mBalloon[i]->isInvulnerable()))
|
if ((balloon->isEnabled()) && !(balloon->isStopped()) && !(balloon->isInvulnerable()))
|
||||||
{
|
{
|
||||||
if (checkCollision(mPlayer[index]->getCollider(), mBalloon[i]->getCollider()))
|
if (checkCollision(player->getCollider(), balloon->getCollider()))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -2237,22 +2186,22 @@ void Game::checkPlayerItemCollision(Player *player)
|
|||||||
// Comprueba y procesa la colisión entre las balas y los globos
|
// Comprueba y procesa la colisión entre las balas y los globos
|
||||||
void Game::checkBulletBalloonCollision()
|
void Game::checkBulletBalloonCollision()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
for (auto balloon : balloons)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < MAX_BULLETS; j++)
|
for (auto bullet : bullets)
|
||||||
{
|
{
|
||||||
if (mBalloon[i]->isEnabled() && (!mBalloon[i]->isInvulnerable()) && mBullet[j]->isActive())
|
if (balloon->isEnabled() && (!balloon->isInvulnerable()) && bullet->isActive())
|
||||||
{
|
{
|
||||||
if (checkCollision(mBalloon[i]->getCollider(), mBullet[j]->getCollider()))
|
if (checkCollision(balloon->getCollider(), bullet->getCollider()))
|
||||||
{
|
{
|
||||||
// Otorga los puntos correspondientes al globo al jugador que disparó la bala
|
// Otorga los puntos correspondientes al globo al jugador que disparó la bala
|
||||||
int index = mBullet[j]->getOwner();
|
int index = bullet->getOwner();
|
||||||
mPlayer[index]->incScoreMultiplier();
|
players[index]->incScoreMultiplier();
|
||||||
mPlayer[index]->addScore(Uint32(mBalloon[i]->getScore() * mPlayer[index]->getScoreMultiplier() * mDifficultyScoreMultiplier));
|
players[index]->addScore(Uint32(balloon->getScore() * players[index]->getScoreMultiplier() * mDifficultyScoreMultiplier));
|
||||||
updateHiScore();
|
updateHiScore();
|
||||||
|
|
||||||
// Explota el globo
|
// Explota el globo
|
||||||
popBalloon(i);
|
popBalloon(balloon);
|
||||||
|
|
||||||
// Si no es el modo demo, genera un sonido
|
// Si no es el modo demo, genera un sonido
|
||||||
if (!mDemo.enabled)
|
if (!mDemo.enabled)
|
||||||
@@ -2261,7 +2210,7 @@ void Game::checkBulletBalloonCollision()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Destruye la bala
|
// Destruye la bala
|
||||||
mBullet[j]->erase();
|
delete bullet;
|
||||||
|
|
||||||
// Suelta el item en caso de que salga uno
|
// Suelta el item en caso de que salga uno
|
||||||
const Uint8 droppeditem = dropItem();
|
const Uint8 droppeditem = dropItem();
|
||||||
@@ -2269,12 +2218,12 @@ void Game::checkBulletBalloonCollision()
|
|||||||
{
|
{
|
||||||
if (droppeditem != ITEM_COFFEE_MACHINE)
|
if (droppeditem != ITEM_COFFEE_MACHINE)
|
||||||
{
|
{
|
||||||
createItem(mBalloon[i]->getPosX(), mBalloon[i]->getPosY(), droppeditem);
|
createItem(mTextureItems, mRenderer, balloon->getPosX(), balloon->getPosY(), droppeditem);
|
||||||
JA_PlaySound(mSoundItemDrop);
|
JA_PlaySound(mSoundItemDrop);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
createItem(mPlayer[index]->getPosX(), 0, droppeditem);
|
createItem(mTextureItems, mRenderer, players[index]->getPosX(), 0, droppeditem);
|
||||||
mCoffeeMachineEnabled = true;
|
mCoffeeMachineEnabled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2288,13 +2237,13 @@ void Game::checkBulletBalloonCollision()
|
|||||||
// Mueve las balas activas
|
// Mueve las balas activas
|
||||||
void Game::moveBullets()
|
void Game::moveBullets()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_BULLETS; i++)
|
for (auto bullet : bullets)
|
||||||
{
|
{
|
||||||
if (mBullet[i]->isActive())
|
if (bullet->isActive())
|
||||||
{
|
{
|
||||||
if (mBullet[i]->move() == BULLET_MOVE_OUT)
|
if (bullet->move() == BULLET_MOVE_OUT)
|
||||||
{
|
{
|
||||||
mPlayer[mBullet[i]->getOwner()]->decScoreMultiplier();
|
players[bullet->getOwner()]->decScoreMultiplier();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2303,51 +2252,28 @@ void Game::moveBullets()
|
|||||||
// Pinta las balas activas
|
// Pinta las balas activas
|
||||||
void Game::renderBullets()
|
void Game::renderBullets()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_BULLETS; i++)
|
for (auto bullet : bullets)
|
||||||
{
|
{
|
||||||
if (mBullet[i]->isActive())
|
if (bullet->isActive())
|
||||||
{
|
{
|
||||||
mBullet[i]->render();
|
bullet->render();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Devuelve el primer indice no activo del vector de balas
|
|
||||||
Uint8 Game::getBulletFreeIndex()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < MAX_BULLETS; i++)
|
|
||||||
{
|
|
||||||
if (mBullet[i]->isActive() == false)
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos bala
|
|
||||||
void Game::resetBullets()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < MAX_BULLETS; i++)
|
|
||||||
{
|
|
||||||
mBullet[i]->erase();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Crea un objeto bala
|
// Crea un objeto bala
|
||||||
void Game::createBullet(int x, int y, Uint8 kind, bool poweredUp, int owner)
|
void Game::createBullet(int x, int y, Uint8 kind, bool poweredUp, int owner)
|
||||||
{
|
{
|
||||||
mBullet[getBulletFreeIndex()]->init(x, y, kind, poweredUp, owner, mTextureBullet, mRenderer);
|
Bullet *b = new Bullet(x, y, kind, poweredUp, owner, mTextureBullet, mRenderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actualiza los items
|
// Actualiza los items
|
||||||
void Game::updateItems()
|
void Game::updateItems()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_ITEMS; i++)
|
for (auto item : items)
|
||||||
{
|
{
|
||||||
mItem[i]->update();
|
item->update();
|
||||||
if (mItem[i]->floorCollision())
|
if (item->floorCollision())
|
||||||
{
|
{
|
||||||
JA_PlaySound(mSoundCollision);
|
JA_PlaySound(mSoundCollision);
|
||||||
mEffect.shake = true;
|
mEffect.shake = true;
|
||||||
@@ -2358,32 +2284,9 @@ void Game::updateItems()
|
|||||||
// Pinta los items activos
|
// Pinta los items activos
|
||||||
void Game::renderItems()
|
void Game::renderItems()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_ITEMS; i++)
|
for (auto item : items)
|
||||||
{
|
{
|
||||||
mItem[i]->render();
|
item->render();
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Devuelve el primer indice no activo del vector de items
|
|
||||||
Uint8 Game::getItemFreeIndex()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < MAX_ITEMS; i++)
|
|
||||||
{
|
|
||||||
if (mItem[i]->getClass() == NO_KIND)
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos item
|
|
||||||
void Game::resetItems()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < MAX_ITEMS; i++)
|
|
||||||
{
|
|
||||||
mItem[i]->erase();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2456,24 +2359,26 @@ Uint8 Game::dropItem()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Crea un objeto item
|
// Crea un objeto item
|
||||||
void Game::createItem(int x, int y, Uint8 kind)
|
void Game::createItem(LTexture *texture, SDL_Renderer *renderer, Uint8 type, float x, float y)
|
||||||
{
|
{
|
||||||
mItem[getItemFreeIndex()]->init(kind, x, y);
|
Item *i = new Item(texture, renderer, type, x, y);
|
||||||
|
items.push_back(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Crea un objeto SmartSprite para mostrar la puntuación al coger un objeto
|
// Crea un objeto SmartSprite para mostrar la puntuación al coger un objeto
|
||||||
void Game::createItemScoreSprite(int x, int y, SmartSprite *sprite)
|
void Game::createItemScoreSprite(int x, int y, SmartSprite *sprite)
|
||||||
{
|
{
|
||||||
const Uint8 index = getSmartSpriteFreeIndex();
|
SmartSprite *ss = new SmartSprite(nullptr, mRenderer);
|
||||||
|
smartSprites.push_back(ss);
|
||||||
|
|
||||||
// Crea una copia del objeto
|
// Crea una copia del objeto
|
||||||
*mSmartSprite[index] = *sprite;
|
*ss = *sprite;
|
||||||
mSmartSprite[index]->setPosX(x);
|
ss->setPosX(x);
|
||||||
mSmartSprite[index]->setPosY(y);
|
ss->setPosY(y);
|
||||||
mSmartSprite[index]->setDestX(x);
|
ss->setDestX(x);
|
||||||
mSmartSprite[index]->setDestY(y - 15);
|
ss->setDestY(y - 15);
|
||||||
mSmartSprite[index]->setEnabled(true);
|
ss->setEnabled(true);
|
||||||
mSmartSprite[index]->setEnabledTimer(100);
|
ss->setEnabledTimer(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dibuja el efecto de flash
|
// Dibuja el efecto de flash
|
||||||
@@ -2509,100 +2414,80 @@ void Game::updateShakeEffect()
|
|||||||
// Crea un SmartSprite para arrojar el item café al recibir un impacto
|
// Crea un SmartSprite para arrojar el item café al recibir un impacto
|
||||||
void Game::throwCoffee(int x, int y)
|
void Game::throwCoffee(int x, int y)
|
||||||
{
|
{
|
||||||
const Uint8 index = getSmartSpriteFreeIndex();
|
SmartSprite *ss = new SmartSprite(nullptr, mRenderer);
|
||||||
|
smartSprites.push_back(ss);
|
||||||
|
|
||||||
mSmartSprite[index]->init();
|
ss->setPosX(x - 8);
|
||||||
mSmartSprite[index]->setPosX(x - 8);
|
ss->setPosY(y - 8);
|
||||||
mSmartSprite[index]->setPosY(y - 8);
|
ss->setWidth(16);
|
||||||
mSmartSprite[index]->setWidth(16);
|
ss->setHeight(16);
|
||||||
mSmartSprite[index]->setHeight(16);
|
ss->setVelX(-1.0f + ((rand() % 5) * 0.5f));
|
||||||
mSmartSprite[index]->setVelX(-1.0f + ((rand() % 5) * 0.5f));
|
ss->setVelY(-4.0f);
|
||||||
mSmartSprite[index]->setVelY(-4.0f);
|
ss->setAccelX(0.0f);
|
||||||
mSmartSprite[index]->setAccelX(0.0f);
|
ss->setAccelY(0.2f);
|
||||||
mSmartSprite[index]->setAccelY(0.2f);
|
ss->setDestX(x + (ss->getVelX() * 50));
|
||||||
mSmartSprite[index]->setDestX(x + (mSmartSprite[index]->getVelX() * 50));
|
ss->setDestY(GAME_HEIGHT + 1);
|
||||||
mSmartSprite[index]->setDestY(GAME_HEIGHT + 1);
|
ss->setEnabled(true);
|
||||||
mSmartSprite[index]->setEnabled(true);
|
ss->setEnabledTimer(1);
|
||||||
mSmartSprite[index]->setEnabledTimer(1);
|
ss->setSpriteClip(80, 16, 16, 16);
|
||||||
mSmartSprite[index]->setSpriteClip(80, 16, 16, 16);
|
ss->setRotate(true);
|
||||||
mSmartSprite[index]->setRotate(true);
|
ss->setRotateSpeed(10);
|
||||||
mSmartSprite[index]->setRotateSpeed(10);
|
ss->setRotateAmount(90.0);
|
||||||
mSmartSprite[index]->setRotateAmount(90.0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Crea un SmartSprite para arrojar al jugador al morir
|
// Crea un SmartSprite para arrojar al jugador al morir
|
||||||
void Game::throwPlayer(int x, int y, int index)
|
void Game::throwPlayer(int x, int y, Player *player)
|
||||||
{
|
{
|
||||||
const int sentit = ((rand() % 2) ? 1 : -1);
|
const int sentit = ((rand() % 2) ? 1 : -1);
|
||||||
|
|
||||||
mPlayer[index]->mDeathIndex = getSmartSpriteFreeIndex();
|
//player->mDeathIndex = getSmartSpriteFreeIndex();
|
||||||
// mSmartSprite[mPlayer[index]->mDeathIndex]->init(mPlayer[index]->getDeadTexture(), mRenderer);
|
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setTexture(mPlayer[index]->getDeadTexture());
|
SmartSprite *ss = new SmartSprite(nullptr, mRenderer);
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setPosX(x);
|
smartSprites.push_back(ss);
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setPosY(y);
|
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setWidth(24);
|
ss->setTexture(player->getDeadTexture());
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setHeight(24);
|
ss->setPosX(x);
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setVelX(2.0f * sentit);
|
ss->setPosY(y);
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setVelY(-5.0f);
|
ss->setWidth(24);
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setAccelX(0.0f);
|
ss->setHeight(24);
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setAccelY(0.2f);
|
ss->setVelX(2.0f * sentit);
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setDestX(GAME_WIDTH * sentit);
|
ss->setVelY(-5.0f);
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setDestY(GAME_HEIGHT + 1);
|
ss->setAccelX(0.0f);
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setEnabled(true);
|
ss->setAccelY(0.2f);
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setEnabledTimer(1);
|
ss->setDestX(GAME_WIDTH * sentit);
|
||||||
mSmartSprite[mPlayer[index]->mDeathIndex]->setSpriteClip(0, 0, 24, 24);
|
ss->setDestY(GAME_HEIGHT + 1);
|
||||||
|
ss->setEnabled(true);
|
||||||
|
ss->setEnabledTimer(1);
|
||||||
|
ss->setSpriteClip(0, 0, 24, 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actualiza los SmartSprites
|
// Actualiza los SmartSprites
|
||||||
void Game::updateSmartSprites()
|
void Game::updateSmartSprites()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_SMART_SPRITES; i++)
|
for (auto ss:smartSprites)
|
||||||
{
|
{
|
||||||
mSmartSprite[i]->update();
|
ss->update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pinta los SmartSprites activos
|
// Pinta los SmartSprites activos
|
||||||
void Game::renderSmartSprites()
|
void Game::renderSmartSprites()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_SMART_SPRITES; i++)
|
for (auto ss:smartSprites)
|
||||||
{
|
{
|
||||||
mSmartSprite[i]->render();
|
ss->render();
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Devuelve el primer indice no activo del vector de SmartSprites
|
|
||||||
Uint8 Game::getSmartSpriteFreeIndex()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < MAX_SMART_SPRITES; i++)
|
|
||||||
{
|
|
||||||
if (!mSmartSprite[i]->isEnabled())
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos SmafrtSprite
|
|
||||||
void Game::resetSmartSprites()
|
|
||||||
{
|
|
||||||
for (int i = 0; i < MAX_SMART_SPRITES; i++)
|
|
||||||
{
|
|
||||||
mSmartSprite[i]->init();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Acciones a realizar cuando el jugador muere
|
// Acciones a realizar cuando el jugador muere
|
||||||
void Game::killPlayer(Player *player)
|
void Game::killPlayer(Player *player)
|
||||||
{
|
{
|
||||||
if (!mPlayer[index]->isInvulnerable())
|
if (!player->isInvulnerable())
|
||||||
{
|
{
|
||||||
if (mPlayer[index]->hasExtraHit())
|
if (player->hasExtraHit())
|
||||||
{
|
{
|
||||||
mPlayer[index]->removeExtraHit();
|
player->removeExtraHit();
|
||||||
throwCoffee(mPlayer[index]->getPosX() + (mPlayer[index]->getWidth() / 2), mPlayer[index]->getPosY() + (mPlayer[index]->getHeight() / 2));
|
throwCoffee(player->getPosX() + (player->getWidth() / 2), player->getPosY() + (player->getHeight() / 2));
|
||||||
JA_PlaySound(mSoundCoffeeOut);
|
JA_PlaySound(mSoundCoffeeOut);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -2613,8 +2498,8 @@ void Game::killPlayer(Player *player)
|
|||||||
shakeScreen();
|
shakeScreen();
|
||||||
SDL_Delay(500);
|
SDL_Delay(500);
|
||||||
JA_PlaySound(mSoundCoffeeOut);
|
JA_PlaySound(mSoundCoffeeOut);
|
||||||
throwPlayer(mPlayer[index]->getPosX(), mPlayer[index]->getPosY(), index);
|
throwPlayer(player->getPosX(), player->getPosY(), player);
|
||||||
mPlayer[index]->setAlive(false);
|
player->setAlive(false);
|
||||||
if (allPlayersAreDead())
|
if (allPlayersAreDead())
|
||||||
{
|
{
|
||||||
JA_StopMusic();
|
JA_StopMusic();
|
||||||
@@ -2631,11 +2516,11 @@ void Game::killPlayer(Player *player)
|
|||||||
void Game::evaluateAndSetMenace()
|
void Game::evaluateAndSetMenace()
|
||||||
{
|
{
|
||||||
mMenaceCurrent = 0;
|
mMenaceCurrent = 0;
|
||||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
for (auto balloon:balloons)
|
||||||
{
|
{
|
||||||
if (mBalloon[i]->isEnabled())
|
if (balloon->isEnabled())
|
||||||
{
|
{
|
||||||
mMenaceCurrent += mBalloon[i]->getMenace();
|
mMenaceCurrent += balloon->getMenace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2828,12 +2713,12 @@ void Game::renderPlayField()
|
|||||||
renderSmartSprites();
|
renderSmartSprites();
|
||||||
renderScoreBoard();
|
renderScoreBoard();
|
||||||
|
|
||||||
for (int i = 0; i < mNumPlayers; i++)
|
for (auto player:players)
|
||||||
{
|
{
|
||||||
mPlayer[i]->render();
|
player->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((mDeathCounter <= 150) && !mPlayer[0]->isAlive())
|
if ((mDeathCounter <= 150) && !players[0]->isAlive())
|
||||||
{
|
{
|
||||||
renderDeathFade(150 - mDeathCounter);
|
renderDeathFade(150 - mDeathCounter);
|
||||||
}
|
}
|
||||||
@@ -2882,45 +2767,45 @@ void Game::checkGameInput()
|
|||||||
const int index = 0;
|
const int index = 0;
|
||||||
if (mDemo.dataFile[mDemo.counter].left == 1)
|
if (mDemo.dataFile[mDemo.counter].left == 1)
|
||||||
{
|
{
|
||||||
mPlayer[index]->setInput(INPUT_LEFT);
|
players[index]->setInput(INPUT_LEFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mDemo.dataFile[mDemo.counter].right == 1)
|
if (mDemo.dataFile[mDemo.counter].right == 1)
|
||||||
{
|
{
|
||||||
mPlayer[index]->setInput(INPUT_RIGHT);
|
players[index]->setInput(INPUT_RIGHT);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mDemo.dataFile[mDemo.counter].noInput == 1)
|
if (mDemo.dataFile[mDemo.counter].noInput == 1)
|
||||||
{
|
{
|
||||||
mPlayer[index]->setInput(INPUT_NULL);
|
players[index]->setInput(INPUT_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mDemo.dataFile[mDemo.counter].fire == 1)
|
if (mDemo.dataFile[mDemo.counter].fire == 1)
|
||||||
{
|
{
|
||||||
if (mPlayer[index]->canFire())
|
if (players[index]->canFire())
|
||||||
{
|
{
|
||||||
mPlayer[index]->setInput(INPUT_BUTTON_2);
|
players[index]->setInput(INPUT_BUTTON_2);
|
||||||
createBullet(mPlayer[index]->getPosX() + (mPlayer[index]->getWidth() / 2) - 4, mPlayer[index]->getPosY() + (mPlayer[index]->getHeight() / 2), BULLET_UP, mPlayer[index]->isPowerUp(), index);
|
createBullet(players[index]->getPosX() + (players[index]->getWidth() / 2) - 4, players[index]->getPosY() + (players[index]->getHeight() / 2), BULLET_UP, players[index]->isPowerUp(), index);
|
||||||
mPlayer[index]->setFireCooldown(10);
|
players[index]->setFireCooldown(10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mDemo.dataFile[mDemo.counter].fireLeft == 1)
|
if (mDemo.dataFile[mDemo.counter].fireLeft == 1)
|
||||||
{
|
{
|
||||||
if (mPlayer[index]->canFire())
|
if (players[index]->canFire())
|
||||||
{
|
{
|
||||||
mPlayer[index]->setInput(INPUT_BUTTON_1);
|
players[index]->setInput(INPUT_BUTTON_1);
|
||||||
createBullet(mPlayer[index]->getPosX() + (mPlayer[index]->getWidth() / 2) - 4, mPlayer[index]->getPosY() + (mPlayer[index]->getHeight() / 2), BULLET_UP, mPlayer[index]->isPowerUp(), index);
|
createBullet(players[index]->getPosX() + (players[index]->getWidth() / 2) - 4, players[index]->getPosY() + (players[index]->getHeight() / 2), BULLET_UP, players[index]->isPowerUp(), index);
|
||||||
mPlayer[index]->setFireCooldown(10);
|
players[index]->setFireCooldown(10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mDemo.dataFile[mDemo.counter].fireRight == 1)
|
if (mDemo.dataFile[mDemo.counter].fireRight == 1)
|
||||||
{
|
{
|
||||||
if (mPlayer[index]->canFire())
|
if (players[index]->canFire())
|
||||||
{
|
{
|
||||||
mPlayer[index]->setInput(INPUT_BUTTON_3);
|
players[index]->setInput(INPUT_BUTTON_3);
|
||||||
createBullet(mPlayer[index]->getPosX() + (mPlayer[index]->getWidth() / 2) - 4, mPlayer[index]->getPosY() + (mPlayer[index]->getHeight() / 2), BULLET_UP, mPlayer[index]->isPowerUp(), index);
|
createBullet(players[index]->getPosX() + (players[index]->getWidth() / 2) - 4, players[index]->getPosY() + (players[index]->getHeight() / 2), BULLET_UP, players[index]->isPowerUp(), index);
|
||||||
mPlayer[index]->setFireCooldown(10);
|
players[index]->setFireCooldown(10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2943,14 +2828,15 @@ void Game::checkGameInput()
|
|||||||
// Modo Demo no activo
|
// Modo Demo no activo
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = 0; i < mNumPlayers; i++)
|
int i = 0;
|
||||||
|
for (auto player:players)
|
||||||
{
|
{
|
||||||
if (mPlayer[i]->isAlive())
|
if (player->isAlive())
|
||||||
{
|
{
|
||||||
// Input a la izquierda
|
// Input a la izquierda
|
||||||
if (mInput->checkInput(INPUT_LEFT, REPEAT_TRUE, mOptions->input[i].deviceType, mOptions->input[i].id))
|
if (mInput->checkInput(INPUT_LEFT, REPEAT_TRUE, mOptions->input[i].deviceType, mOptions->input[i].id))
|
||||||
{
|
{
|
||||||
mPlayer[i]->setInput(INPUT_LEFT);
|
player->setInput(INPUT_LEFT);
|
||||||
mDemo.keys.left = 1;
|
mDemo.keys.left = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -2958,24 +2844,24 @@ void Game::checkGameInput()
|
|||||||
// Input a la derecha
|
// Input a la derecha
|
||||||
if (mInput->checkInput(INPUT_RIGHT, REPEAT_TRUE, mOptions->input[i].deviceType, mOptions->input[i].id))
|
if (mInput->checkInput(INPUT_RIGHT, REPEAT_TRUE, mOptions->input[i].deviceType, mOptions->input[i].id))
|
||||||
{
|
{
|
||||||
mPlayer[i]->setInput(INPUT_RIGHT);
|
player->setInput(INPUT_RIGHT);
|
||||||
mDemo.keys.right = 1;
|
mDemo.keys.right = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Ninguno de los dos inputs anteriores
|
// Ninguno de los dos inputs anteriores
|
||||||
mPlayer[i]->setInput(INPUT_NULL);
|
player->setInput(INPUT_NULL);
|
||||||
mDemo.keys.noInput = 1;
|
mDemo.keys.noInput = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Comprueba el input de disparar al centro
|
// Comprueba el input de disparar al centro
|
||||||
if (mInput->checkInput(INPUT_BUTTON_2, REPEAT_TRUE, mOptions->input[i].deviceType, mOptions->input[i].id))
|
if (mInput->checkInput(INPUT_BUTTON_2, REPEAT_TRUE, mOptions->input[i].deviceType, mOptions->input[i].id))
|
||||||
{
|
{
|
||||||
if (mPlayer[i]->canFire())
|
if (player->canFire())
|
||||||
{
|
{
|
||||||
mPlayer[i]->setInput(INPUT_BUTTON_2);
|
player->setInput(INPUT_BUTTON_2);
|
||||||
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_UP, mPlayer[i]->isPowerUp(), i);
|
createBullet(player->getPosX() + (player->getWidth() / 2) - 4, player->getPosY() + (player->getHeight() / 2), BULLET_UP, player->isPowerUp(), i);
|
||||||
mPlayer[i]->setFireCooldown(10);
|
player->setFireCooldown(10);
|
||||||
|
|
||||||
// Reproduce el sonido de disparo
|
// Reproduce el sonido de disparo
|
||||||
JA_PlaySound(mSoundBullet);
|
JA_PlaySound(mSoundBullet);
|
||||||
@@ -2987,11 +2873,11 @@ void Game::checkGameInput()
|
|||||||
// Comprueba el input de disparar a la izquierda
|
// Comprueba el input de disparar a la izquierda
|
||||||
if (mInput->checkInput(INPUT_BUTTON_1, REPEAT_TRUE, mOptions->input[i].deviceType, mOptions->input[i].id))
|
if (mInput->checkInput(INPUT_BUTTON_1, REPEAT_TRUE, mOptions->input[i].deviceType, mOptions->input[i].id))
|
||||||
{
|
{
|
||||||
if (mPlayer[i]->canFire())
|
if (player->canFire())
|
||||||
{
|
{
|
||||||
mPlayer[i]->setInput(INPUT_BUTTON_1);
|
player->setInput(INPUT_BUTTON_1);
|
||||||
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_LEFT, mPlayer[i]->isPowerUp(), i);
|
createBullet(player->getPosX() + (player->getWidth() / 2) - 4, player->getPosY() + (player->getHeight() / 2), BULLET_LEFT, player->isPowerUp(), i);
|
||||||
mPlayer[i]->setFireCooldown(10);
|
player->setFireCooldown(10);
|
||||||
|
|
||||||
// Reproduce el sonido de disparo
|
// Reproduce el sonido de disparo
|
||||||
JA_PlaySound(mSoundBullet);
|
JA_PlaySound(mSoundBullet);
|
||||||
@@ -3003,11 +2889,11 @@ void Game::checkGameInput()
|
|||||||
// Comprueba el input de disparar a la derecha
|
// Comprueba el input de disparar a la derecha
|
||||||
if (mInput->checkInput(INPUT_BUTTON_3, REPEAT_TRUE, mOptions->input[i].deviceType, mOptions->input[i].id))
|
if (mInput->checkInput(INPUT_BUTTON_3, REPEAT_TRUE, mOptions->input[i].deviceType, mOptions->input[i].id))
|
||||||
{
|
{
|
||||||
if (mPlayer[i]->canFire())
|
if (player->canFire())
|
||||||
{
|
{
|
||||||
mPlayer[i]->setInput(INPUT_BUTTON_3);
|
player->setInput(INPUT_BUTTON_3);
|
||||||
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_RIGHT, mPlayer[i]->isPowerUp(), i);
|
createBullet(player->getPosX() + (player->getWidth() / 2) - 4, player->getPosY() + (player->getHeight() / 2), BULLET_RIGHT, player->isPowerUp(), i);
|
||||||
mPlayer[i]->setFireCooldown(10);
|
player->setFireCooldown(10);
|
||||||
|
|
||||||
// Reproduce el sonido de disparo
|
// Reproduce el sonido de disparo
|
||||||
JA_PlaySound(mSoundBullet);
|
JA_PlaySound(mSoundBullet);
|
||||||
@@ -3039,6 +2925,8 @@ void Game::checkGameInput()
|
|||||||
{
|
{
|
||||||
mSection.name = PROG_SECTION_QUIT;
|
mSection.name = PROG_SECTION_QUIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3170,9 +3058,9 @@ void Game::shakeScreen()
|
|||||||
renderBalloons();
|
renderBalloons();
|
||||||
renderBullets();
|
renderBullets();
|
||||||
renderItems();
|
renderItems();
|
||||||
for (int i = 0; i < mNumPlayers; i++)
|
for (auto player:players)
|
||||||
{
|
{
|
||||||
mPlayer[i]->render();
|
player->render();
|
||||||
}
|
}
|
||||||
renderScoreBoard();
|
renderScoreBoard();
|
||||||
|
|
||||||
@@ -3210,7 +3098,7 @@ section_t Game::run()
|
|||||||
// Reproduce la música
|
// Reproduce la música
|
||||||
if (!mGameCompleted)
|
if (!mGameCompleted)
|
||||||
{
|
{
|
||||||
if (mPlayer[0]->isAlive())
|
if (players[0]->isAlive())
|
||||||
{
|
{
|
||||||
JA_PlayMusic(mMusicPlaying);
|
JA_PlayMusic(mMusicPlaying);
|
||||||
}
|
}
|
||||||
@@ -3420,13 +3308,13 @@ void Game::runGameOverScreen()
|
|||||||
if (mNumPlayers == 1)
|
if (mNumPlayers == 1)
|
||||||
{
|
{
|
||||||
mTextBig->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 4), mLang->getText(43));
|
mTextBig->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 4), mLang->getText(43));
|
||||||
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 1), mLang->getText(44) + std::to_string(mPlayer[0]->getScore()));
|
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 1), mLang->getText(44) + std::to_string(players[0]->getScore()));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mTextBig->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - 36, mLang->getText(43));
|
mTextBig->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - 36, mLang->getText(43));
|
||||||
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - 12, mLang->getText(77) + std::to_string(mPlayer[0]->getScore()));
|
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - 12, mLang->getText(77) + std::to_string(players[0]->getScore()));
|
||||||
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y, mLang->getText(78) + std::to_string(mPlayer[1]->getScore()));
|
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y, mLang->getText(78) + std::to_string(players[1]->getScore()));
|
||||||
}
|
}
|
||||||
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y + BLOCK * 2, mLang->getText(45));
|
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y + BLOCK * 2, mLang->getText(45));
|
||||||
mMenuGameOver->render();
|
mMenuGameOver->render();
|
||||||
@@ -3470,7 +3358,7 @@ void Game::renderDebugInfo()
|
|||||||
mText->writeShadowed(2, 2 + 3 * BLOCK, "mCounter: " + std::to_string(mCounter), color);
|
mText->writeShadowed(2, 2 + 3 * BLOCK, "mCounter: " + std::to_string(mCounter), color);
|
||||||
mText->writeShadowed(2, 2 + 4 * BLOCK, "(R)enemyset: " + std::to_string(mDebug.enemySet), color);
|
mText->writeShadowed(2, 2 + 4 * BLOCK, "(R)enemyset: " + std::to_string(mDebug.enemySet), color);
|
||||||
mText->writeShadowed(2, 2 + 5 * BLOCK, "RGB: " + std::to_string(mDebug.gradR) + "," + std::to_string(mDebug.gradG) + "," + std::to_string(mDebug.gradB), color);
|
mText->writeShadowed(2, 2 + 5 * BLOCK, "RGB: " + std::to_string(mDebug.gradR) + "," + std::to_string(mDebug.gradG) + "," + std::to_string(mDebug.gradB), color);
|
||||||
mText->writeShadowed(2, 2 + 6 * BLOCK, "(I)invuln: " + std::to_string(mPlayer[0]->getInvulnerableCounter()), color);
|
mText->writeShadowed(2, 2 + 6 * BLOCK, "(I)invuln: " + std::to_string(players[0]->getInvulnerableCounter()), color);
|
||||||
mText->writeShadowed(2, 2 + 7 * BLOCK, "balloons: " + std::to_string(countBalloons()), color);
|
mText->writeShadowed(2, 2 + 7 * BLOCK, "balloons: " + std::to_string(countBalloons()), color);
|
||||||
mText->writeShadowed(2, 2 + 8 * BLOCK, "balloonsPop: " + std::to_string(mBalloonsPopped), color);
|
mText->writeShadowed(2, 2 + 8 * BLOCK, "balloonsPop: " + std::to_string(mBalloonsPopped), color);
|
||||||
mText->writeShadowed(2, 2 + 9 * BLOCK, "(Z-X)ballSped:" + std::to_string(mEnemySpeed), color);
|
mText->writeShadowed(2, 2 + 9 * BLOCK, "(Z-X)ballSped:" + std::to_string(mEnemySpeed), color);
|
||||||
@@ -3494,11 +3382,11 @@ int Game::calculateScreenPower()
|
|||||||
{
|
{
|
||||||
int power = 0;
|
int power = 0;
|
||||||
|
|
||||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
for (auto balloon:balloons)
|
||||||
{
|
{
|
||||||
if (mBalloon[i]->isEnabled())
|
if (balloon->isEnabled())
|
||||||
{
|
{
|
||||||
power += mBalloon[i]->getPower();
|
power += balloon->getPower();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3585,9 +3473,9 @@ void Game::updateHelper()
|
|||||||
// Solo ofrece ayuda cuando la amenaza es elevada
|
// Solo ofrece ayuda cuando la amenaza es elevada
|
||||||
if (mMenaceCurrent > 15)
|
if (mMenaceCurrent > 15)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < mNumPlayers; i++)
|
for (auto player:players)
|
||||||
{
|
{
|
||||||
if (mPlayer[i]->getCoffees() == 0)
|
if (player->getCoffees() == 0)
|
||||||
{
|
{
|
||||||
mHelper.needCoffee = true;
|
mHelper.needCoffee = true;
|
||||||
}
|
}
|
||||||
@@ -3596,7 +3484,7 @@ void Game::updateHelper()
|
|||||||
mHelper.needCoffee = false;
|
mHelper.needCoffee = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mPlayer[i]->isPowerUp())
|
if (!player->isPowerUp())
|
||||||
{
|
{
|
||||||
mHelper.needCoffeeMachine = true;
|
mHelper.needCoffeeMachine = true;
|
||||||
}
|
}
|
||||||
@@ -3617,9 +3505,9 @@ void Game::updateHelper()
|
|||||||
bool Game::allPlayersAreDead()
|
bool Game::allPlayersAreDead()
|
||||||
{
|
{
|
||||||
bool success = true;
|
bool success = true;
|
||||||
for (int i = 0; i < mNumPlayers; i++)
|
for (auto player:players)
|
||||||
{
|
{
|
||||||
success &= (!mPlayer[i]->isAlive());
|
success &= (!player->isAlive());
|
||||||
}
|
}
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
|
|||||||
@@ -134,12 +134,6 @@ private:
|
|||||||
Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas
|
Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas
|
||||||
Input *mInput; // Manejador de entrada
|
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
|
|
||||||
|
|
||||||
int mNumPlayers; // Numero de jugadores
|
int mNumPlayers; // Numero de jugadores
|
||||||
std::vector<Player *> players; // Vector con los jugadores
|
std::vector<Player *> players; // Vector con los jugadores
|
||||||
std::vector<Balloon *> balloons; // Vector con los globos
|
std::vector<Balloon *> balloons; // Vector con los globos
|
||||||
@@ -322,9 +316,6 @@ private:
|
|||||||
// Crea una PowerBall
|
// Crea una PowerBall
|
||||||
void createPowerBall();
|
void createPowerBall();
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos globo
|
|
||||||
void resetBalloons();
|
|
||||||
|
|
||||||
// Establece la velocidad de los globos
|
// Establece la velocidad de los globos
|
||||||
void setBalloonSpeed(float speed);
|
void setBalloonSpeed(float speed);
|
||||||
|
|
||||||
@@ -373,9 +364,6 @@ private:
|
|||||||
// Pinta las balas activas
|
// Pinta las balas activas
|
||||||
void renderBullets();
|
void renderBullets();
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos bala
|
|
||||||
void resetBullets();
|
|
||||||
|
|
||||||
// Crea un objeto bala
|
// Crea un objeto bala
|
||||||
void createBullet(int x, int y, Uint8 kind, bool poweredUp, int owner);
|
void createBullet(int x, int y, Uint8 kind, bool poweredUp, int owner);
|
||||||
|
|
||||||
@@ -385,14 +373,11 @@ private:
|
|||||||
// Pinta los items activos
|
// Pinta los items activos
|
||||||
void renderItems();
|
void renderItems();
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos item
|
|
||||||
void resetItems();
|
|
||||||
|
|
||||||
// Devuelve un item en función del azar
|
// Devuelve un item en función del azar
|
||||||
Uint8 dropItem();
|
Uint8 dropItem();
|
||||||
|
|
||||||
// Crea un objeto item
|
// Crea un objeto item
|
||||||
void createItem(int x, int y, Uint8 kind);
|
void createItem(LTexture *texture, SDL_Renderer *renderer, Uint8 type, float x, float y);
|
||||||
|
|
||||||
// Crea un objeto SmartSprite
|
// Crea un objeto SmartSprite
|
||||||
void createItemScoreSprite(int x, int y, SmartSprite *sprite);
|
void createItemScoreSprite(int x, int y, SmartSprite *sprite);
|
||||||
@@ -407,7 +392,7 @@ private:
|
|||||||
void throwCoffee(int x, int y);
|
void throwCoffee(int x, int y);
|
||||||
|
|
||||||
// Crea un SmartSprite para arrojar al jugador al morir
|
// Crea un SmartSprite para arrojar al jugador al morir
|
||||||
void throwPlayer(int x, int y, int index);
|
void throwPlayer(int x, int y, Player *player);
|
||||||
|
|
||||||
// Actualiza los SmartSprites
|
// Actualiza los SmartSprites
|
||||||
void updateSmartSprites();
|
void updateSmartSprites();
|
||||||
@@ -415,9 +400,6 @@ private:
|
|||||||
// Pinta los SmartSprites activos
|
// Pinta los SmartSprites activos
|
||||||
void renderSmartSprites();
|
void renderSmartSprites();
|
||||||
|
|
||||||
// Establece a cero todos los valores del vector de objetos SmafrtSprite
|
|
||||||
void resetSmartSprites();
|
|
||||||
|
|
||||||
// Acciones a realizar cuando el jugador muere
|
// Acciones a realizar cuando el jugador muere
|
||||||
void killPlayer(Player *player);
|
void killPlayer(Player *player);
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,6 @@ void Intro::init()
|
|||||||
// Inicializa los bitmaps de la intro
|
// Inicializa los bitmaps de la intro
|
||||||
for (int i = 0; i < INTRO_TOTAL_BITMAPS; i++)
|
for (int i = 0; i < INTRO_TOTAL_BITMAPS; i++)
|
||||||
{
|
{
|
||||||
mBitmap[i]->init();
|
|
||||||
mBitmap[i]->setId(i);
|
mBitmap[i]->setId(i);
|
||||||
mBitmap[i]->setIntroEvents(&mEvents[0]);
|
mBitmap[i]->setIntroEvents(&mEvents[0]);
|
||||||
mBitmap[i]->setWidth(128);
|
mBitmap[i]->setWidth(128);
|
||||||
|
|||||||
@@ -2,22 +2,10 @@
|
|||||||
#include "item.h"
|
#include "item.h"
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Item::Item(LTexture *texture, SDL_Renderer *renderer)
|
Item::Item(LTexture *texture, SDL_Renderer *renderer, Uint8 type, float x, float y)
|
||||||
{
|
{
|
||||||
mSprite = new AnimatedSprite(texture, renderer);
|
mSprite = new AnimatedSprite(texture, renderer);
|
||||||
init(NO_KIND, 0.0f, 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Destructor
|
|
||||||
Item::~Item()
|
|
||||||
{
|
|
||||||
delete mSprite;
|
|
||||||
mSprite = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inicializador
|
|
||||||
void Item::init(Uint8 type, float x, float y)
|
|
||||||
{
|
|
||||||
mClass = type;
|
mClass = type;
|
||||||
mEnabled = true;
|
mEnabled = true;
|
||||||
mTimeToLive = 600;
|
mTimeToLive = 600;
|
||||||
@@ -104,6 +92,13 @@ void Item::init(Uint8 type, float x, float y)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
Item::~Item()
|
||||||
|
{
|
||||||
|
delete mSprite;
|
||||||
|
mSprite = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// Centra el objeto en la posición X
|
// Centra el objeto en la posición X
|
||||||
void Item::allignTo(int x)
|
void Item::allignTo(int x)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -43,14 +43,11 @@ public:
|
|||||||
Uint16 mTimeToLive; // Temporizador con el tiempo que el objeto está presente
|
Uint16 mTimeToLive; // Temporizador con el tiempo que el objeto está presente
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Item(LTexture *texture, SDL_Renderer *renderer);
|
Item(LTexture *texture, SDL_Renderer *renderer, Uint8 type, float x, float y);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~Item();
|
~Item();
|
||||||
|
|
||||||
// Inicializador
|
|
||||||
void init(Uint8 type, float x, float y);
|
|
||||||
|
|
||||||
// Centra el objeto en la posición X
|
// Centra el objeto en la posición X
|
||||||
void allignTo(int x);
|
void allignTo(int x);
|
||||||
|
|
||||||
|
|||||||
@@ -75,11 +75,6 @@ void Player::init()
|
|||||||
// Inicia el contador para la cadencia de disparo
|
// Inicia el contador para la cadencia de disparo
|
||||||
mCooldown = 10;
|
mCooldown = 10;
|
||||||
|
|
||||||
// Inicia el sprite
|
|
||||||
mSpriteLegs->init();
|
|
||||||
mSpriteBody->init();
|
|
||||||
mSpriteHead->init();
|
|
||||||
|
|
||||||
// Establece el alto y ancho del sprite
|
// Establece el alto y ancho del sprite
|
||||||
mSpriteLegs->setWidth(mWidth);
|
mSpriteLegs->setWidth(mWidth);
|
||||||
mSpriteLegs->setHeight(mHeight);
|
mSpriteLegs->setHeight(mHeight);
|
||||||
@@ -110,25 +105,6 @@ void Player::init()
|
|||||||
mSpriteHead->setCurrentFrame(0);
|
mSpriteHead->setCurrentFrame(0);
|
||||||
mSpriteHead->setAnimationCounter(0);
|
mSpriteHead->setAnimationCounter(0);
|
||||||
|
|
||||||
// Establece el numero de frames de cada animacion
|
|
||||||
mSpriteLegs->setAnimationNumFrames(PLAYER_ANIMATION_LEGS_WALKING_STOP, 4);
|
|
||||||
mSpriteLegs->setAnimationNumFrames(PLAYER_ANIMATION_LEGS_WALKING_LEFT, 4);
|
|
||||||
mSpriteLegs->setAnimationNumFrames(PLAYER_ANIMATION_LEGS_WALKING_RIGHT, 4);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_WALKING_LEFT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_FIRING_LEFT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_WALKING_RIGHT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_FIRING_RIGHT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_WALKING_STOP, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_FIRING_UP, 4);
|
|
||||||
|
|
||||||
mSpriteHead->setAnimationNumFrames(PLAYER_ANIMATION_HEAD_WALKING_LEFT, 4);
|
|
||||||
mSpriteHead->setAnimationNumFrames(PLAYER_ANIMATION_HEAD_FIRING_LEFT, 4);
|
|
||||||
mSpriteHead->setAnimationNumFrames(PLAYER_ANIMATION_HEAD_WALKING_RIGHT, 4);
|
|
||||||
mSpriteHead->setAnimationNumFrames(PLAYER_ANIMATION_HEAD_FIRING_RIGHT, 4);
|
|
||||||
mSpriteHead->setAnimationNumFrames(PLAYER_ANIMATION_HEAD_WALKING_STOP, 4);
|
|
||||||
mSpriteHead->setAnimationNumFrames(PLAYER_ANIMATION_HEAD_FIRING_UP, 4);
|
|
||||||
|
|
||||||
// Establece la velocidad de cada animación
|
// Establece la velocidad de cada animación
|
||||||
mSpriteLegs->setAnimationSpeed(PLAYER_ANIMATION_LEGS_WALKING_STOP, 10);
|
mSpriteLegs->setAnimationSpeed(PLAYER_ANIMATION_LEGS_WALKING_STOP, 10);
|
||||||
mSpriteLegs->setAnimationSpeed(PLAYER_ANIMATION_LEGS_WALKING_LEFT, 5);
|
mSpriteLegs->setAnimationSpeed(PLAYER_ANIMATION_LEGS_WALKING_LEFT, 5);
|
||||||
@@ -381,100 +357,134 @@ void Player::setAnimation()
|
|||||||
switch (mStatusWalking)
|
switch (mStatusWalking)
|
||||||
{
|
{
|
||||||
case PLAYER_STATUS_WALKING_LEFT:
|
case PLAYER_STATUS_WALKING_LEFT:
|
||||||
mSpriteLegs->animate(PLAYER_ANIMATION_LEGS_WALKING_LEFT);
|
mSpriteLegs->setCurrentAnimation(PLAYER_ANIMATION_LEGS_WALKING_LEFT);
|
||||||
|
mSpriteLegs->animate();
|
||||||
switch (mStatusFiring)
|
switch (mStatusFiring)
|
||||||
{
|
{
|
||||||
case PLAYER_STATUS_FIRING_UP:
|
case PLAYER_STATUS_FIRING_UP:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_UP);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_FIRING_UP);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_FIRING_UP);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_FIRING_UP);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_LEFT:
|
case PLAYER_STATUS_FIRING_LEFT:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_LEFT);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_FIRING_LEFT);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_FIRING_LEFT);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_FIRING_LEFT);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_RIGHT:
|
case PLAYER_STATUS_FIRING_RIGHT:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_RIGHT);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_FIRING_RIGHT);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_FIRING_RIGHT);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_FIRING_RIGHT);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_NO:
|
case PLAYER_STATUS_FIRING_NO:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_LEFT);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_WALKING_LEFT);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_WALKING_LEFT);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_WALKING_LEFT);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_WALKING_STOP);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_WALKING_STOP);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYER_STATUS_WALKING_RIGHT:
|
case PLAYER_STATUS_WALKING_RIGHT:
|
||||||
mSpriteLegs->animate(PLAYER_ANIMATION_LEGS_WALKING_RIGHT);
|
mSpriteLegs->setCurrentAnimation(PLAYER_ANIMATION_LEGS_WALKING_RIGHT);
|
||||||
|
mSpriteLegs->animate();
|
||||||
switch (mStatusFiring)
|
switch (mStatusFiring)
|
||||||
{
|
{
|
||||||
case PLAYER_STATUS_FIRING_UP:
|
case PLAYER_STATUS_FIRING_UP:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_UP);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_FIRING_UP);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_FIRING_UP);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_FIRING_UP);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_LEFT:
|
case PLAYER_STATUS_FIRING_LEFT:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_LEFT);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_FIRING_LEFT);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_FIRING_LEFT);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_FIRING_LEFT);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_RIGHT:
|
case PLAYER_STATUS_FIRING_RIGHT:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_RIGHT);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_FIRING_RIGHT);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_FIRING_RIGHT);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_FIRING_RIGHT);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_NO:
|
case PLAYER_STATUS_FIRING_NO:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_RIGHT);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_WALKING_RIGHT);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_WALKING_RIGHT);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_WALKING_RIGHT);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_WALKING_STOP);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_WALKING_STOP);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYER_STATUS_WALKING_STOP:
|
case PLAYER_STATUS_WALKING_STOP:
|
||||||
mSpriteLegs->animate(PLAYER_ANIMATION_LEGS_WALKING_STOP);
|
mSpriteLegs->setCurrentAnimation(PLAYER_ANIMATION_LEGS_WALKING_STOP);
|
||||||
|
mSpriteLegs->animate();
|
||||||
switch (mStatusFiring)
|
switch (mStatusFiring)
|
||||||
{
|
{
|
||||||
case PLAYER_STATUS_FIRING_UP:
|
case PLAYER_STATUS_FIRING_UP:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_UP);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_FIRING_UP);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_FIRING_UP);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_FIRING_UP);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_LEFT:
|
case PLAYER_STATUS_FIRING_LEFT:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_LEFT);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_FIRING_LEFT);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_FIRING_LEFT);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_FIRING_LEFT);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_RIGHT:
|
case PLAYER_STATUS_FIRING_RIGHT:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_RIGHT);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_FIRING_RIGHT);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_FIRING_RIGHT);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_FIRING_RIGHT);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_NO:
|
case PLAYER_STATUS_FIRING_NO:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_WALKING_STOP);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_WALKING_STOP);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
mSpriteBody->setCurrentAnimation(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
||||||
mSpriteHead->animate(PLAYER_ANIMATION_HEAD_WALKING_STOP);
|
mSpriteBody->animate();
|
||||||
|
mSpriteHead->setCurrentAnimation(PLAYER_ANIMATION_HEAD_WALKING_STOP);
|
||||||
|
mSpriteHead->animate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
mSpriteLegs->animate(PLAYER_ANIMATION_LEGS_WALKING_STOP);
|
mSpriteLegs->setCurrentAnimation(PLAYER_ANIMATION_LEGS_WALKING_STOP);
|
||||||
|
mSpriteLegs->animate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,16 +6,7 @@ SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer)
|
|||||||
{
|
{
|
||||||
setTexture(texture);
|
setTexture(texture);
|
||||||
setRenderer(renderer);
|
setRenderer(renderer);
|
||||||
}
|
|
||||||
|
|
||||||
// Destructor
|
|
||||||
SmartSprite::~SmartSprite()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inicializador
|
|
||||||
void SmartSprite::init()
|
|
||||||
{
|
|
||||||
setPosX(0);
|
setPosX(0);
|
||||||
setPosY(0);
|
setPosY(0);
|
||||||
setWidth(0);
|
setWidth(0);
|
||||||
@@ -47,6 +38,11 @@ void SmartSprite::init()
|
|||||||
introEvents = nullptr;
|
introEvents = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
SmartSprite::~SmartSprite()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
bool SmartSprite::isEnabled()
|
bool SmartSprite::isEnabled()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,9 +26,6 @@ public:
|
|||||||
// Destructor
|
// Destructor
|
||||||
~SmartSprite();
|
~SmartSprite();
|
||||||
|
|
||||||
// Inicializador
|
|
||||||
void init();
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
// Obtiene el valor de la variable
|
||||||
bool isEnabled();
|
bool isEnabled();
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ Title::Title(SDL_Window *window, SDL_Renderer *renderer, Screen *screen, Input *
|
|||||||
mGradient = new Sprite();
|
mGradient = new Sprite();
|
||||||
mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer);
|
mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer);
|
||||||
mText2 = new Text(mAsset->get("8bithud.png"), mAsset->get("8bithud.txt"), mRenderer);
|
mText2 = new Text(mAsset->get("8bithud.png"), mAsset->get("8bithud.txt"), mRenderer);
|
||||||
mMenu.title = new Menu(mRenderer, mInput, mAsset);
|
mMenu.title = new Menu(this->mRenderer, this->mInput, this->mAsset);
|
||||||
mMenu.options = new Menu(mRenderer, mInput, mAsset);
|
mMenu.options = new Menu(mRenderer, mInput, mAsset);
|
||||||
|
|
||||||
// Crea la textura para el mosaico de fondo
|
// Crea la textura para el mosaico de fondo
|
||||||
|
|||||||
Reference in New Issue
Block a user