Treballant en la intro

This commit is contained in:
2025-03-14 14:06:14 +01:00
parent f11cb32ac0
commit c757886430
5 changed files with 111 additions and 34 deletions

View File

@@ -11,9 +11,6 @@
TiledBG::TiledBG(SDL_Rect pos, TiledBGMode mode)
: renderer_(Screen::get()->getRenderer()),
pos_(pos),
// Coloca la ventana que recorre el mosaico de fondo de manera que coincida
// con el mosaico que hay pintado en el titulo al iniciar
window_({128, 96, pos_.w, pos_.h}),
mode_(mode == TiledBGMode::RANDOM ? static_cast<TiledBGMode>(rand() % 2) : mode)
{
// Crea la textura para el mosaico de fondo
@@ -22,6 +19,22 @@ TiledBG::TiledBG(SDL_Rect pos, TiledBGMode mode)
// Rellena la textura con el contenido
fillTexture();
mode_ = TiledBGMode::DIAGONAL;
switch (mode)
{
case TiledBGMode::DIAGONAL:
window_ = {0, 0, pos_.w, pos_.h};
break;
case TiledBGMode::CIRCLE:
window_ = {128, 96, pos_.w, pos_.h};
break;
default:
break;
}
// Inicializa los valores del vector con los valores del seno
for (int i = 0; i < 360; ++i)
{
@@ -72,22 +85,57 @@ void TiledBG::render()
// Actualiza la lógica de la clase
void TiledBG::update()
{
updateDesp();
updateStop();
switch (mode_)
{
case TiledBGMode::DIAGONAL:
{ // El tileado de fondo se desplaza en diagonal
++window_.x %= TILE_WIDTH_;
++window_.y %= TILE_HEIGHT_;
{
// El tileado de fondo se desplaza en diagonal
window_.x = static_cast<int>(desp_) % TILE_WIDTH_;
window_.y = static_cast<int>(desp_) % TILE_HEIGHT_;
break;
}
case TiledBGMode::CIRCLE:
{ // El tileado de fondo se desplaza en circulo
++counter_ %= 360;
window_.x = 128 + (int(sin_[(counter_ + 270) % 360] * 128));
window_.y = 96 + (int(sin_[(360 - counter_) % 360] * 96));
{
// El tileado de fondo se desplaza en circulo
const int INDEX = static_cast<int>(desp_) % 360;
window_.x = 128 + (static_cast<int>(sin_[(INDEX + 270) % 360] * 128));
window_.y = 96 + (static_cast<int>(sin_[(360 - INDEX) % 360] * 96));
break;
}
default:
break;
}
}
// Detiene el desplazamiento de forma ordenada
void TiledBG::updateStop()
{
if (stopping_)
{
const int UMBRAL = 20 * speed_; // Ajusta este valor según la precisión deseada
// Desacelerar si estamos cerca de completar el ciclo (ventana a punto de regresar a 0)
if (window_.x >= TILE_WIDTH_ - UMBRAL)
{
speed_ /= 1.05f; // Reduce gradualmente la velocidad
// Asegura que no baje demasiado
if (speed_ < 0.1f)
{
speed_ = 0.1f;
}
}
// Si estamos en 0, detener
if (window_.x == 0)
{
speed_ = 0.0f;
stopping_ = false; // Desactivamos el estado de "stopping"
}
}
}