Cambiados los accesos a vector de .at a []
This commit is contained in:
@@ -849,8 +849,8 @@ void Balloon::updateBounce()
|
||||
{
|
||||
if (bouncing.enabled)
|
||||
{
|
||||
bouncing.zoomW = bouncing.w.at(bouncing.counter / bouncing.speed);
|
||||
bouncing.zoomH = bouncing.h.at(bouncing.counter / bouncing.speed);
|
||||
bouncing.zoomW = bouncing.w[bouncing.counter / bouncing.speed];
|
||||
bouncing.zoomH = bouncing.h[bouncing.counter / bouncing.speed];
|
||||
sprite->setZoomW(bouncing.zoomW);
|
||||
sprite->setZoomH(bouncing.zoomH);
|
||||
bouncing.despX = (sprite->getSpriteClip().w - (sprite->getSpriteClip().w * bouncing.zoomW));
|
||||
|
||||
@@ -456,8 +456,8 @@ bool Director::saveConfigFile()
|
||||
file << "\n## OTHER OPTIONS\n";
|
||||
file << "language=" + std::to_string(options->language) + "\n";
|
||||
file << "difficulty=" + std::to_string(options->difficulty) + "\n";
|
||||
file << "input0=" + std::to_string(options->input.at(0).deviceType) + "\n";
|
||||
file << "input1=" + std::to_string(options->input.at(1).deviceType) + "\n";
|
||||
file << "input0=" + std::to_string(options->input[0].deviceType) + "\n";
|
||||
file << "input1=" + std::to_string(options->input[1].deviceType) + "\n";
|
||||
|
||||
file << "\n## ONLINE OPTIONS\n";
|
||||
file << "enabled=" + boolToString(options->online.enabled) + "\n";
|
||||
@@ -667,12 +667,12 @@ bool Director::setOptions(options_t *options, std::string var, std::string value
|
||||
|
||||
else if (var == "input0")
|
||||
{
|
||||
options->input.at(0).deviceType = std::stoi(value);
|
||||
options->input[0].deviceType = std::stoi(value);
|
||||
}
|
||||
|
||||
else if (var == "input1")
|
||||
{
|
||||
options->input.at(1).deviceType = std::stoi(value);
|
||||
options->input[1].deviceType = std::stoi(value);
|
||||
}
|
||||
|
||||
else if (var == "enabled")
|
||||
|
||||
106
source/game.cpp
106
source/game.cpp
@@ -201,14 +201,14 @@ void Game::init()
|
||||
// Crea los jugadores
|
||||
if (numPlayers == 1)
|
||||
{
|
||||
Player *player = new Player(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, renderer, playerTextures.at(options->playerSelected), playerAnimations);
|
||||
Player *player = new Player(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, renderer, playerTextures[options->playerSelected], playerAnimations);
|
||||
players.push_back(player);
|
||||
}
|
||||
|
||||
else if (numPlayers == 2)
|
||||
{
|
||||
Player *player1 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, renderer, playerTextures.at(0), playerAnimations);
|
||||
Player *player2 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, renderer, playerTextures.at(1), playerAnimations);
|
||||
Player *player1 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, renderer, playerTextures[0], playerAnimations);
|
||||
Player *player2 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, renderer, playerTextures[1], playerAnimations);
|
||||
players.push_back(player1);
|
||||
players.push_back(player2);
|
||||
}
|
||||
@@ -735,7 +735,7 @@ bool Game::sendOnlineScore()
|
||||
return true;
|
||||
}
|
||||
|
||||
const int score = players.at(0)->getScore();
|
||||
const int score = players[0]->getScore();
|
||||
if (score <= options->online.score)
|
||||
{
|
||||
return true;
|
||||
@@ -1648,21 +1648,21 @@ void Game::renderScoreBoard()
|
||||
|
||||
// PLAYER1 - SCORE
|
||||
textScoreBoard->writeCentered(offsetLeft, offset1, lang->getText(53));
|
||||
textScoreBoard->writeCentered(offsetLeft, offset2, updateScoreText(players.at(0)->getScore()));
|
||||
textScoreBoard->writeCentered(offsetLeft, offset2, updateScoreText(players[0]->getScore()));
|
||||
|
||||
// PLAYER1 - MULT
|
||||
textScoreBoard->writeCentered(offsetLeft, offset3, lang->getText(55));
|
||||
textScoreBoard->writeCentered(offsetLeft, offset4, std::to_string(players.at(0)->getScoreMultiplier()).substr(0, 3));
|
||||
textScoreBoard->writeCentered(offsetLeft, offset4, std::to_string(players[0]->getScoreMultiplier()).substr(0, 3));
|
||||
|
||||
if (numPlayers == 2)
|
||||
{
|
||||
// PLAYER2 - SCORE
|
||||
textScoreBoard->writeCentered(offsetRight, offset1, lang->getText(54));
|
||||
textScoreBoard->writeCentered(offsetRight, offset2, updateScoreText(players.at(1)->getScore()));
|
||||
textScoreBoard->writeCentered(offsetRight, offset2, updateScoreText(players[1]->getScore()));
|
||||
|
||||
// PLAYER2 - MULT
|
||||
textScoreBoard->writeCentered(offsetRight, offset3, lang->getText(55));
|
||||
textScoreBoard->writeCentered(offsetRight, offset4, std::to_string(players.at(1)->getScoreMultiplier()).substr(0, 3));
|
||||
textScoreBoard->writeCentered(offsetRight, offset4, std::to_string(players[1]->getScoreMultiplier()).substr(0, 3));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1872,7 +1872,7 @@ void Game::renderBalloons()
|
||||
Uint8 Game::createBalloon(float x, int y, Uint8 kind, float velx, float speed, Uint16 creationtimer)
|
||||
{
|
||||
const int index = (kind - 1) % 4;
|
||||
Balloon *b = new Balloon(x, y, kind, velx, speed, creationtimer, balloonTextures.at(index), balloonAnimations.at(index), renderer);
|
||||
Balloon *b = new Balloon(x, y, kind, velx, speed, creationtimer, balloonTextures[index], balloonAnimations[index], renderer);
|
||||
balloons.push_back(b);
|
||||
return (Uint8)(balloons.size() - 1);
|
||||
}
|
||||
@@ -1890,7 +1890,7 @@ void Game::createPowerBall()
|
||||
const int x[3] = {left, center, right};
|
||||
const float vx[3] = {BALLOON_VELX_POSITIVE, BALLOON_VELX_POSITIVE, BALLOON_VELX_NEGATIVE};
|
||||
|
||||
Balloon *b = new Balloon(x[luck], posY, POWER_BALL, vx[luck], enemySpeed, 100, balloonTextures.at(3), balloonAnimations.at(3), renderer);
|
||||
Balloon *b = new Balloon(x[luck], posY, POWER_BALL, vx[luck], enemySpeed, 100, balloonTextures[3], balloonAnimations[3], renderer);
|
||||
balloons.push_back(b);
|
||||
|
||||
powerBallEnabled = true;
|
||||
@@ -2035,25 +2035,25 @@ void Game::popBalloon(Balloon *balloon)
|
||||
// En cualquier otro caso, crea dos globos de un tipo inferior
|
||||
default:
|
||||
const int index = createBalloon(0, balloon->getPosY(), balloon->getKind() - 1, BALLOON_VELX_NEGATIVE, enemySpeed, 0);
|
||||
balloons.at(index)->allignTo(balloon->getPosX() + (balloon->getWidth() / 2));
|
||||
if (balloons.at(index)->getClass() == BALLOON_CLASS)
|
||||
balloons[index]->allignTo(balloon->getPosX() + (balloon->getWidth() / 2));
|
||||
if (balloons[index]->getClass() == BALLOON_CLASS)
|
||||
{
|
||||
balloons.at(index)->setVelY(-2.50f);
|
||||
balloons[index]->setVelY(-2.50f);
|
||||
}
|
||||
else
|
||||
{
|
||||
balloons.at(index)->setVelY(BALLOON_VELX_NEGATIVE);
|
||||
balloons[index]->setVelY(BALLOON_VELX_NEGATIVE);
|
||||
}
|
||||
|
||||
const int index2 = createBalloon(0, balloon->getPosY(), balloon->getKind() - 1, BALLOON_VELX_POSITIVE, enemySpeed, 0);
|
||||
balloons.at(index2)->allignTo(balloon->getPosX() + (balloon->getWidth() / 2));
|
||||
if (balloons.at(index2)->getClass() == BALLOON_CLASS)
|
||||
balloons[index2]->allignTo(balloon->getPosX() + (balloon->getWidth() / 2));
|
||||
if (balloons[index2]->getClass() == BALLOON_CLASS)
|
||||
{
|
||||
balloons.at(index2)->setVelY(-2.50f);
|
||||
balloons[index2]->setVelY(-2.50f);
|
||||
}
|
||||
else
|
||||
{
|
||||
balloons.at(index2)->setVelY(BALLOON_VELX_NEGATIVE);
|
||||
balloons[index2]->setVelY(BALLOON_VELX_NEGATIVE);
|
||||
}
|
||||
|
||||
// Elimina el globo
|
||||
@@ -2201,9 +2201,9 @@ void Game::freeBalloons()
|
||||
{
|
||||
for (int i = balloons.size() - 1; i >= 0; --i)
|
||||
{
|
||||
if (balloons.at(i)->isEnabled() == false)
|
||||
if (balloons[i]->isEnabled() == false)
|
||||
{
|
||||
delete balloons.at(i);
|
||||
delete balloons[i];
|
||||
balloons.erase(balloons.begin() + i);
|
||||
}
|
||||
}
|
||||
@@ -2309,8 +2309,8 @@ void Game::checkBulletBalloonCollision()
|
||||
{
|
||||
// Otorga los puntos correspondientes al globo al jugador que disparó la bala
|
||||
int index = bullet->getOwner();
|
||||
players.at(index)->incScoreMultiplier();
|
||||
players.at(index)->addScore(Uint32(balloon->getScore() * players.at(index)->getScoreMultiplier() * difficultyScoreMultiplier));
|
||||
players[index]->incScoreMultiplier();
|
||||
players[index]->addScore(Uint32(balloon->getScore() * players[index]->getScoreMultiplier() * difficultyScoreMultiplier));
|
||||
updateHiScore();
|
||||
|
||||
// Explota el globo
|
||||
@@ -2336,7 +2336,7 @@ void Game::checkBulletBalloonCollision()
|
||||
}
|
||||
else
|
||||
{
|
||||
createItem(droppeditem, players.at(index)->getPosX(), 0);
|
||||
createItem(droppeditem, players[index]->getPosX(), 0);
|
||||
coffeeMachineEnabled = true;
|
||||
}
|
||||
}
|
||||
@@ -2357,7 +2357,7 @@ void Game::moveBullets()
|
||||
{
|
||||
if (bullet->move() == BULLET_MOVE_OUT)
|
||||
{
|
||||
players.at(bullet->getOwner())->decScoreMultiplier();
|
||||
players[bullet->getOwner()]->decScoreMultiplier();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2389,9 +2389,9 @@ void Game::freeBullets()
|
||||
{
|
||||
for (int i = bullets.size() - 1; i >= 0; --i)
|
||||
{
|
||||
if (bullets.at(i)->isEnabled() == false)
|
||||
if (bullets[i]->isEnabled() == false)
|
||||
{
|
||||
delete bullets.at(i);
|
||||
delete bullets[i];
|
||||
bullets.erase(bullets.begin() + i);
|
||||
}
|
||||
}
|
||||
@@ -2503,7 +2503,7 @@ Uint8 Game::dropItem()
|
||||
// Crea un objeto item
|
||||
void Game::createItem(Uint8 kind, float x, float y)
|
||||
{
|
||||
Item *item = new Item(kind, x, y, itemTextures.at(kind), itemAnimations.at(kind), renderer);
|
||||
Item *item = new Item(kind, x, y, itemTextures[kind], itemAnimations[kind], renderer);
|
||||
items.push_back(item);
|
||||
}
|
||||
|
||||
@@ -2514,9 +2514,9 @@ void Game::freeItems()
|
||||
{
|
||||
for (int i = items.size() - 1; i >= 0; --i)
|
||||
{
|
||||
if (items.at(i)->isEnabled() == false)
|
||||
if (items[i]->isEnabled() == false)
|
||||
{
|
||||
delete items.at(i);
|
||||
delete items[i];
|
||||
items.erase(items.begin() + i);
|
||||
}
|
||||
}
|
||||
@@ -2546,9 +2546,9 @@ void Game::freeSmartSprites()
|
||||
{
|
||||
for (int i = smartSprites.size() - 1; i >= 0; --i)
|
||||
{
|
||||
if (smartSprites.at(i)->hasFinished())
|
||||
if (smartSprites[i]->hasFinished())
|
||||
{
|
||||
delete smartSprites.at(i);
|
||||
delete smartSprites[i];
|
||||
smartSprites.erase(smartSprites.begin() + i);
|
||||
}
|
||||
}
|
||||
@@ -2588,7 +2588,7 @@ void Game::updateShakeEffect()
|
||||
// Crea un SmartSprite para arrojar el item café al recibir un impacto
|
||||
void Game::throwCoffee(int x, int y)
|
||||
{
|
||||
SmartSprite *ss = new SmartSprite(itemTextures.at(4), renderer);
|
||||
SmartSprite *ss = new SmartSprite(itemTextures[4], renderer);
|
||||
smartSprites.push_back(ss);
|
||||
|
||||
ss->setPosX(x - 8);
|
||||
@@ -2919,7 +2919,7 @@ void Game::render()
|
||||
renderScoreBoard();
|
||||
renderPlayers();
|
||||
|
||||
if ((deathCounter <= 150) && !players.at(0)->isAlive())
|
||||
if ((deathCounter <= 150) && !players[0]->isAlive())
|
||||
{
|
||||
renderDeathFade(150 - deathCounter);
|
||||
}
|
||||
@@ -2976,45 +2976,45 @@ void Game::checkGameInput()
|
||||
const int index = 0;
|
||||
if (demo.dataFile[demo.counter].left == 1)
|
||||
{
|
||||
players.at(index)->setInput(INPUT_LEFT);
|
||||
players[index]->setInput(INPUT_LEFT);
|
||||
}
|
||||
|
||||
if (demo.dataFile[demo.counter].right == 1)
|
||||
{
|
||||
players.at(index)->setInput(INPUT_RIGHT);
|
||||
players[index]->setInput(INPUT_RIGHT);
|
||||
}
|
||||
|
||||
if (demo.dataFile[demo.counter].noInput == 1)
|
||||
{
|
||||
players.at(index)->setInput(INPUT_NULL);
|
||||
players[index]->setInput(INPUT_NULL);
|
||||
}
|
||||
|
||||
if (demo.dataFile[demo.counter].fire == 1)
|
||||
{
|
||||
if (players.at(index)->canFire())
|
||||
if (players[index]->canFire())
|
||||
{
|
||||
players.at(index)->setInput(INPUT_BUTTON_2);
|
||||
createBullet(players.at(index)->getPosX() + (players.at(index)->getWidth() / 2) - 4, players.at(index)->getPosY() + (players.at(index)->getHeight() / 2), BULLET_UP, players.at(index)->isPowerUp(), index);
|
||||
players.at(index)->setFireCooldown(10);
|
||||
players[index]->setInput(INPUT_BUTTON_2);
|
||||
createBullet(players[index]->getPosX() + (players[index]->getWidth() / 2) - 4, players[index]->getPosY() + (players[index]->getHeight() / 2), BULLET_UP, players[index]->isPowerUp(), index);
|
||||
players[index]->setFireCooldown(10);
|
||||
}
|
||||
}
|
||||
if (demo.dataFile[demo.counter].fireLeft == 1)
|
||||
{
|
||||
if (players.at(index)->canFire())
|
||||
if (players[index]->canFire())
|
||||
{
|
||||
players.at(index)->setInput(INPUT_BUTTON_1);
|
||||
createBullet(players.at(index)->getPosX() + (players.at(index)->getWidth() / 2) - 4, players.at(index)->getPosY() + (players.at(index)->getHeight() / 2), BULLET_UP, players.at(index)->isPowerUp(), index);
|
||||
players.at(index)->setFireCooldown(10);
|
||||
players[index]->setInput(INPUT_BUTTON_1);
|
||||
createBullet(players[index]->getPosX() + (players[index]->getWidth() / 2) - 4, players[index]->getPosY() + (players[index]->getHeight() / 2), BULLET_UP, players[index]->isPowerUp(), index);
|
||||
players[index]->setFireCooldown(10);
|
||||
}
|
||||
}
|
||||
|
||||
if (demo.dataFile[demo.counter].fireRight == 1)
|
||||
{
|
||||
if (players.at(index)->canFire())
|
||||
if (players[index]->canFire())
|
||||
{
|
||||
players.at(index)->setInput(INPUT_BUTTON_3);
|
||||
createBullet(players.at(index)->getPosX() + (players.at(index)->getWidth() / 2) - 4, players.at(index)->getPosY() + (players.at(index)->getHeight() / 2), BULLET_UP, players.at(index)->isPowerUp(), index);
|
||||
players.at(index)->setFireCooldown(10);
|
||||
players[index]->setInput(INPUT_BUTTON_3);
|
||||
createBullet(players[index]->getPosX() + (players[index]->getWidth() / 2) - 4, players[index]->getPosY() + (players[index]->getHeight() / 2), BULLET_UP, players[index]->isPowerUp(), index);
|
||||
players[index]->setFireCooldown(10);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3296,7 +3296,7 @@ section_t Game::run()
|
||||
// Reproduce la música
|
||||
if (!gameCompleted)
|
||||
{
|
||||
if (players.at(0)->isAlive())
|
||||
if (players[0]->isAlive())
|
||||
{
|
||||
JA_PlayMusic(gameMusic);
|
||||
}
|
||||
@@ -3408,7 +3408,7 @@ void Game::renderPausedGame()
|
||||
renderScoreBoard();
|
||||
renderPlayers();
|
||||
|
||||
if ((deathCounter <= 150) && !players.at(0)->isAlive())
|
||||
if ((deathCounter <= 150) && !players[0]->isAlive())
|
||||
{
|
||||
renderDeathFade(150 - deathCounter);
|
||||
}
|
||||
@@ -3578,7 +3578,7 @@ void Game::renderGameOverScreen()
|
||||
textBig->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 6), lang->getText(43));
|
||||
|
||||
// Your Score
|
||||
text->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 3), lang->getText(44) + std::to_string(players.at(0)->getScore()));
|
||||
text->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 3), lang->getText(44) + std::to_string(players[0]->getScore()));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3592,10 +3592,10 @@ void Game::renderGameOverScreen()
|
||||
textBig->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 7), lang->getText(43));
|
||||
|
||||
// Player1 Score
|
||||
text->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 4), lang->getText(77) + std::to_string(players.at(0)->getScore()));
|
||||
text->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 4), lang->getText(77) + std::to_string(players[0]->getScore()));
|
||||
|
||||
// Player2 Score
|
||||
text->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 2), lang->getText(78) + std::to_string(players.at(1)->getScore()));
|
||||
text->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 2), lang->getText(78) + std::to_string(players[1]->getScore()));
|
||||
}
|
||||
|
||||
// Continue?
|
||||
|
||||
@@ -120,14 +120,14 @@ void HiScoreTable::render()
|
||||
|
||||
for (int i = numUsers; i < 10; ++i)
|
||||
{
|
||||
const int nameLenght = names.at(i - numUsers).length();
|
||||
const int nameLenght = names[i - numUsers].length();
|
||||
const int numDots = 20 - nameLenght;
|
||||
std::string dots = "";
|
||||
for (int j = 0; j < numDots; ++j)
|
||||
{
|
||||
dots = dots + ".";
|
||||
}
|
||||
const std::string line = names.at(i - numUsers) + dots + "0000000";
|
||||
const std::string line = names[i - numUsers] + dots + "0000000";
|
||||
text->writeDX(TXT_CENTER | TXT_SHADOW, GAMECANVAS_CENTER_X, (i * spaceBetweenLines) + spaceBetweenHeader, line, 1, orangeColor, 1, shdwTxtColor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ Instructions::Instructions(SDL_Renderer *renderer, Screen *screen, Asset *asset,
|
||||
|
||||
eventHandler = new SDL_Event();
|
||||
|
||||
sprite = new Sprite(0, 0, 16, 16, itemTextures.at(0), renderer);
|
||||
sprite = new Sprite(0, 0, 16, 16, itemTextures[0], renderer);
|
||||
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
|
||||
|
||||
// Crea un backbuffer para el renderizador
|
||||
@@ -144,35 +144,35 @@ void Instructions::render()
|
||||
}
|
||||
|
||||
// Disquito
|
||||
sprite->setTexture(itemTextures.at(0));
|
||||
sprite->setTexture(itemTextures[0]);
|
||||
sprite->setPos(destRect1);
|
||||
srcRect.y = 16 * (((counter + 12) / 36) % 2);
|
||||
sprite->setSpriteClip(srcRect);
|
||||
sprite->render();
|
||||
|
||||
// Gavineixon
|
||||
sprite->setTexture(itemTextures.at(1));
|
||||
sprite->setTexture(itemTextures[1]);
|
||||
sprite->setPos(destRect2);
|
||||
srcRect.y = 16 * (((counter + 9) / 36) % 2);
|
||||
sprite->setSpriteClip(srcRect);
|
||||
sprite->render();
|
||||
|
||||
// Pacmar
|
||||
sprite->setTexture(itemTextures.at(2));
|
||||
sprite->setTexture(itemTextures[2]);
|
||||
sprite->setPos(destRect3);
|
||||
srcRect.y = 16 * (((counter + 6) / 36) % 2);
|
||||
sprite->setSpriteClip(srcRect);
|
||||
sprite->render();
|
||||
|
||||
// Time Stopper
|
||||
sprite->setTexture(itemTextures.at(3));
|
||||
sprite->setTexture(itemTextures[3]);
|
||||
sprite->setPos(destRect4);
|
||||
srcRect.y = 16 * (((counter + 3) / 36) % 2);
|
||||
sprite->setSpriteClip(srcRect);
|
||||
sprite->render();
|
||||
|
||||
// Coffee
|
||||
sprite->setTexture(itemTextures.at(4));
|
||||
sprite->setTexture(itemTextures[4]);
|
||||
sprite->setPos(destRect5);
|
||||
srcRect.y = 16 * (((counter + 0) / 36) % 2);
|
||||
sprite->setSpriteClip(srcRect);
|
||||
|
||||
218
source/intro.cpp
218
source/intro.cpp
@@ -37,54 +37,54 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang)
|
||||
bitmaps.push_back(ss);
|
||||
}
|
||||
|
||||
bitmaps.at(0)->setPosX(-128);
|
||||
bitmaps.at(0)->setPosY(GAMECANVAS_FIRST_QUARTER_Y - 24);
|
||||
bitmaps.at(0)->setVelX(0.0f);
|
||||
bitmaps.at(0)->setVelY(0.0f);
|
||||
bitmaps.at(0)->setAccelX(0.6f);
|
||||
bitmaps.at(0)->setAccelY(0.0f);
|
||||
bitmaps.at(0)->setSpriteClip(0, 0, 128, 96);
|
||||
bitmaps[0]->setPosX(-128);
|
||||
bitmaps[0]->setPosY(GAMECANVAS_FIRST_QUARTER_Y - 24);
|
||||
bitmaps[0]->setVelX(0.0f);
|
||||
bitmaps[0]->setVelY(0.0f);
|
||||
bitmaps[0]->setAccelX(0.6f);
|
||||
bitmaps[0]->setAccelY(0.0f);
|
||||
bitmaps[0]->setSpriteClip(0, 0, 128, 96);
|
||||
|
||||
bitmaps.at(1)->setPosX(GAMECANVAS_WIDTH);
|
||||
bitmaps.at(1)->setPosY(GAMECANVAS_FIRST_QUARTER_Y - 24);
|
||||
bitmaps.at(1)->setVelX(-1.0f);
|
||||
bitmaps.at(1)->setVelY(0.0f);
|
||||
bitmaps.at(1)->setAccelX(-0.3f);
|
||||
bitmaps.at(1)->setAccelY(0.0f);
|
||||
bitmaps.at(1)->setSpriteClip(128, 0, 128, 96);
|
||||
bitmaps[1]->setPosX(GAMECANVAS_WIDTH);
|
||||
bitmaps[1]->setPosY(GAMECANVAS_FIRST_QUARTER_Y - 24);
|
||||
bitmaps[1]->setVelX(-1.0f);
|
||||
bitmaps[1]->setVelY(0.0f);
|
||||
bitmaps[1]->setAccelX(-0.3f);
|
||||
bitmaps[1]->setAccelY(0.0f);
|
||||
bitmaps[1]->setSpriteClip(128, 0, 128, 96);
|
||||
|
||||
bitmaps.at(2)->setPosX(GAMECANVAS_CENTER_X - 64);
|
||||
bitmaps.at(2)->setPosY(-96);
|
||||
bitmaps.at(2)->setVelX(0.0f);
|
||||
bitmaps.at(2)->setVelY(3.0f);
|
||||
bitmaps.at(2)->setAccelX(0.1f);
|
||||
bitmaps.at(2)->setAccelY(0.3f);
|
||||
bitmaps.at(2)->setSpriteClip(0, 96, 128, 96);
|
||||
bitmaps.at(2)->setEnabledCounter(250);
|
||||
bitmaps[2]->setPosX(GAMECANVAS_CENTER_X - 64);
|
||||
bitmaps[2]->setPosY(-96);
|
||||
bitmaps[2]->setVelX(0.0f);
|
||||
bitmaps[2]->setVelY(3.0f);
|
||||
bitmaps[2]->setAccelX(0.1f);
|
||||
bitmaps[2]->setAccelY(0.3f);
|
||||
bitmaps[2]->setSpriteClip(0, 96, 128, 96);
|
||||
bitmaps[2]->setEnabledCounter(250);
|
||||
|
||||
bitmaps.at(3)->setPosX(GAMECANVAS_CENTER_X - 64);
|
||||
bitmaps.at(3)->setPosY(GAMECANVAS_HEIGHT);
|
||||
bitmaps.at(3)->setVelX(0.0f);
|
||||
bitmaps.at(3)->setVelY(-0.7f);
|
||||
bitmaps.at(3)->setAccelX(0.0f);
|
||||
bitmaps.at(3)->setAccelY(0.0f);
|
||||
bitmaps.at(3)->setSpriteClip(128, 96, 128, 96);
|
||||
bitmaps[3]->setPosX(GAMECANVAS_CENTER_X - 64);
|
||||
bitmaps[3]->setPosY(GAMECANVAS_HEIGHT);
|
||||
bitmaps[3]->setVelX(0.0f);
|
||||
bitmaps[3]->setVelY(-0.7f);
|
||||
bitmaps[3]->setAccelX(0.0f);
|
||||
bitmaps[3]->setAccelY(0.0f);
|
||||
bitmaps[3]->setSpriteClip(128, 96, 128, 96);
|
||||
|
||||
bitmaps.at(4)->setPosX(GAMECANVAS_CENTER_X - 64);
|
||||
bitmaps.at(4)->setPosY(-96);
|
||||
bitmaps.at(4)->setVelX(0.0f);
|
||||
bitmaps.at(4)->setVelY(3.0f);
|
||||
bitmaps.at(4)->setAccelX(0.1f);
|
||||
bitmaps.at(4)->setAccelY(0.3f);
|
||||
bitmaps.at(4)->setSpriteClip(0, 192, 128, 96);
|
||||
bitmaps[4]->setPosX(GAMECANVAS_CENTER_X - 64);
|
||||
bitmaps[4]->setPosY(-96);
|
||||
bitmaps[4]->setVelX(0.0f);
|
||||
bitmaps[4]->setVelY(3.0f);
|
||||
bitmaps[4]->setAccelX(0.1f);
|
||||
bitmaps[4]->setAccelY(0.3f);
|
||||
bitmaps[4]->setSpriteClip(0, 192, 128, 96);
|
||||
|
||||
bitmaps.at(5)->setPosX(GAMECANVAS_WIDTH);
|
||||
bitmaps.at(5)->setPosY(GAMECANVAS_FIRST_QUARTER_Y - 24);
|
||||
bitmaps.at(5)->setVelX(-0.7f);
|
||||
bitmaps.at(5)->setVelY(0.0f);
|
||||
bitmaps.at(5)->setAccelX(0.0f);
|
||||
bitmaps.at(5)->setAccelY(0.0f);
|
||||
bitmaps.at(5)->setSpriteClip(128, 192, 128, 96);
|
||||
bitmaps[5]->setPosX(GAMECANVAS_WIDTH);
|
||||
bitmaps[5]->setPosY(GAMECANVAS_FIRST_QUARTER_Y - 24);
|
||||
bitmaps[5]->setVelX(-0.7f);
|
||||
bitmaps[5]->setVelY(0.0f);
|
||||
bitmaps[5]->setAccelX(0.0f);
|
||||
bitmaps[5]->setAccelY(0.0f);
|
||||
bitmaps[5]->setSpriteClip(128, 192, 128, 96);
|
||||
|
||||
// Inicializa los textos de la intro
|
||||
const int totalTexts = 9;
|
||||
@@ -100,40 +100,40 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang)
|
||||
}
|
||||
|
||||
// Un dia qualsevol de l'any 2000
|
||||
texts.at(0)->setCaption(lang->getText(27));
|
||||
texts.at(0)->setSpeed(8);
|
||||
texts[0]->setCaption(lang->getText(27));
|
||||
texts[0]->setSpeed(8);
|
||||
|
||||
// Tot esta tranquil a la UPV
|
||||
texts.at(1)->setCaption(lang->getText(28));
|
||||
texts.at(1)->setSpeed(8);
|
||||
texts[1]->setCaption(lang->getText(28));
|
||||
texts[1]->setSpeed(8);
|
||||
|
||||
// Fins que un desaprensiu...
|
||||
texts.at(2)->setCaption(lang->getText(29));
|
||||
texts.at(2)->setSpeed(12);
|
||||
texts[2]->setCaption(lang->getText(29));
|
||||
texts[2]->setSpeed(12);
|
||||
|
||||
// HEY! ME ANE A FERME UN CORTAET...
|
||||
texts.at(3)->setCaption(lang->getText(30));
|
||||
texts.at(3)->setSpeed(8);
|
||||
texts[3]->setCaption(lang->getText(30));
|
||||
texts[3]->setSpeed(8);
|
||||
|
||||
// UAAAAAAAAAAAAA!!!
|
||||
texts.at(4)->setCaption(lang->getText(31));
|
||||
texts.at(4)->setSpeed(1);
|
||||
texts[4]->setCaption(lang->getText(31));
|
||||
texts[4]->setSpeed(1);
|
||||
|
||||
// Espera un moment...
|
||||
texts.at(5)->setCaption(lang->getText(32));
|
||||
texts.at(5)->setSpeed(16);
|
||||
texts[5]->setCaption(lang->getText(32));
|
||||
texts[5]->setSpeed(16);
|
||||
|
||||
// Si resulta que no tinc solt!
|
||||
texts.at(6)->setCaption(lang->getText(33));
|
||||
texts.at(6)->setSpeed(2);
|
||||
texts[6]->setCaption(lang->getText(33));
|
||||
texts[6]->setSpeed(2);
|
||||
|
||||
// MERDA DE MAQUINA!
|
||||
texts.at(7)->setCaption(lang->getText(34));
|
||||
texts.at(7)->setSpeed(3);
|
||||
texts[7]->setCaption(lang->getText(34));
|
||||
texts[7]->setSpeed(3);
|
||||
|
||||
// Blop... blop... blop...
|
||||
texts.at(8)->setCaption(lang->getText(35));
|
||||
texts.at(8)->setSpeed(16);
|
||||
texts[8]->setCaption(lang->getText(35));
|
||||
texts[8]->setSpeed(16);
|
||||
|
||||
for (auto text : texts)
|
||||
{
|
||||
@@ -235,36 +235,36 @@ void Intro::updateScenes()
|
||||
{
|
||||
case 1:
|
||||
// Primera imagen - UPV
|
||||
if (!bitmaps.at(0)->hasFinished())
|
||||
if (!bitmaps[0]->hasFinished())
|
||||
{
|
||||
bitmaps.at(0)->setEnabled(true);
|
||||
bitmaps[0]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Primer texto de la primera imagen
|
||||
if (bitmaps.at(0)->hasFinished() && !texts.at(0)->hasFinished())
|
||||
if (bitmaps[0]->hasFinished() && !texts[0]->hasFinished())
|
||||
{
|
||||
texts.at(0)->setEnabled(true);
|
||||
texts[0]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Segundo texto de la primera imagen
|
||||
if (texts.at(0)->hasFinished() && !texts.at(1)->hasFinished())
|
||||
if (texts[0]->hasFinished() && !texts[1]->hasFinished())
|
||||
{
|
||||
texts.at(0)->setEnabled(false);
|
||||
texts.at(1)->setEnabled(true);
|
||||
texts[0]->setEnabled(false);
|
||||
texts[1]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Tercer texto de la primera imagen
|
||||
if (texts.at(1)->hasFinished() && !texts.at(2)->hasFinished())
|
||||
if (texts[1]->hasFinished() && !texts[2]->hasFinished())
|
||||
{
|
||||
texts.at(1)->setEnabled(false);
|
||||
texts.at(2)->setEnabled(true);
|
||||
texts[1]->setEnabled(false);
|
||||
texts[2]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Fin de la primera escena
|
||||
if (texts.at(2)->hasFinished())
|
||||
if (texts[2]->hasFinished())
|
||||
{
|
||||
bitmaps.at(0)->setEnabled(false);
|
||||
texts.at(2)->setEnabled(false);
|
||||
bitmaps[0]->setEnabled(false);
|
||||
texts[2]->setEnabled(false);
|
||||
scene++;
|
||||
}
|
||||
|
||||
@@ -272,22 +272,22 @@ void Intro::updateScenes()
|
||||
|
||||
case 2:
|
||||
// Segunda imagen - Máquina
|
||||
if (!bitmaps.at(1)->hasFinished())
|
||||
if (!bitmaps[1]->hasFinished())
|
||||
{
|
||||
bitmaps.at(1)->setEnabled(true);
|
||||
bitmaps[1]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Primer texto de la segunda imagen
|
||||
if (bitmaps.at(1)->hasFinished() && !texts.at(3)->hasFinished())
|
||||
if (bitmaps[1]->hasFinished() && !texts[3]->hasFinished())
|
||||
{
|
||||
texts.at(3)->setEnabled(true);
|
||||
texts[3]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Fin de la segunda escena
|
||||
if (texts.at(3)->hasFinished())
|
||||
if (texts[3]->hasFinished())
|
||||
{
|
||||
bitmaps.at(1)->setEnabled(false);
|
||||
texts.at(3)->setEnabled(false);
|
||||
bitmaps[1]->setEnabled(false);
|
||||
texts[3]->setEnabled(false);
|
||||
scene++;
|
||||
}
|
||||
|
||||
@@ -295,17 +295,17 @@ void Intro::updateScenes()
|
||||
|
||||
case 3:
|
||||
// Tercera imagen junto con primer texto - GRITO
|
||||
if (!bitmaps.at(2)->hasFinished() && !texts.at(4)->hasFinished())
|
||||
if (!bitmaps[2]->hasFinished() && !texts[4]->hasFinished())
|
||||
{
|
||||
bitmaps.at(2)->setEnabled(true);
|
||||
texts.at(4)->setEnabled(true);
|
||||
bitmaps[2]->setEnabled(true);
|
||||
texts[4]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Fin de la tercera escena
|
||||
if (bitmaps.at(2)->hasFinished() && texts.at(4)->hasFinished())
|
||||
if (bitmaps[2]->hasFinished() && texts[4]->hasFinished())
|
||||
{
|
||||
bitmaps.at(2)->setEnabled(false);
|
||||
texts.at(4)->setEnabled(false);
|
||||
bitmaps[2]->setEnabled(false);
|
||||
texts[4]->setEnabled(false);
|
||||
scene++;
|
||||
}
|
||||
|
||||
@@ -313,24 +313,24 @@ void Intro::updateScenes()
|
||||
|
||||
case 4:
|
||||
// Cuarta imagen junto con primer texto - Reflexión
|
||||
if (!bitmaps.at(3)->hasFinished() && !texts.at(5)->hasFinished())
|
||||
if (!bitmaps[3]->hasFinished() && !texts[5]->hasFinished())
|
||||
{
|
||||
bitmaps.at(3)->setEnabled(true);
|
||||
texts.at(5)->setEnabled(true);
|
||||
bitmaps[3]->setEnabled(true);
|
||||
texts[5]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Segundo texto de la cuarta imagen
|
||||
if (texts.at(5)->hasFinished() && !texts.at(6)->hasFinished())
|
||||
if (texts[5]->hasFinished() && !texts[6]->hasFinished())
|
||||
{
|
||||
texts.at(5)->setEnabled(false);
|
||||
texts.at(6)->setEnabled(true);
|
||||
texts[5]->setEnabled(false);
|
||||
texts[6]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Fin de la cuarta escena
|
||||
if (bitmaps.at(3)->hasFinished() && texts.at(6)->hasFinished())
|
||||
if (bitmaps[3]->hasFinished() && texts[6]->hasFinished())
|
||||
{
|
||||
bitmaps.at(3)->setEnabled(false);
|
||||
texts.at(6)->setEnabled(false);
|
||||
bitmaps[3]->setEnabled(false);
|
||||
texts[6]->setEnabled(false);
|
||||
scene++;
|
||||
}
|
||||
|
||||
@@ -338,22 +338,22 @@ void Intro::updateScenes()
|
||||
|
||||
case 5:
|
||||
// Quinta imagen - Patada
|
||||
if (!bitmaps.at(4)->hasFinished())
|
||||
if (!bitmaps[4]->hasFinished())
|
||||
{
|
||||
bitmaps.at(4)->setEnabled(true);
|
||||
bitmaps[4]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Primer texto de la quinta imagen
|
||||
if (bitmaps.at(4)->hasFinished() && !texts.at(7)->hasFinished())
|
||||
if (bitmaps[4]->hasFinished() && !texts[7]->hasFinished())
|
||||
{
|
||||
texts.at(7)->setEnabled(true);
|
||||
texts[7]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Fin de la quinta escena
|
||||
if (bitmaps.at(4)->hasFinished() && texts.at(7)->hasFinished())
|
||||
if (bitmaps[4]->hasFinished() && texts[7]->hasFinished())
|
||||
{
|
||||
bitmaps.at(4)->setEnabled(false);
|
||||
texts.at(7)->setEnabled(false);
|
||||
bitmaps[4]->setEnabled(false);
|
||||
texts[7]->setEnabled(false);
|
||||
scene++;
|
||||
}
|
||||
|
||||
@@ -361,17 +361,17 @@ void Intro::updateScenes()
|
||||
|
||||
case 6:
|
||||
// Sexta imagen junto con texto - Globos de café
|
||||
if (!bitmaps.at(5)->hasFinished() && !texts.at(8)->hasFinished())
|
||||
if (!bitmaps[5]->hasFinished() && !texts[8]->hasFinished())
|
||||
{
|
||||
bitmaps.at(5)->setEnabled(true);
|
||||
texts.at(8)->setEnabled(true);
|
||||
bitmaps[5]->setEnabled(true);
|
||||
texts[8]->setEnabled(true);
|
||||
}
|
||||
|
||||
// Acaba el último texto
|
||||
if (bitmaps.at(5)->hasFinished() && texts.at(8)->hasFinished())
|
||||
if (bitmaps[5]->hasFinished() && texts[8]->hasFinished())
|
||||
{
|
||||
bitmaps.at(5)->setEnabled(false);
|
||||
texts.at(8)->setEnabled(false);
|
||||
bitmaps[5]->setEnabled(false);
|
||||
texts[8]->setEnabled(false);
|
||||
JA_StopMusic();
|
||||
section.name = PROG_SECTION_TITLE;
|
||||
section.subsection = TITLE_SECTION_1;
|
||||
|
||||
@@ -8,11 +8,11 @@ Player::Player(float x, int y, SDL_Renderer *renderer, std::vector<Texture *> te
|
||||
this->renderer = renderer;
|
||||
|
||||
// Reserva memoria para los objetos
|
||||
headSprite = new AnimatedSprite(texture.at(0), renderer, "", animations.at(0));
|
||||
bodySprite = new AnimatedSprite(texture.at(1), renderer, "", animations.at(1));
|
||||
legsSprite = new AnimatedSprite(texture.at(2), renderer, "", animations.at(2));
|
||||
deathSprite = new AnimatedSprite(texture.at(3), renderer, "", animations.at(3));
|
||||
fireSprite = new AnimatedSprite(texture.at(4), renderer, "", animations.at(4));
|
||||
headSprite = new AnimatedSprite(texture[0], renderer, "", animations[0]);
|
||||
bodySprite = new AnimatedSprite(texture[1], renderer, "", animations[1]);
|
||||
legsSprite = new AnimatedSprite(texture[2], renderer, "", animations[2]);
|
||||
deathSprite = new AnimatedSprite(texture[3], renderer, "", animations[3]);
|
||||
fireSprite = new AnimatedSprite(texture[4], renderer, "", animations[4]);
|
||||
fireSprite->getTexture()->setAlpha(224);
|
||||
|
||||
// Establece la posición inicial del jugador
|
||||
@@ -620,9 +620,9 @@ void Player::updatePowerUpHeadOffset()
|
||||
// Pone las texturas del jugador
|
||||
void Player::setPlayerTextures(std::vector<Texture *> texture)
|
||||
{
|
||||
headSprite->setTexture(texture.at(0));
|
||||
bodySprite->setTexture(texture.at(1));
|
||||
legsSprite->setTexture(texture.at(2));
|
||||
deathSprite->setTexture(texture.at(3));
|
||||
fireSprite->setTexture(texture.at(4));
|
||||
headSprite->setTexture(texture[0]);
|
||||
bodySprite->setTexture(texture[1]);
|
||||
legsSprite->setTexture(texture[2]);
|
||||
deathSprite->setTexture(texture[3]);
|
||||
fireSprite->setTexture(texture[4]);
|
||||
}
|
||||
@@ -125,9 +125,9 @@ void Title::init()
|
||||
// Si ha encontrado un mando se lo asigna al segundo jugador
|
||||
if (input->gameControllerFound())
|
||||
{
|
||||
options->input.at(1).id = availableInputDevices.at(deviceIndex.at(1)).id;
|
||||
options->input.at(1).name = availableInputDevices.at(deviceIndex.at(1)).name;
|
||||
options->input.at(1).deviceType = availableInputDevices.at(deviceIndex.at(1)).deviceType;
|
||||
options->input[1].id = availableInputDevices[deviceIndex[1]].id;
|
||||
options->input[1].name = availableInputDevices[deviceIndex[1]].name;
|
||||
options->input[1].deviceType = availableInputDevices[deviceIndex[1]].deviceType;
|
||||
}
|
||||
|
||||
// Inicializa el bitmap de Coffee
|
||||
@@ -1010,49 +1010,49 @@ bool Title::updatePlayerInputs(int numPlayer)
|
||||
|
||||
if (!input->gameControllerFound())
|
||||
{ // Si no hay mandos se deja todo de manera prefijada
|
||||
deviceIndex.at(0) = 0;
|
||||
deviceIndex.at(1) = 0;
|
||||
deviceIndex[0] = 0;
|
||||
deviceIndex[1] = 0;
|
||||
|
||||
options->input.at(0).id = -1;
|
||||
options->input.at(0).name = "KEYBOARD";
|
||||
options->input.at(0).deviceType = INPUT_USE_KEYBOARD;
|
||||
options->input[0].id = -1;
|
||||
options->input[0].name = "KEYBOARD";
|
||||
options->input[0].deviceType = INPUT_USE_KEYBOARD;
|
||||
|
||||
options->input.at(1).id = 0;
|
||||
options->input.at(1).name = "GAME CONTROLLER";
|
||||
options->input.at(1).deviceType = INPUT_USE_GAMECONTROLLER;
|
||||
options->input[1].id = 0;
|
||||
options->input[1].name = "GAME CONTROLLER";
|
||||
options->input[1].deviceType = INPUT_USE_GAMECONTROLLER;
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{ // Si hay mas de un dispositivo, se recorre el vector
|
||||
std::cout << "numplayer:" << numPlayer << std::endl;
|
||||
std::cout << "deviceindex:" << deviceIndex.at(numPlayer) << std::endl;
|
||||
std::cout << "deviceindex:" << deviceIndex[numPlayer] << std::endl;
|
||||
|
||||
// Incrementa el indice
|
||||
if (deviceIndex.at(numPlayer) < numDevices - 1)
|
||||
if (deviceIndex[numPlayer] < numDevices - 1)
|
||||
{
|
||||
deviceIndex.at(numPlayer)++;
|
||||
deviceIndex[numPlayer]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
deviceIndex.at(numPlayer) = 0;
|
||||
deviceIndex[numPlayer] = 0;
|
||||
}
|
||||
std::cout << "deviceindex:" << deviceIndex.at(numPlayer) << std::endl;
|
||||
std::cout << "deviceindex:" << deviceIndex[numPlayer] << std::endl;
|
||||
|
||||
// Si coincide con el del otro jugador, se lo intercambian
|
||||
if (deviceIndex.at(0) == deviceIndex.at(1))
|
||||
if (deviceIndex[0] == deviceIndex[1])
|
||||
{
|
||||
const int theOtherPlayer = (numPlayer + 1) % 2;
|
||||
deviceIndex.at(theOtherPlayer)--;
|
||||
if (deviceIndex.at(theOtherPlayer) < 0)
|
||||
deviceIndex[theOtherPlayer]--;
|
||||
if (deviceIndex[theOtherPlayer] < 0)
|
||||
{
|
||||
deviceIndex.at(theOtherPlayer) = numDevices - 1;
|
||||
deviceIndex[theOtherPlayer] = numDevices - 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Copia el dispositivo marcado por el indice a la variable de opciones de cada jugador
|
||||
options->input[0] = availableInputDevices.at(deviceIndex.at(0));
|
||||
options->input[1] = availableInputDevices.at(deviceIndex.at(1));
|
||||
options->input[0] = availableInputDevices[deviceIndex[0]];
|
||||
options->input[1] = availableInputDevices[deviceIndex[1]];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user