fix(engine): foundation→tableau drag hints, z-lift, and Android battery drain
Fixes #34, #35, #36 - all_hints: add Foundation as source for Tableau hints (guarded by take_from_foundation); previously H key never suggested Foundation→Tableau - end_drag / touch_end_drag: enforce take_from_foundation at input layer so a rejected-by-core MoveRequestEvent is never fired - animation_plugin: pub CARD_ANIM_Z_LIFT so card_plugin can consume it - update_card_entity: set CardAnim start.z = z + CARD_ANIM_Z_LIFT to eliminate 1-frame z artifact where animated card appeared behind resting cards - solitaire_app: use AutoVsync on Android (caps GPU at display Hz vs spinning at 200+ fps); add WinitSettings unfocused reactive_low_power so app draws ~1fps when backgrounded Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -23,7 +23,7 @@ use solitaire_core::pile::PileType;
|
||||
|
||||
use solitaire_core::rules::{can_place_on_foundation, can_place_on_tableau};
|
||||
|
||||
use crate::animation_plugin::{CardAnim, EffectiveSlideDuration};
|
||||
use crate::animation_plugin::{CardAnim, EffectiveSlideDuration, CARD_ANIM_Z_LIFT};
|
||||
use crate::card_animation::CardAnimation;
|
||||
use crate::events::{CardFaceRevealedEvent, CardFlippedEvent, StateChangedEvent};
|
||||
use crate::game_plugin::GameMutation;
|
||||
@@ -963,7 +963,12 @@ fn update_card_entity(
|
||||
if !has_card_animation {
|
||||
// Slide to the new position when it differs meaningfully; snap otherwise.
|
||||
if (cur.truncate() - target.truncate()).length() > 1.0 && slide_secs > 0.0 {
|
||||
let start = Vec3::new(cur.x, cur.y, z); // update Z immediately
|
||||
// Lift the card immediately on the first frame of the animation so
|
||||
// it never appears behind a card that is already resting at the
|
||||
// destination slot. `advance_card_anims` will maintain this lift
|
||||
// throughout the tween and snap to `target` (without lift) on
|
||||
// completion.
|
||||
let start = Vec3::new(cur.x, cur.y, z + CARD_ANIM_Z_LIFT);
|
||||
commands
|
||||
.entity(entity)
|
||||
.insert(Transform::from_translation(start))
|
||||
|
||||
Reference in New Issue
Block a user