Reduida la dependencia de PathSprite a Sprite

Treballant en els missatges de text que ixen durant la partida
This commit is contained in:
2024-10-29 20:05:05 +01:00
parent d83c05bad4
commit ba05eab79e
7 changed files with 134 additions and 113 deletions

View File

@@ -201,14 +201,6 @@ void Game::setResources()
item_animations_.emplace_back(Resource::get()->getAnimation("item_coffee.ani"));
item_animations_.emplace_back(Resource::get()->getAnimation("item_coffee_machine.ani"));
}
// Texto
{
text_ = std::make_unique<Text>(Resource::get()->getTexture("smb2.gif"), Resource::get()->getTextFile("smb2.txt"));
text_nokia2_ = std::make_unique<Text>(Resource::get()->getTexture("nokia.png"), Resource::get()->getTextFile("nokia.txt"));
text_nokia2_big_ = std::make_unique<Text>(Resource::get()->getTexture("nokia.png"), Resource::get()->getTextFile("nokia.txt"));
text_04b_25_ = std::make_unique<Text>(Resource::get()->getTexture("04b_25.png"), Resource::get()->getTextFile("04b_25.txt"));
}
}
// Crea una formación de enemigos
@@ -652,28 +644,28 @@ void Game::checkPlayerItemCollision(std::shared_ptr<Player> &player)
{
player->addScore(1000);
const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[0]->getWidth()) / 2;
createPathSprite(x, game_text_textures_[0]);
createItemText(x, game_text_textures_[0]);
break;
}
case ItemType::GAVINA:
{
player->addScore(2500);
const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[1]->getWidth()) / 2;
createPathSprite(x, game_text_textures_[1]);
createItemText(x, game_text_textures_[1]);
break;
}
case ItemType::PACMAR:
{
player->addScore(5000);
const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[2]->getWidth()) / 2;
createPathSprite(x, game_text_textures_[2]);
createItemText(x, game_text_textures_[2]);
break;
}
case ItemType::CLOCK:
{
enableTimeStopItem();
const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[5]->getWidth()) / 2;
createPathSprite(x, game_text_textures_[5]);
createItemText(x, game_text_textures_[5]);
break;
}
case ItemType::COFFEE:
@@ -682,13 +674,13 @@ void Game::checkPlayerItemCollision(std::shared_ptr<Player> &player)
{
player->addScore(5000);
const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[2]->getWidth()) / 2;
createPathSprite(x, game_text_textures_[2]);
createItemText(x, game_text_textures_[2]);
}
else
{
player->giveExtraHit();
const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[4]->getWidth()) / 2;
createPathSprite(x, game_text_textures_[4]);
createItemText(x, game_text_textures_[4]);
}
break;
}
@@ -697,7 +689,7 @@ void Game::checkPlayerItemCollision(std::shared_ptr<Player> &player)
player->setPowerUp();
coffee_machine_enabled_ = false;
const auto x = item->getPosX() + (item->getWidth() - game_text_textures_[3]->getWidth()) / 2;
createPathSprite(x, game_text_textures_[3]);
createItemText(x, game_text_textures_[3]);
break;
}
default:
@@ -897,7 +889,7 @@ void Game::freeItems()
}
// Crea un objeto PathSprite
void Game::createPathSprite(int x, std::shared_ptr<Texture> texture)
void Game::createItemText(int x, std::shared_ptr<Texture> texture)
{
path_sprites_.emplace_back(std::make_unique<PathSprite>(texture));
@@ -905,7 +897,7 @@ void Game::createPathSprite(int x, std::shared_ptr<Texture> texture)
const auto h = texture->getHeight();
const int y0 = param.game.play_area.rect.h - h;
const int y1 = 160;
const int y1 = 155;
const int y2 = -h;
// Ajusta para que no se dibuje fuera de pantalla
@@ -920,6 +912,17 @@ void Game::createPathSprite(int x, std::shared_ptr<Texture> texture)
path_sprites_.back()->enable();
}
// Crea un objeto PathSprite
void Game::createMessage(std::vector<Path> paths, std::shared_ptr<Texture> texture)
{
path_sprites_.emplace_back(std::make_unique<PathSprite>(texture));
// Inicializa
for (const auto &path : paths)
path_sprites_.back()->addPath(path);
path_sprites_.back()->enable();
}
// Vacia el vector de smartsprites
void Game::freeSmartSprites()
{
@@ -1286,8 +1289,11 @@ void Game::updateMenace()
void Game::renderMessages()
{
// GetReady
if (counter_ < STAGE_COUNTER_ && !demo_.enabled)
text_nokia2_big_->write((int)get_ready_bitmap_path_[counter_], param.game.play_area.center_y - 8, lang::getText(75), -2);
if (counter_ == 10 && !demo_.enabled)
{ // text_04b_25_->write2X((int)get_ready_bitmap_path_[counter_], param.game.play_area.center_y - 8, lang::getText(75), -2);
std::vector<Path> paths = {paths_.at(0), paths_.at(1)};
createMessage(paths, Resource::get()->getTexture("get_ready"));
}
// STAGE NUMBER
if (stage_bitmap_counter_ < STAGE_COUNTER_)
@@ -1309,14 +1315,14 @@ void Game::renderMessages()
if (!game_completed_)
{
// Escribe el número de fases restantes
text_nokia2_big_->writeDX(TEXT_CENTER, param.game.play_area.center_x, stage_bitmap_path_[stage_bitmap_counter_], text, -2, no_color, 2, shdw_txt_color);
//text_04b_25_->write2X(param.game.play_area.center_x, stage_bitmap_path_[stage_bitmap_counter_], text, -2);
}
else
{
// Escribe el texto de juego completado
text = lang::getText(50);
text_nokia2_big_->writeDX(TEXT_CENTER, param.game.play_area.center_x, stage_bitmap_path_[stage_bitmap_counter_], text, -2, no_color, 1, shdw_txt_color);
text_nokia2_->writeDX(TEXT_CENTER, param.game.play_area.center_x, stage_bitmap_path_[stage_bitmap_counter_] + text_nokia2_big_->getCharacterSize() + 2, lang::getText(76), -1, no_color, 1, shdw_txt_color);
//text_nokia2_big_->writeDX(TEXT_CENTER, param.game.play_area.center_x, stage_bitmap_path_[stage_bitmap_counter_], text, -2, no_color, 1, shdw_txt_color);
//text_nokia2_->writeDX(TEXT_CENTER, param.game.play_area.center_x, stage_bitmap_path_[stage_bitmap_counter_] + text_nokia2_big_->getCharacterSize() + 2, lang::getText(76), -1, no_color, 1, shdw_txt_color);
}
}
}
@@ -1379,6 +1385,18 @@ int Game::calculateScreenPower()
// Inicializa las variables que contienen puntos de ruta para mover objetos
void Game::initPaths()
{
// Recorrido para el texto de "Get Ready!"
const auto &texture = Resource::get()->getTexture("get_ready");
const auto w = texture->getWidth();
const auto h = texture->getHeight();
const int x0 = -w;
const int x1 = param.game.play_area.center_x - w / 2;
const int x2 = param.game.play_area.rect.w;
const int y = param.game.play_area.center_y - h / 2;
paths_.emplace_back(Path(createPath(x0, x1, PathType::HORIZONTAL, y, 80, easeOutQuint), 10));
paths_.emplace_back(Path(createPath(x1, x2, PathType::HORIZONTAL, y, 80, easeInQuint), 0));
// Vector con los valores del seno para 360 grados
float sin[360];
for (int i = 0; i < 360; ++i)
@@ -1404,33 +1422,6 @@ void Game::initPaths()
int index = static_cast<int>(((i - 149) * 1.8f) + 90) % 360;
stage_bitmap_path_[i] = sin[index] * (center_point + 17) - 17;
}
// Letrero de GetReady
const auto size = text_nokia2_big_->lenght(lang::getText(75), -2);
const float start1 = param.game.play_area.rect.x - size;
const float finish1 = param.game.play_area.center_x - (size / 2);
const float finish2 = param.game.play_area.rect.w;
const float distance1 = finish1 - start1;
const float distance2 = finish2 - finish1;
for (int i = 0; i < first_part; ++i)
{
get_ready_bitmap_path_[i] = sin[(int)(i * 1.8f)];
get_ready_bitmap_path_[i] *= distance1;
get_ready_bitmap_path_[i] -= size;
}
for (int i = first_part; i < second_part; ++i)
get_ready_bitmap_path_[i] = (int)finish1;
for (int i = second_part; i < STAGE_COUNTER_; ++i)
{
get_ready_bitmap_path_[i] = sin[(int)((i - second_part) * 1.8f)];
get_ready_bitmap_path_[i] *= distance2;
get_ready_bitmap_path_[i] += finish1;
}
}
// Actualiza el tramo final de juego, una vez completado
@@ -1565,7 +1556,7 @@ void Game::checkEvents()
case SDLK_5: // Crea un PathSprite
{
const int x = players_.at(0)->getPosX() + (players_.at(0)->getWidth() - game_text_textures_[3]->getWidth()) / 2;
createPathSprite(x, game_text_textures_.at(3));
createItemText(x, game_text_textures_.at(3));
break;
}
default: