feat: add reshuffle for ticket

This commit is contained in:
2026-06-24 21:00:18 +03:30
parent 500c61a409
commit e73333344f
4 changed files with 66 additions and 0 deletions
@@ -47,6 +47,7 @@ class HokmGame extends FlameGame {
List<String> _prevTrick = const [];
int _bestTrumpRank = 0; // بالاترین رتبه‌ی حکمِ بازی‌شده در دستِ جاری (برای افکتِ بریدن)
int _prevHandSize = 0; // برای تشخیصِ پخشِ کارت (دستِ جدید) جهت صدای بُر زدن
String _prevHandSig = ''; // امضای دست؛ برای تشخیصِ بُرِ مجدد (تغییرِ ۵ کارت در فازِ حکم)
bool _silent = false; // هنگام خروج از میز، دیگر صدایی پخش نشود
bool _introActive = true; // تا پایانِ نمایشِ «جستجوی حریف»
bool _pendingShuffle =
@@ -89,6 +90,18 @@ class HokmGame extends FlameGame {
_shuffleNow();
}
}
// بُرِ مجدد: هنوز در فازِ حکم هستیم اما ۵ کارتِ حاکم عوض شده ⇒ انیمیشنِ بُر دوباره.
final sig = (s.yourHand.toList()..sort()).join(',');
if (!_silent &&
!_introActive &&
s.phase == 'choose_trump' &&
s.trump == null &&
_prevHandSize > 0 &&
_prevHandSig.isNotEmpty &&
sig != _prevHandSig) {
_shuffleNow();
}
_prevHandSig = sig;
// لحظه‌ی انتخابِ حکم: صدا + نمایشِ بزرگِ حکم در مرکز.
if (_prevTrump == null && s.trump != null && !_silent) {
AppSounds.selectHokm();
@@ -103,6 +116,7 @@ class HokmGame extends FlameGame {
if (cubit.state.state != null) {
_prevTrick = cubit.state.state!.trick.map((t) => t.card).toList();
_prevHandSize = cubit.state.state!.yourHand.length;
_prevHandSig = (cubit.state.state!.yourHand.toList()..sort()).join(',');
_prevTrump = cubit.state.state!.trump;
_s = cubit.state.state;
_relayout();