fix: Restaurar fade lineal del alpha + renombrar constante

Restaura fade lineal para el alpha de los logos, eliminando el easing
que hacía la transición casi imperceptible. Renombra constante para
mayor claridad sobre lo que controla.

Problema identificado:
- El alpha usaba easeInOutQuad, acelerando la transición en el medio
- Con 2 segundos, el easing hacía que el logo pareciera aparecer/
  desaparecer instantáneamente sin fade visible
- El usuario reportó "el logo termina y desaparece directamente"

Solución implementada:

1. **Fade lineal restaurado**:
   - FADE_IN: alpha aumenta linealmente 0→255
   - FADE_OUT: alpha disminuye linealmente 255→0
   - Progreso visible y constante durante toda la duración

2. **Constante renombrada**:
   - `APPLOGO_FADE_DURATION` → `APPLOGO_ANIMATION_DURATION`
   - Nombre más claro: controla duración de toda la animación
   - Actualizado valor a 2.0 segundos (configurable por usuario)

3. **Animaciones mantienen easing**:
   - Zoom, rotación, squash, etc. siguen usando sus easings
   - Solo el alpha es lineal para fade visible

Confirmaciones:
 Sistema time-based: usa delta_time correctamente
 Blend mode configurado: SDL_BLENDMODE_BLEND en todas las texturas
 Alpha se aplica: SDL_SetTextureAlphaMod en renderizado

Resultado con APPLOGO_ANIMATION_DURATION = 2.0s:
- t=0.0s → Alpha=0 (invisible)
- t=0.5s → Alpha=64 (25% visible)
- t=1.0s → Alpha=127 (50% visible)
- t=1.5s → Alpha=191 (75% visible)
- t=2.0s → Alpha=255 (100% visible)

Nota: El logo solo se muestra en modos DEMO/DEMO_LITE/LOGO,
no en SANDBOX. Para probar: ./vibe3_physics --mode demo

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-18 19:16:33 +02:00
parent c3d24cc07d
commit 97c0683f6e
2 changed files with 16 additions and 20 deletions

View File

@@ -222,8 +222,8 @@ void AppLogo::update(float delta_time, AppMode current_mode) {
// Fade in: alpha de 0 a 255, con Logo 2 retrasado 0.25s
{
// Calcular progreso de cada logo (Logo 2 con retraso)
float fade_progress_logo1 = timer_ / APPLOGO_FADE_DURATION;
float fade_progress_logo2 = std::max(0.0f, (timer_ - APPLOGO_LOGO2_DELAY) / APPLOGO_FADE_DURATION);
float fade_progress_logo1 = timer_ / APPLOGO_ANIMATION_DURATION;
float fade_progress_logo2 = std::max(0.0f, (timer_ - APPLOGO_LOGO2_DELAY) / APPLOGO_ANIMATION_DURATION);
// Verificar si fade in completado (cuando logo2 también termina)
if (fade_progress_logo2 >= 1.0f) {
@@ -242,11 +242,9 @@ void AppLogo::update(float delta_time, AppMode current_mode) {
logo2_stretch_x_ = 1.0f;
logo2_rotation_ = 0.0f;
} else {
// Interpolar alpha con retraso + easing para suavidad
float eased_prog1 = easeInOutQuad(std::min(1.0f, fade_progress_logo1));
float eased_prog2 = easeInOutQuad(std::min(1.0f, fade_progress_logo2));
logo1_alpha_ = static_cast<int>(eased_prog1 * 255.0f);
logo2_alpha_ = static_cast<int>(eased_prog2 * 255.0f);
// Interpolar alpha con retraso de forma LINEAL (sin easing)
logo1_alpha_ = static_cast<int>(std::min(1.0f, fade_progress_logo1) * 255.0f);
logo2_alpha_ = static_cast<int>(std::min(1.0f, fade_progress_logo2) * 255.0f);
// ================================================================
// Aplicar MISMA animación (current_animation_) a ambos logos
@@ -342,8 +340,8 @@ void AppLogo::update(float delta_time, AppMode current_mode) {
// Fade out: alpha de 255 a 0, con Logo 2 retrasado 0.25s (misma animación que entrada)
{
// Calcular progreso de cada logo (Logo 2 con retraso)
float fade_progress_logo1 = timer_ / APPLOGO_FADE_DURATION;
float fade_progress_logo2 = std::max(0.0f, (timer_ - APPLOGO_LOGO2_DELAY) / APPLOGO_FADE_DURATION);
float fade_progress_logo1 = timer_ / APPLOGO_ANIMATION_DURATION;
float fade_progress_logo2 = std::max(0.0f, (timer_ - APPLOGO_LOGO2_DELAY) / APPLOGO_ANIMATION_DURATION);
// Verificar si fade out completado (cuando logo2 también termina)
if (fade_progress_logo2 >= 1.0f) {
@@ -362,11 +360,9 @@ void AppLogo::update(float delta_time, AppMode current_mode) {
logo2_stretch_x_ = 1.0f;
logo2_rotation_ = 0.0f;
} else {
// Interpolar alpha con retraso + easing para suavidad (255 → 0)
float eased_prog1 = easeInOutQuad(std::min(1.0f, fade_progress_logo1));
float eased_prog2 = easeInOutQuad(std::min(1.0f, fade_progress_logo2));
logo1_alpha_ = static_cast<int>((1.0f - eased_prog1) * 255.0f);
logo2_alpha_ = static_cast<int>((1.0f - eased_prog2) * 255.0f);
// Interpolar alpha con retraso de forma LINEAL (255 → 0, sin easing)
logo1_alpha_ = static_cast<int>((1.0f - std::min(1.0f, fade_progress_logo1)) * 255.0f);
logo2_alpha_ = static_cast<int>((1.0f - std::min(1.0f, fade_progress_logo2)) * 255.0f);
// ================================================================
// Aplicar MISMA animación (current_animation_) de forma invertida