refactor: all screens refactor
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
/// دروازهی انیمیشنِ صحنه: نگهدارِ سه فازِ «مشغولِ انیمیشن» که در آنها بازیِ کارت
|
||||
/// قفل است و کارتها/پشتکارتها ممکن است پنهان شوند — اینترو («جستجوی حریف»)،
|
||||
/// بُر زدن، و پخشِ بقیهی کارتها. یک [animating] هم برای HUD/دیالوگِ حکم میدهد.
|
||||
class AnimGate {
|
||||
bool _intro = true;
|
||||
bool _pendingShuffle = false; // بُرِ دستِ اول که تا پایانِ اینترو معوق مانده
|
||||
bool _shuffling = false;
|
||||
bool _dealing = false;
|
||||
|
||||
/// آیا انیمیشنی در جریان است (صفحه از این برای پنهانکردنِ دیالوگِ حکم استفاده میکند).
|
||||
final ValueNotifier<bool> animating = ValueNotifier(true);
|
||||
|
||||
bool get introActive => _intro;
|
||||
bool get shuffling => _shuffling;
|
||||
bool get dealing => _dealing;
|
||||
|
||||
/// در جریانِ هر انیمیشنِ قفلکننده (بازیِ کارت ممنوع، صدا خاموش).
|
||||
bool get busy => _intro || _shuffling || _dealing;
|
||||
|
||||
/// در اینترو یا بُر زدن — کارتهای دست/پشتکارتها پنهاناند (انیمیشن خودش پخش میکند).
|
||||
bool get cardsHidden => _intro || _shuffling;
|
||||
|
||||
void _refresh() => animating.value = busy;
|
||||
|
||||
void markPendingShuffle() => _pendingShuffle = true;
|
||||
|
||||
/// پایانِ اینترو؛ true اگر بُرِ معوقِ دستِ اول باید اکنون اجرا شود.
|
||||
bool endIntro() {
|
||||
_intro = false;
|
||||
final run = _pendingShuffle;
|
||||
_pendingShuffle = false;
|
||||
_refresh();
|
||||
return run;
|
||||
}
|
||||
|
||||
void beginShuffle() {
|
||||
_shuffling = true;
|
||||
_refresh();
|
||||
}
|
||||
|
||||
void endShuffle() {
|
||||
_shuffling = false;
|
||||
_refresh();
|
||||
}
|
||||
|
||||
void beginDeal() {
|
||||
_dealing = true;
|
||||
_refresh();
|
||||
}
|
||||
|
||||
void endDeal() {
|
||||
_dealing = false;
|
||||
_refresh();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user