refactor: all screens refactor

This commit is contained in:
2026-07-08 20:12:04 +03:30
parent 2496580e86
commit adc2d1fc47
16 changed files with 3546 additions and 3351 deletions
@@ -0,0 +1,45 @@
import '../../../domain/entities/game_entities.dart';
/// وضعیتِ افکتِ «بریدن با حکم»: بالاترین حکمِ دستِ جاری، کمبوِ روبُریدن‌های سریع،
/// و «مکثِ آتش» (فریزِ کوتاهِ صحنه پس از آتشِ کمبو). فقط وضعیت و تصمیم را نگه
/// می‌دارد؛ افزودنِ کامپوننت‌های افکت و بافرِ وضعیت بر عهده‌ی خودِ صحنه است.
class CutFx {
static const double comboWindowSec = 6.0; // پنجره‌ی شمارشِ بریدنِ پیاپی
static const double holdSec = 1.0; // مدتِ مکثِ آتش
int _bestTrumpRank = 0; // بالاترین حکمِ بازی‌شده در دستِ جاری
int combo = 0; // شمارِ بریدنِ پیاپیِ سریع (برای شدتِ آتش)
double _lastCutAt = -999;
bool holding = false; // آیا در «مکثِ آتش» هستیم
double _holdUntil = 0;
GameState? pending; // آخرین وضعیتِ بافرشده در حینِ مکث
/// دستِ جدید (زمین خالی/تک‌کارت) ⇒ بالاترین حکم ریست می‌شود.
void resetTrick() => _bestTrumpRank = 0;
/// ثبتِ یک بریدن؛ true اگر این حکم «دست را می‌بَرد» (اولین بریدن یا روبُریدنِ
/// بالاتر) — در این صورت کمبو هم به‌روزرسانی می‌شود. حکمِ بازنده false می‌دهد.
bool registerWinningCut(int rank, double now) {
if (rank <= _bestTrumpRank) return false;
_bestTrumpRank = rank;
combo = (now - _lastCutAt < comboWindowSec) ? combo + 1 : 1;
_lastCutAt = now;
return true;
}
/// شروعِ مکثِ آتش (پس از آتشِ کمبو).
void startHold(double now) {
holding = true;
_holdUntil = now + holdSec;
}
/// آیا مکث به پایان رسیده و باید وضعیتِ بافرشده اعمال شود.
bool holdExpired(double now) => holding && now >= _holdUntil;
/// لغوِ مکث و پاک‌کردنِ بافر (هنگام خروج از میز).
void clearHold() {
holding = false;
pending = null;
}
}