almost ...

This commit is contained in:
2026-04-03 18:50:50 +02:00
parent 6f31751d42
commit ce2fcefd71

View File

@@ -134,25 +134,37 @@ void CardSprite::render() {
MovingSprite::render();
}
// Renderiza la sombra con efecto de perspectiva
// Cuanto más alta la tarjeta (zoom grande), la sombra es más pequeña y más separada.
// Cuando la tarjeta está en la mesa (zoom=1.0), la sombra tiene tamaño real y offset base.
// Renderiza la sombra con efecto de perspectiva 2D→3D (efecto helicóptero)
//
// Fuente de luz en la esquina superior izquierda (0,0).
// La sombra se mueve con la tarjeta pero desplazada en dirección opuesta a la luz
// (abajo-derecha a 45°). Cuanto más alta la tarjeta (zoom > 1.0):
// - Más separada de la tarjeta (offset grande)
// - Más pequeña (proyección lejana)
// Cuando la tarjeta está en la mesa (zoom=1.0):
// - Sombra pegada con offset base
// - Tamaño real
void CardSprite::renderShadow() {
// La sombra siempre está en la mesa: su escala es inversamente proporcional al zoom
// Altura sobre la mesa: 0.0 = en la mesa, 0.8 = alta (zoom 1.8)
float height = horizontal_zoom_ - 1.0F;
// Escala: más pequeña cuanto más alta
float shadow_zoom = 1.0F / horizontal_zoom_;
// El offset aumenta con la altura (más lejos de la tarjeta cuanto más alta)
float scaled_offset_x = shadow_offset_x_ * horizontal_zoom_;
float scaled_offset_y = shadow_offset_y_ * horizontal_zoom_;
// Offset respecto a la tarjeta: base + extra proporcional a la altura
// La sombra se aleja en diagonal abajo-derecha (opuesta a la luz en 0,0)
static constexpr float HEIGHT_MULTIPLIER = 300.0F;
float offset_x = shadow_offset_x_ + height * HEIGHT_MULTIPLIER;
float offset_y = shadow_offset_y_ + height * HEIGHT_MULTIPLIER;
shadow_texture_->render(
pos_.x + scaled_offset_x,
pos_.y + scaled_offset_y,
pos_.x + offset_x,
pos_.y + offset_y,
&sprite_clip_,
shadow_zoom,
shadow_zoom,
rotate_.angle,
&rotate_.center,
0.0,
nullptr,
flip_);
}