58 lines
2.0 KiB
Dart
58 lines
2.0 KiB
Dart
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();
|
|
}
|
|
}
|