working on 2p
This commit is contained in:
+11
-2
@@ -17,7 +17,7 @@ Bullet::~Bullet()
|
||||
}
|
||||
|
||||
// Iniciador
|
||||
void Bullet::init(int x, int y, int kind, bool poweredUp, LTexture *texture, SDL_Renderer *renderer)
|
||||
void Bullet::init(int x, int y, int kind, bool poweredUp, int owner, LTexture *texture, SDL_Renderer *renderer)
|
||||
{
|
||||
// Posición inicial del objeto
|
||||
mPosX = x;
|
||||
@@ -33,6 +33,9 @@ void Bullet::init(int x, int y, int kind, bool poweredUp, LTexture *texture, SDL
|
||||
// Tipo de bala
|
||||
mKind = kind;
|
||||
|
||||
// Identificador del dueño del objeto
|
||||
mOwner = -1;
|
||||
|
||||
// Textura con los gráficos del objeto
|
||||
mSprite->setTexture(texture);
|
||||
|
||||
@@ -157,7 +160,7 @@ void Bullet::testMove()
|
||||
// Deshabilita el objeto
|
||||
void Bullet::erase()
|
||||
{
|
||||
init(0, 0, 0, false, nullptr, nullptr);
|
||||
init(0, 0, 0, false, -1, nullptr, nullptr);
|
||||
}
|
||||
|
||||
// Comprueba si el objeto está activo
|
||||
@@ -209,6 +212,12 @@ int Bullet::getKind()
|
||||
return mKind;
|
||||
}
|
||||
|
||||
// Obtiene el valor de la variable
|
||||
int Bullet::getOwner()
|
||||
{
|
||||
return mOwner;
|
||||
}
|
||||
|
||||
// Obtiene el circulo de colisión
|
||||
circle_t &Bullet::getCollider()
|
||||
{
|
||||
|
||||
+5
-1
@@ -16,6 +16,7 @@ private:
|
||||
int mVelX; // Velocidad en el eje X
|
||||
int mVelY; // Velocidad en el eje Y
|
||||
int mKind; // Tipo de objeto
|
||||
int mOwner; // Identificador del dueño del objeto
|
||||
Sprite *mSprite; // Sprite con los graficos y métodos de pintado
|
||||
circle_t mCollider; // Circulo de colisión del objeto
|
||||
|
||||
@@ -30,7 +31,7 @@ public:
|
||||
~Bullet();
|
||||
|
||||
// Iniciador
|
||||
void init(int x, int y, int kind, bool poweredUp, LTexture *texture, SDL_Renderer *renderer);
|
||||
void init(int x, int y, int kind, bool poweredUp, int owner, LTexture *texture, SDL_Renderer *renderer);
|
||||
|
||||
// Pinta el objeto en pantalla
|
||||
void render();
|
||||
@@ -62,6 +63,9 @@ public:
|
||||
// Obtiene el valor de la variable
|
||||
int getKind();
|
||||
|
||||
// Obtiene el valor de la variable
|
||||
int getOwner();
|
||||
|
||||
// Obtiene el circulo de colisión
|
||||
circle_t &getCollider();
|
||||
};
|
||||
|
||||
+49
-50
@@ -1552,35 +1552,32 @@ void Game::renderScoreBoard()
|
||||
if (mPlayer[0]->isAlive())
|
||||
mSpriteScoreBoard->render();
|
||||
|
||||
//if (!mDemo.enabled)
|
||||
{
|
||||
// SCORE
|
||||
mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_WORD_Y - 6, mTextStrings[39], 0);
|
||||
mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_NUMBER_Y - 6, updateScoreText(mScore), 0);
|
||||
// SCORE
|
||||
mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_WORD_Y - 6, mTextStrings[39], 0);
|
||||
mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_NUMBER_Y - 6, updateScoreText(mScore), 0);
|
||||
|
||||
// HI-SCORE
|
||||
mText->writeCentered(PLAY_AREA_CENTER_THIRD_QUARTER_X, HISCORE_WORD_Y - 6, mTextStrings[40], 0);
|
||||
mText->writeCentered(PLAY_AREA_CENTER_THIRD_QUARTER_X, HISCORE_NUMBER_Y - 6, updateScoreText(mHiScore), 0);
|
||||
// HI-SCORE
|
||||
mText->writeCentered(PLAY_AREA_CENTER_THIRD_QUARTER_X, HISCORE_WORD_Y - 6, mTextStrings[40], 0);
|
||||
mText->writeCentered(PLAY_AREA_CENTER_THIRD_QUARTER_X, HISCORE_NUMBER_Y - 6, updateScoreText(mHiScore), 0);
|
||||
|
||||
// MULT
|
||||
color.g = 255;
|
||||
mText->writeColored(MULTIPLIER_WORD_X, MULTIPLIER_WORD_Y - 6, mTextStrings[41], color);
|
||||
// MULT
|
||||
color.g = 255;
|
||||
mText->writeColored(MULTIPLIER_WORD_X, MULTIPLIER_WORD_Y - 6, mTextStrings[41], color);
|
||||
|
||||
color.g = 192;
|
||||
mTextX2->writeShadowed(PLAY_AREA_CENTER_X - 16, SCORE_WORD_Y + 5, std::to_string(mPlayer[0]->getScoreMultiplier()).substr(0, 1), color, 1);
|
||||
mText->writeShadowed(PLAY_AREA_CENTER_X - 2, SCORE_WORD_Y + 12, ".", color);
|
||||
mText->writeShadowed(PLAY_AREA_CENTER_X + 4, SCORE_WORD_Y + 12, std::to_string(mPlayer[0]->getScoreMultiplier()).substr(2, 1), color);
|
||||
color.g = 192;
|
||||
mTextX2->writeShadowed(PLAY_AREA_CENTER_X - 16, SCORE_WORD_Y + 5, std::to_string(mPlayer[0]->getScoreMultiplier()).substr(0, 1), color, 1);
|
||||
mText->writeShadowed(PLAY_AREA_CENTER_X - 2, SCORE_WORD_Y + 12, ".", color);
|
||||
mText->writeShadowed(PLAY_AREA_CENTER_X + 4, SCORE_WORD_Y + 12, std::to_string(mPlayer[0]->getScoreMultiplier()).substr(2, 1), color);
|
||||
|
||||
// STAGE
|
||||
mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_NUMBER_Y + 4, mTextStrings[42] + std::to_string(mStage[mCurrentStage].number), 0);
|
||||
// STAGE
|
||||
mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_NUMBER_Y + 4, mTextStrings[42] + std::to_string(mStage[mCurrentStage].number), 0);
|
||||
|
||||
// POWER
|
||||
mSpritePowerMeter->setSpriteClip(256, 184, 40, 8);
|
||||
mSpritePowerMeter->render();
|
||||
const float percent = (mStage[mCurrentStage].currentPower * 40.0f) / mStage[mCurrentStage].powerToComplete;
|
||||
mSpritePowerMeter->setSpriteClip(296, 184, (int)percent, 8);
|
||||
mSpritePowerMeter->render();
|
||||
}
|
||||
// POWER
|
||||
mSpritePowerMeter->setSpriteClip(256, 184, 40, 8);
|
||||
mSpritePowerMeter->render();
|
||||
const float percent = (mStage[mCurrentStage].currentPower * 40.0f) / mStage[mCurrentStage].powerToComplete;
|
||||
mSpritePowerMeter->setSpriteClip(296, 184, (int)percent, 8);
|
||||
mSpritePowerMeter->render();
|
||||
}
|
||||
|
||||
// Actualiza las variables del jugador
|
||||
@@ -2102,19 +2099,20 @@ void Game::checkBulletBalloonCollision()
|
||||
if (mBalloon[i]->isEnabled() && (!mBalloon[i]->isInvulnerable()) && mBullet[j]->isActive())
|
||||
if (checkCollision(mBalloon[i]->getCollider(), mBullet[j]->getCollider()))
|
||||
{
|
||||
// Otorga los puntos correspondientes al globo
|
||||
mPlayer[0]->incScoreMultiplier();
|
||||
mPlayer[0]->addScore(Uint32(mBalloon[i]->getScore() * mPlayer[0]->getScoreMultiplier()));
|
||||
setScore(mPlayer[0]->getScore());
|
||||
// Otorga los puntos correspondientes al globo al jugador que disparó la bala
|
||||
const int index = mBullet[j]->getOwner();
|
||||
mPlayer[index]->incScoreMultiplier();
|
||||
mPlayer[index]->addScore(Uint32(mBalloon[i]->getScore() * mPlayer[index]->getScoreMultiplier()));
|
||||
setScore(mPlayer[index]->getScore());
|
||||
updateHiScore();
|
||||
|
||||
|
||||
// Explota el globo
|
||||
popBalloon(i);
|
||||
|
||||
// Si no es el modo demo, genera un sonido
|
||||
if (!mDemo.enabled)
|
||||
JA_PlaySound(mSoundBalloon);
|
||||
|
||||
|
||||
// Destruye la bala
|
||||
mBullet[j]->erase();
|
||||
|
||||
@@ -2167,9 +2165,9 @@ void Game::resetBullets()
|
||||
}
|
||||
|
||||
// Crea un objeto bala
|
||||
void Game::createBullet(int x, int y, Uint8 kind, bool poweredUp)
|
||||
void Game::createBullet(int x, int y, Uint8 kind, bool poweredUp, int owner)
|
||||
{
|
||||
mBullet[getBulletFreeIndex()]->init(x, y, kind, poweredUp, mTextureBullet, mRenderer);
|
||||
mBullet[getBulletFreeIndex()]->init(x, y, kind, poweredUp, owner, mTextureBullet, mRenderer);
|
||||
}
|
||||
|
||||
// Actualiza los items
|
||||
@@ -2688,37 +2686,38 @@ void Game::checkGameInput()
|
||||
// Modo Demo activo
|
||||
if (mDemo.enabled)
|
||||
{
|
||||
const int index = 0;
|
||||
if (mDemo.dataFile[mDemo.counter].left == 1)
|
||||
mPlayer[0]->setInput(INPUT_LEFT);
|
||||
mPlayer[index]->setInput(INPUT_LEFT);
|
||||
|
||||
if (mDemo.dataFile[mDemo.counter].right == 1)
|
||||
mPlayer[0]->setInput(INPUT_RIGHT);
|
||||
mPlayer[index]->setInput(INPUT_RIGHT);
|
||||
|
||||
if (mDemo.dataFile[mDemo.counter].noInput == 1)
|
||||
mPlayer[0]->setInput(NO_INPUT);
|
||||
mPlayer[index]->setInput(NO_INPUT);
|
||||
|
||||
if (mDemo.dataFile[mDemo.counter].fire == 1)
|
||||
if (mPlayer[0]->canFire())
|
||||
if (mPlayer[index]->canFire())
|
||||
{
|
||||
mPlayer[0]->setInput(INPUT_FIRE_UP);
|
||||
createBullet(mPlayer[0]->getPosX() + (mPlayer[0]->getWidth() / 2) - 4, mPlayer[0]->getPosY() + (mPlayer[0]->getHeight() / 2), BULLET_UP, mPlayer[0]->isPowerUp());
|
||||
mPlayer[0]->setFireCooldown(10);
|
||||
mPlayer[index]->setInput(INPUT_FIRE_UP);
|
||||
createBullet(mPlayer[index]->getPosX() + (mPlayer[index]->getWidth() / 2) - 4, mPlayer[index]->getPosY() + (mPlayer[index]->getHeight() / 2), BULLET_UP, mPlayer[index]->isPowerUp(), index);
|
||||
mPlayer[index]->setFireCooldown(10);
|
||||
}
|
||||
|
||||
if (mDemo.dataFile[mDemo.counter].fireLeft == 1)
|
||||
if (mPlayer[0]->canFire())
|
||||
if (mPlayer[index]->canFire())
|
||||
{
|
||||
mPlayer[0]->setInput(INPUT_FIRE_LEFT);
|
||||
createBullet(mPlayer[0]->getPosX() + (mPlayer[0]->getWidth() / 2) - 4, mPlayer[0]->getPosY() + (mPlayer[0]->getHeight() / 2), BULLET_UP, mPlayer[0]->isPowerUp());
|
||||
mPlayer[0]->setFireCooldown(10);
|
||||
mPlayer[index]->setInput(INPUT_FIRE_LEFT);
|
||||
createBullet(mPlayer[index]->getPosX() + (mPlayer[index]->getWidth() / 2) - 4, mPlayer[index]->getPosY() + (mPlayer[index]->getHeight() / 2), BULLET_UP, mPlayer[index]->isPowerUp(), index);
|
||||
mPlayer[index]->setFireCooldown(10);
|
||||
}
|
||||
|
||||
if (mDemo.dataFile[mDemo.counter].fireRight == 1)
|
||||
if (mPlayer[0]->canFire())
|
||||
if (mPlayer[index]->canFire())
|
||||
{
|
||||
mPlayer[0]->setInput(INPUT_FIRE_RIGHT);
|
||||
createBullet(mPlayer[0]->getPosX() + (mPlayer[0]->getWidth() / 2) - 4, mPlayer[0]->getPosY() + (mPlayer[0]->getHeight() / 2), BULLET_UP, mPlayer[0]->isPowerUp());
|
||||
mPlayer[0]->setFireCooldown(10);
|
||||
mPlayer[index]->setInput(INPUT_FIRE_RIGHT);
|
||||
createBullet(mPlayer[index]->getPosX() + (mPlayer[index]->getWidth() / 2) - 4, mPlayer[index]->getPosY() + (mPlayer[index]->getHeight() / 2), BULLET_UP, mPlayer[index]->isPowerUp(), index);
|
||||
mPlayer[index]->setFireCooldown(10);
|
||||
}
|
||||
|
||||
// Comprueba el input de pausa
|
||||
@@ -2763,7 +2762,7 @@ void Game::checkGameInput()
|
||||
if (mPlayer[i]->canFire())
|
||||
{
|
||||
mPlayer[i]->setInput(INPUT_FIRE_UP);
|
||||
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_UP, mPlayer[i]->isPowerUp());
|
||||
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_UP, mPlayer[i]->isPowerUp(), i);
|
||||
mPlayer[i]->setFireCooldown(10);
|
||||
|
||||
// Reproduce el sonido de disparo
|
||||
@@ -2779,7 +2778,7 @@ void Game::checkGameInput()
|
||||
if (mPlayer[i]->canFire())
|
||||
{
|
||||
mPlayer[i]->setInput(INPUT_FIRE_LEFT);
|
||||
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_LEFT, mPlayer[i]->isPowerUp());
|
||||
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_LEFT, mPlayer[i]->isPowerUp(), i);
|
||||
mPlayer[i]->setFireCooldown(10);
|
||||
|
||||
// Reproduce el sonido de disparo
|
||||
@@ -2795,7 +2794,7 @@ void Game::checkGameInput()
|
||||
if (mPlayer[i]->canFire())
|
||||
{
|
||||
mPlayer[i]->setInput(INPUT_FIRE_RIGHT);
|
||||
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_RIGHT, mPlayer[i]->isPowerUp());
|
||||
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_RIGHT, mPlayer[i]->isPowerUp(), i);
|
||||
mPlayer[i]->setFireCooldown(10);
|
||||
|
||||
// Reproduce el sonido de disparo
|
||||
|
||||
+1
-1
@@ -348,7 +348,7 @@ public:
|
||||
void resetBullets();
|
||||
|
||||
// Crea un objeto bala
|
||||
void createBullet(int x, int y, Uint8 kind, bool poweredUp);
|
||||
void createBullet(int x, int y, Uint8 kind, bool poweredUp, int owner);
|
||||
|
||||
// Actualiza los items
|
||||
void updateItems();
|
||||
|
||||
+1
-2
@@ -37,13 +37,12 @@ un tipo asociado diferente a NO_KIND
|
||||
#include "director.h"
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
#include <ctime>
|
||||
|
||||
int main(int argc, char *args[])
|
||||
{
|
||||
// Inicia el generador de numeros aleatorios
|
||||
//srand(time(nullptr));
|
||||
std::srand(static_cast<unsigned int>(std::time(nullptr)));
|
||||
std::srand(static_cast<unsigned int>(SDL_GetTicks()));
|
||||
|
||||
// Crea el objeto mDirector
|
||||
Director *mDirector = new Director(args[0]);
|
||||
|
||||
Reference in New Issue
Block a user