almost ...
This commit is contained in:
@@ -134,25 +134,37 @@ void CardSprite::render() {
|
|||||||
MovingSprite::render();
|
MovingSprite::render();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Renderiza la sombra con efecto de perspectiva
|
// Renderiza la sombra con efecto de perspectiva 2D→3D (efecto helicóptero)
|
||||||
// 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.
|
// 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() {
|
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_;
|
float shadow_zoom = 1.0F / horizontal_zoom_;
|
||||||
|
|
||||||
// El offset aumenta con la altura (más lejos de la tarjeta cuanto más alta)
|
// Offset respecto a la tarjeta: base + extra proporcional a la altura
|
||||||
float scaled_offset_x = shadow_offset_x_ * horizontal_zoom_;
|
// La sombra se aleja en diagonal abajo-derecha (opuesta a la luz en 0,0)
|
||||||
float scaled_offset_y = shadow_offset_y_ * horizontal_zoom_;
|
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(
|
shadow_texture_->render(
|
||||||
pos_.x + scaled_offset_x,
|
pos_.x + offset_x,
|
||||||
pos_.y + scaled_offset_y,
|
pos_.y + offset_y,
|
||||||
&sprite_clip_,
|
&sprite_clip_,
|
||||||
shadow_zoom,
|
shadow_zoom,
|
||||||
shadow_zoom,
|
shadow_zoom,
|
||||||
rotate_.angle,
|
0.0,
|
||||||
&rotate_.center,
|
nullptr,
|
||||||
flip_);
|
flip_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user