Files
front-hokm/lib/feature/game/presentation/widgets/flame/anim_gate.dart
T

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();
}
}