Arreglos en la estructura i format del codi

This commit is contained in:
2025-03-01 20:39:44 +01:00
parent 5c371e7517
commit 360ebfd2e6
12 changed files with 126 additions and 156 deletions

View File

@@ -21,25 +21,14 @@
// Constructor
Ending2::Ending2()
: screen_(Screen::get()),
renderer_(Screen::get()->getRenderer()),
resource_(Resource::get()),
asset_(Asset::get()),
input_(Input::get()),
text_(resource_->getText("smb2")),
music_(resource_->getMusic("ending2.ogg"))
: counter_enabled_(false),
pre_counter_(0),
post_counter_(0),
post_counter_enabled_(false),
ticks_(0)
{
// Inicializa variables
counter_enabled_ = false;
pre_counter_ = 0;
post_counter_ = 0;
post_counter_enabled_ = false;
options.section.section = Section::ENDING2;
options.section.subsection = Subsection::NONE;
ticks_ = 0;
dist_sprite_text_ = 8;
dist_sprite_sprite_ = 0;
sprite_desp_speed_ = -0.2f;
// Inicializa el vector de colores
const std::vector<std::string> color_list = {"white", "yellow", "cyan", "green", "magenta", "red", "blue", "black"};
@@ -49,7 +38,7 @@ Ending2::Ending2()
}
// Cambia el color del borde
screen_->setBorderColor(stringToColor(options.video.palette, "black"));
Screen::get()->setBorderColor(stringToColor(options.video.palette, "black"));
// Inicializa la lista de sprites
iniSpriteList();
@@ -100,7 +89,8 @@ void Ending2::update()
// Actualiza el volumen de la musica
updateMusicVolume();
screen_->update();
// Actualiza el objeto
Screen::get()->update();
}
}
@@ -108,10 +98,10 @@ void Ending2::update()
void Ending2::render()
{
// Prepara para empezar a dibujar en la textura de juego
screen_->start();
Screen::get()->start();
// Limpia la pantalla
screen_->clean(stringToColor(options.video.palette, "black"));
Screen::get()->clean(stringToColor(options.video.palette, "black"));
// Dibuja los sprites
renderSprites();
@@ -123,28 +113,28 @@ void Ending2::render()
renderTexts();
// Dibuja una trama arriba y abajo
SDL_SetRenderDrawColor(renderer_, 0, 0, 0, 0xFF);
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 0, 0, 0, 0xFF);
for (int i = 0; i < 256; i += 2)
{
SDL_RenderDrawPoint(renderer_, i + 0, 0);
SDL_RenderDrawPoint(renderer_, i + 1, 1);
SDL_RenderDrawPoint(renderer_, i + 0, 2);
SDL_RenderDrawPoint(renderer_, i + 1, 3);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i + 0, 0);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i + 1, 1);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i + 0, 2);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i + 1, 3);
SDL_RenderDrawPoint(renderer_, i, 4);
SDL_RenderDrawPoint(renderer_, i, 6);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i, 4);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i, 6);
SDL_RenderDrawPoint(renderer_, i + 0, 191);
SDL_RenderDrawPoint(renderer_, i + 1, 190);
SDL_RenderDrawPoint(renderer_, i + 0, 189);
SDL_RenderDrawPoint(renderer_, i + 1, 188);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i + 0, 191);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i + 1, 190);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i + 0, 189);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i + 1, 188);
SDL_RenderDrawPoint(renderer_, i, 187);
SDL_RenderDrawPoint(renderer_, i, 185);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i, 187);
SDL_RenderDrawPoint(Screen::get()->getRenderer(), i, 185);
}
// Vuelca el contenido del renderizador en pantalla
screen_->render();
Screen::get()->render();
}
// Comprueba el manejador de eventos
@@ -166,7 +156,7 @@ void Ending2::checkInput()
// Bucle principal
void Ending2::run()
{
JA_PlayMusic(music_);
JA_PlayMusic(Resource::get()->getMusic("ending2.ogg"));
while (options.section.section == Section::ENDING2)
{
@@ -292,7 +282,7 @@ void Ending2::loadSprites()
// Carga los sprites
for (const auto &sl : sprite_list_)
{
sprites_.emplace_back(std::make_shared<AnimatedSprite>(resource_->getTexture(sl + ".png"), resource_->getAnimations(sl + ".ani")));
sprites_.emplace_back(std::make_shared<AnimatedSprite>(Resource::get()->getTexture(sl + ".png"), Resource::get()->getAnimations(sl + ".ani")));
sprite_max_width_ = std::max(sprites_.back()->getWidth(), sprite_max_width_);
sprite_max_height_ = std::max(sprites_.back()->getHeight(), sprite_max_height_);
}
@@ -389,14 +379,14 @@ void Ending2::placeSprites()
for (int i = 0; i < (int)sprites_.size(); ++i)
{
const int X = i % 2 == 0 ? FIRST_COL_ : SECOND_COL_;
const int Y = (i / 1) * (sprite_max_height_ + dist_sprite_text_ + text_->getCharacterSize() + dist_sprite_sprite_) + GAMECANVAS_HEIGHT + 40;
const int Y = (i / 1) * (sprite_max_height_ + DIST_SPRITE_TEXT_ + Resource::get()->getText("smb2")->getCharacterSize() + DIST_SPRITE_SPRITE_) + GAMECANVAS_HEIGHT + 40;
const int W = sprites_.at(i)->getWidth();
const int H = sprites_.at(i)->getHeight();
const int DX = -(W / 2);
const int DY = sprite_max_height_ - H;
sprites_.at(i)->setPosition({X + DX, Y + DY, W, H});
sprites_.at(i)->setVelY(sprite_desp_speed_);
sprites_.at(i)->setVelY(SPRITE_DESP_SPEED_);
}
// Recoloca el último sprite, que es el del jugador
@@ -412,32 +402,41 @@ void Ending2::placeSprites()
void Ending2::createSpriteTexts()
{
// Crea los sprites de texto a partir de la lista
for (int i = 0; i < (int)sprite_list_.size(); ++i)
for (int i = 0; i < static_cast<int>(sprite_list_.size()); ++i)
{
// Calcula constantes
std::string txt = sprite_list_[i];
std::replace(txt.begin(), txt.end(), '_', ' ');
txt = txt == "player" ? "JAILDOCTOR" : txt; // Reemplaza el texto
const int w = text_->lenght(txt, 1);
const int h = text_->getCharacterSize();
const int x = i % 2 == 0 ? FIRST_COL_ : SECOND_COL_;
const int dx = -(w / 2);
const int y = sprites_.at(i)->getPosY() + sprites_.at(i)->getHeight() + dist_sprite_text_;
auto text = Resource::get()->getText("smb2");
// Cambia la posición del último sprite
const int X = (i == (int)sprite_list_.size() - 1) ? GAMECANVAS_CENTER_X - (w / 2) : x + dx;
// Procesa y ajusta el texto del sprite actual
std::string txt = sprite_list_[i];
std::replace(txt.begin(), txt.end(), '_', ' '); // Reemplaza '_' por ' '
if (txt == "player")
{
txt = "JAILDOCTOR"; // Reemplaza "player" por "JAILDOCTOR"
}
// Calcula las dimensiones del texto
const int W = text->lenght(txt, 1);
const int H = text->getCharacterSize();
// Determina la columna y la posición X del texto
const int X = (i == static_cast<int>(sprite_list_.size()) - 1)
? (GAMECANVAS_CENTER_X - (W / 2))
: ((i % 2 == 0 ? FIRST_COL_ : SECOND_COL_) - (W / 2));
// Calcula la posición Y del texto en base a la posición y altura del sprite
const int Y = sprites_.at(i)->getPosY() + sprites_.at(i)->getHeight() + DIST_SPRITE_TEXT_;
// Crea la textura
auto texture = std::make_shared<Texture>(renderer_);
texture->createBlank(w, h);
texture->setAsRenderTarget(renderer_);
auto texture = std::make_shared<Texture>(Screen::get()->getRenderer());
texture->createBlank(W, H);
texture->setAsRenderTarget(Screen::get()->getRenderer());
texture->setBlendMode(SDL_BLENDMODE_BLEND);
text_->write(0, 0, txt);
text->write(0, 0, txt);
// Crea el sprite
SDL_Rect pos = {X, y, w, h};
SDL_Rect pos = {X, Y, W, H};
sprite_texts_.emplace_back(std::make_shared<MovingSprite>(texture, pos));
sprite_texts_.back()->setVelY(sprite_desp_speed_);
sprite_texts_.back()->setVelY(SPRITE_DESP_SPEED_);
}
}
@@ -448,32 +447,34 @@ void Ending2::createTexts()
std::vector<std::string> list;
list.push_back("STARRING");
auto text = Resource::get()->getText("smb2");
// Crea los sprites de texto a partir de la lista
for (int i = 0; i < (int)list.size(); ++i)
{
// Calcula constantes
const int w = text_->lenght(list[i], 1);
const int h = text_->getCharacterSize();
const int w = text->lenght(list[i], 1);
const int h = text->getCharacterSize();
const int x = GAMECANVAS_CENTER_X;
const int dx = -(w / 2);
const int y = GAMECANVAS_HEIGHT + (text_->getCharacterSize() * (i * 2));
const int y = GAMECANVAS_HEIGHT + (text->getCharacterSize() * (i * 2));
// Crea la textura
auto texture = std::make_shared<Texture>(renderer_);
auto texture = std::make_shared<Texture>(Screen::get()->getRenderer());
texture->createBlank(w, h);
texture->setAsRenderTarget(renderer_);
texture->setAsRenderTarget(Screen::get()->getRenderer());
texture->setBlendMode(SDL_BLENDMODE_BLEND);
text_->write(0, 0, list[i]);
text->write(0, 0, list[i]);
// Crea el sprite
SDL_Rect pos = {x + dx, y, w, h};
texts_.emplace_back(std::make_shared<MovingSprite>(texture, pos));
texts_.back()->setVelY(sprite_desp_speed_);
texts_.back()->setVelY(SPRITE_DESP_SPEED_);
}
// Crea los últimos textos
// El primer texto va a continuación del ultimo spriteText
const int start = sprite_texts_.back()->getPosY() + text_->getCharacterSize() * 15;
const int start = sprite_texts_.back()->getPosY() + text->getCharacterSize() * 15;
list.clear();
list.push_back("THANK YOU");
list.push_back("FOR PLAYING!");
@@ -482,23 +483,23 @@ void Ending2::createTexts()
for (int i = 0; i < (int)list.size(); ++i)
{
// Calcula constantes
const int w = text_->lenght(list[i], 1);
const int h = text_->getCharacterSize();
const int w = text->lenght(list[i], 1);
const int h = text->getCharacterSize();
const int x = GAMECANVAS_CENTER_X;
const int dx = -(w / 2);
const int y = start + (text_->getCharacterSize() * (i * 2));
const int y = start + (text->getCharacterSize() * (i * 2));
// Crea la textura
auto texture = std::make_shared<Texture>(renderer_);
auto texture = std::make_shared<Texture>(Screen::get()->getRenderer());
texture->createBlank(w, h);
texture->setAsRenderTarget(renderer_);
texture->setAsRenderTarget(Screen::get()->getRenderer());
texture->setBlendMode(SDL_BLENDMODE_BLEND);
text_->write(0, 0, list[i]);
text->write(0, 0, list[i]);
// Crea el sprite
SDL_Rect pos = {x + dx, y, w, h};
texts_.emplace_back(std::make_shared<MovingSprite>(texture, pos));
texts_.back()->setVelY(sprite_desp_speed_);
texts_.back()->setVelY(SPRITE_DESP_SPEED_);
}
}
@@ -506,12 +507,12 @@ void Ending2::createTexts()
void Ending2::updateFinalFade()
{
// La variable step va de 0 a 40 en el tramo de postCounter que va de 500 a 540. Al dividirlo por 40, va de 0.0f a 1.0f
const float step = std::min(std::max(post_counter_, 500) - 500, 40) / 40.0f;
const int index = (colors_.size() - 1) * step;
const float STEP = std::min(std::max(post_counter_, 500) - 500, 40) / 40.0f;
const int INDEX = (colors_.size() - 1) * STEP;
for (const auto &t : texts_)
for (const auto &text : texts_)
{
t->getTexture()->setColor(colors_[index].r, colors_[index].g, colors_[index].b);
text->getTexture()->setColor(colors_.at(INDEX).r, colors_.at(INDEX).g, colors_.at(INDEX).b);
}
}