refactor: all screens refactor
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user