fixing bugs

This commit is contained in:
2021-08-28 18:26:45 +02:00
parent 946ab62c30
commit 914b9e4123
9 changed files with 68 additions and 56 deletions

View File

@@ -269,6 +269,7 @@ const int MULTIPLIER_NUMBER_Y = SCREEN_HEIGHT - (2 * BLOCK) + 2;
// PowerBall
#define POWERBALL_SCREENPOWER_MINIMUM 10
#define POWERBALL_COUNTER 8
// Tipos de bala
#define BULLET_UP 1

View File

@@ -76,7 +76,7 @@ Director::~Director()
delete mInput1;
mInput1 = nullptr;
delete mInput2;
mInput2 = nullptr;
@@ -490,7 +490,7 @@ bool Director::loadConfigFile()
// Aplica las opciones
SDL_SetWindowFullscreen(mWindow, mOptions->fullScreenMode);
SDL_SetWindowSize(mWindow, SCREEN_WIDTH * mOptions->windowSize, SCREEN_HEIGHT * mOptions->windowSize);
mLang->setLang(mOptions->language);
mLang->setLang(mOptions->language);
// Cierra el fichero
SDL_RWclose(file);

View File

@@ -89,6 +89,7 @@ Game::~Game()
mRenderer = nullptr;
mFileList = nullptr;
mLang = nullptr;
mInput[0] = nullptr;
mInput[1] = nullptr;
@@ -289,7 +290,6 @@ void Game::init()
mSection.subsection = GAME_SECTION_PLAY_1P;
mMenaceCurrent = 0;
mMenaceThreshold = 0;
//mHiScore = 0;
mHiScoreAchieved = false;
mCurrentStage = 0;
mStageBitmapCounter = STAGE_COUNTER;
@@ -318,6 +318,7 @@ void Game::init()
mHelper.itemCoffeeOdds = ITEM_COFFEE_ODDS;
mHelper.itemCoffeeMachineOdds = ITEM_COFFEE_MACHINE_ODDS;
mPowerBallEnabled = false;
mPowerBallCounter = 0;
mCoffeeMachineEnabled = false;
mPostFade = 0;
@@ -354,11 +355,6 @@ void Game::init()
// Iniciualiza el objeto para el fundido
mFade->init(0x27, 0x27, 0x36);
// Inicializa los objetos de texto
//mText->init();
//mTextScoreBoard->init();
//mTextBig->init();
// Inicializa el objeto con el menu de pausa
mMenuPause->init("PAUSE", 0, 12 * BLOCK, MENU_BACKGROUND_SOLID);
mMenuPause->addItem(mLang->getText(46));
@@ -1444,16 +1440,16 @@ void Game::deployEnemyFormation()
}
else
{
// Decrementa el contador de despliegues enemigos de la PowerBall
mPowerBallCounter > 0 ? mPowerBallCounter-- : mPowerBallCounter = 0;
// Elige una formación enemiga la azar
Uint8 set = (rand() % 10);
// Evita repetir la ultima formación enemiga desplegada
if (set == mLastEnemyDeploy)
{
set++;
set %= 10;
}
++set %= 10;
mLastEnemyDeploy = set;
if (mDebug.enabled)
@@ -1850,6 +1846,7 @@ void Game::createPowerBall()
mBalloon[getBalloonFreeIndex()]->init(posX, posY, POWER_BALL, BALLOON_VELX_POSITIVE * (((rand() % 2) * 2) - 1), mEnemySpeed, 100, mTextureBalloon, mRenderer);
mPowerBallEnabled = true;
mPowerBallCounter = POWERBALL_COUNTER;
}
// Establece a cero todos los valores del vector de objetos globo
@@ -2245,11 +2242,14 @@ void Game::createBullet(int x, int y, Uint8 kind, bool poweredUp, int owner)
void Game::updateItems()
{
for (int i = 0; i < MAX_ITEMS; i++)
if (mItem[i]->update() == 1)
{
mItem[i]->update();
if (mItem[i]->floorCollision())
{
JA_PlaySound(mSoundCollision);
mEffect.shake = true;
}
}
}
// Pinta los items activos
@@ -3317,7 +3317,7 @@ void Game::renderDebugInfo()
// Indica si se puede crear una powerball
bool Game::canPowerBallBeCreated()
{
if ((!mPowerBallEnabled) && (calculateScreenPower() > POWERBALL_SCREENPOWER_MINIMUM))
if ((!mPowerBallEnabled) && (calculateScreenPower() > POWERBALL_SCREENPOWER_MINIMUM) && (mPowerBallCounter == 0))
return true;
else
return false;

View File

@@ -79,9 +79,9 @@ private:
int itemCoffeeMachineOdds; // Probabilidad de aparición del objeto
};
SDL_Renderer *mRenderer; // El renderizador de la ventana
std::string *mFileList; // Lista de ficheros con los recursos
Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas
SDL_Renderer *mRenderer; // El renderizador de la ventana
std::string *mFileList; // Lista de ficheros con los recursos
Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas
int mNumPlayers; // Numero de jugadores
Player *mPlayer[2]; // Vector con los jugadores jugador
@@ -92,22 +92,22 @@ private:
Item *mItem[MAX_ITEMS]; // Vector con los objetos item
SmartSprite *mSmartSprite[MAX_SMART_SPRITES]; // Vector para almacenar y gestionar SmartSprites
LTexture *mTextureBalloon; // Textura para los enemigos
LTexture *mTextureBullet; // Textura para las balas
LTexture *mTextureGameBG; // Textura para el fondo del juego
LTexture *mTextureGameText; // Textura para los sprites con textos
LTexture *mTextureItems; // Textura para los items
LTexture *mTexturePlayer1Head; // Textura para la cabeza del jugador1
LTexture *mTexturePlayer1Body; // Textura para el cuerpo del jugador1
LTexture *mTexturePlayer1Death; // Textura para la animación de muerte del jugador1
LTexture *mTexturePlayer1Legs; // Textura para las piernas del jugador
LTexture *mTexturePlayer2Head; // Textura para la cabeza del jugador2
LTexture *mTexturePlayer2Body; // Textura para el cuerpo del jugador2
LTexture *mTexturePlayer2Death; // Textura para la animación de muerte del jugador2
LTexture *mTexturePlayer2Legs; // Textura para las piernas del jugador
LTexture *mTextureText; // Textura para el texto del juego
LTexture *mTextureTextScoreBoard; // Textura para el texto del marcador
LTexture *mTextureTextBig; // Textura para el texto grande
LTexture *mTextureBalloon; // Textura para los enemigos
LTexture *mTextureBullet; // Textura para las balas
LTexture *mTextureGameBG; // Textura para el fondo del juego
LTexture *mTextureGameText; // Textura para los sprites con textos
LTexture *mTextureItems; // Textura para los items
LTexture *mTexturePlayer1Head; // Textura para la cabeza del jugador1
LTexture *mTexturePlayer1Body; // Textura para el cuerpo del jugador1
LTexture *mTexturePlayer1Death; // Textura para la animación de muerte del jugador1
LTexture *mTexturePlayer1Legs; // Textura para las piernas del jugador
LTexture *mTexturePlayer2Head; // Textura para la cabeza del jugador2
LTexture *mTexturePlayer2Body; // Textura para el cuerpo del jugador2
LTexture *mTexturePlayer2Death; // Textura para la animación de muerte del jugador2
LTexture *mTexturePlayer2Legs; // Textura para las piernas del jugador
LTexture *mTextureText; // Textura para el texto del juego
LTexture *mTextureTextScoreBoard; // Textura para el texto del marcador
LTexture *mTextureTextBig; // Textura para el texto grande
Text *mText; // Fuente para los textos del juego
Text *mTextScoreBoard; // Fuente para el marcador del juego
@@ -182,6 +182,7 @@ private:
effect_t mEffect; // Variable para gestionar los efectos visuales
helper_t mHelper; // Variable para gestionar las ayudas
bool mPowerBallEnabled; // Indica si hay una powerball ya activa
Uint8 mPowerBallCounter; // Contador de formaciones enemigas entre la aparicion de una PowerBall y otra
bool mCoffeeMachineEnabled; // Indica si hay una máquina de café en el terreno de juego
Uint8 mPostFade; // Qué hacer al acabar el fade
float mSin[360]; // Vector con los valores del seno para 360 grados

View File

@@ -73,7 +73,6 @@ void Instructions::init()
mSprite->init(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, mItemTexture, mRenderer);
mTicks = 0;
mTicksSpeed = 15;
//mText->init();
mManualQuit = false;
mCounter = 0;
}

View File

@@ -30,7 +30,7 @@ void Item::init(Uint8 value, float x, float y, LTexture *texture, SDL_Renderer *
mVelY = -4.0f;
mAccelX = 0.0f;
mAccelY = 0.2f;
mStatus = 0;
mFloorCollision = false;
mCollider.r = mWidth / 2;
shiftColliders();
@@ -149,7 +149,7 @@ void Item::render()
// Actualiza la posición y estados del objeto
void Item::move()
{
mStatus = 0;
mFloorCollision = false;
// Calcula la nueva posición
mPosX += mVelX;
@@ -169,15 +169,15 @@ void Item::move()
mVelX = -mVelX;
}
// Si se sale por arriba
//if (mPosY < PLAY_AREA_TOP)
//{
// // Corrige
// mPosY = PLAY_AREA_TOP;
//
// // Invierte el sentido
// mVelY = -mVelY;
//}
// Si se sale por arriba rebota (excepto la maquina de café)
if ((mPosY < PLAY_AREA_TOP) && !(mClass == ITEM_COFFEE_MACHINE))
{
// Corrige
mPosY = PLAY_AREA_TOP;
// Invierte el sentido
mVelY = -mVelY;
}
// Si el objeto se sale por la parte inferior
if (mPosY + mHeight > PLAY_AREA_BOTTOM)
@@ -192,7 +192,7 @@ void Item::move()
mAccelY = 0;
mPosY = PLAY_AREA_BOTTOM - mHeight;
if (mClass == ITEM_COFFEE_MACHINE)
mStatus = 1;
mFloorCollision = true;
}
// Actualiza la posición del sprite
@@ -207,7 +207,7 @@ void Item::erase()
}
// Actualiza el objeto a su posicion, animación y controla los contadores
int Item::update()
void Item::update()
{
if (mEnabled)
{
@@ -217,8 +217,6 @@ int Item::update()
updateTimeToLive();
checkTimeToLive();
}
return mStatus;
}
// Actualiza el contador
@@ -290,4 +288,10 @@ void Item::shiftColliders()
{
mCollider.x = int(mPosX + mCollider.r);
mCollider.y = int(mPosY + mCollider.r);
}
// Informa si el objeto ha colisionado con el suelo
bool Item::floorCollision()
{
return mFloorCollision;
}

View File

@@ -18,7 +18,7 @@ private:
float mVelY; // Velocidad en el eje Y
float mAccelX; // Aceleración en el eje X
float mAccelY; // Aceleración en el eje Y
int mStatus; // Contiene mensajes de estado
bool mFloorCollision; // Indica si el objeto colisiona con el suelo
AnimatedSprite *mSprite; // Sprite con los graficos del objeto
@@ -52,7 +52,7 @@ public:
void erase();
// Actualiza al objeto a su posicion, animación y controla los contadores
int update();
void update();
// Actualiza el contador
void updateTimeToLive();
@@ -86,6 +86,9 @@ public:
// Temporizador con el tiempo que el objeto está presente
Uint16 mTimeToLive;
// Informa si el objeto ha colisionado con el suelo
bool floorCollision();
};
#endif

View File

@@ -41,6 +41,13 @@ Title::Title(SDL_Window *window, SDL_Renderer *renderer, Input *input, std::stri
// Destructor
Title::~Title()
{
mWindow = nullptr;
mRenderer = nullptr;
mInput = nullptr;
mFileList = nullptr;
mOptions = nullptr;
mLang = nullptr;
delete mEventHandler;
mEventHandler = nullptr;
@@ -50,9 +57,6 @@ Title::~Title()
delete mText2;
mText2 = nullptr;
delete mLang;
mLang = nullptr;
delete mFade;
mFade = nullptr;
@@ -129,8 +133,6 @@ void Title::init(bool demo, Uint8 subsection)
mPostFade = 0;
mTicks = 0;
mTicksSpeed = 15;
//mText->init();
//mText2->init();
mFade->init(0x00, 0x00, 0x00);
mDemo = demo;

View File

@@ -5,11 +5,13 @@
Writer::Writer(Text *text)
{
mText = text;
init();
}
// Destructor
Writer::~Writer()
{
mText = nullptr;
}
// Inicializador