feat: Animación elástica tipo pegatina para AppLogo
Implementación de deformación elástica con vértices para el logo: FADE IN (0.5s): - Scale: 120% → 100% con easing elástico (bounce) - Squash Y: 0.6 → 1.0 con easing back (aplastamiento) - Stretch X: compensación automática - Efecto: logo se "pega" aplastándose y rebotando FADE OUT (0.5s): - Scale: 100% → 120% (aceleración cuadrática) - Squash Y: 1.0 → 1.3 (estiramiento vertical) - Stretch X: 1.0 → 0.8 (compresión horizontal) - Rotación: 0° → ~5.7° (torsión sutil) - Efecto: logo se "despega" estirándose y girando Características técnicas: - Enum AppLogoAnimationType (ZOOM_ONLY / ELASTIC_STICK) - Renderizado con SDL_RenderGeometry para deformaciones - Funciones de easing: easeOutElastic() y easeOutBack() - Transformación de vértices con rotación y escala 2D - Actualmente fijo en ELASTIC_STICK para testing Limpieza adicional: - Eliminado dbgtxt.h (no utilizado) - Removidos SDL_Log de debug en HelpOverlay - Comentada variable no usada en ShapeManager 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,12 @@ enum class AppLogoState {
|
||||
FADE_OUT // Desapareciendo (alpha 255 → 0)
|
||||
};
|
||||
|
||||
// Tipo de animación de entrada/salida
|
||||
enum class AppLogoAnimationType {
|
||||
ZOOM_ONLY, // Solo zoom simple (120% → 100% → 120%)
|
||||
ELASTIC_STICK // Zoom + deformación elástica tipo "pegatina"
|
||||
};
|
||||
|
||||
class AppLogo {
|
||||
public:
|
||||
AppLogo() = default;
|
||||
@@ -41,10 +47,31 @@ class AppLogo {
|
||||
AppLogoState state_ = AppLogoState::HIDDEN; // Estado actual de la máquina de estados
|
||||
float timer_ = 0.0f; // Contador de tiempo para estado actual
|
||||
int current_alpha_ = 0; // Alpha actual (0-255)
|
||||
float current_scale_ = 1.0f; // Escala actual (1.0 = 100%)
|
||||
|
||||
// Tipo de animación (FIJO para testing: ELASTIC_STICK)
|
||||
AppLogoAnimationType animation_type_ = AppLogoAnimationType::ELASTIC_STICK;
|
||||
|
||||
// Variables de deformación elástica (para ELASTIC_STICK)
|
||||
float squash_y_ = 1.0f; // Factor de aplastamiento vertical (1.0 = normal)
|
||||
float stretch_x_ = 1.0f; // Factor de estiramiento horizontal (1.0 = normal)
|
||||
float rotation_ = 0.0f; // Rotación en radianes (para efecto despegar)
|
||||
|
||||
int screen_width_ = 0; // Ancho de pantalla (para centrar)
|
||||
int screen_height_ = 0; // Alto de pantalla (para centrar)
|
||||
|
||||
// Tamaño base del logo (calculado una vez)
|
||||
float base_width_ = 0.0f;
|
||||
float base_height_ = 0.0f;
|
||||
|
||||
// SDL renderer (necesario para renderizado con geometría)
|
||||
SDL_Renderer* renderer_ = nullptr;
|
||||
|
||||
// Métodos privados auxiliares
|
||||
void updateLogoPosition(); // Centrar logo en pantalla
|
||||
void renderWithGeometry(); // Renderizar con vértices deformados
|
||||
|
||||
// Funciones de easing
|
||||
float easeOutElastic(float t); // Elastic bounce out
|
||||
float easeOutBack(float t); // Overshoot out
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user