import 'package:flutter/foundation.dart'; /// دروازه‌ی انیمیشنِ صحنه: نگه‌دارِ سه فازِ «مشغولِ انیمیشن» که در آن‌ها بازیِ کارت /// قفل است و کارت‌ها/پشت‌کارت‌ها ممکن است پنهان شوند — اینترو («جستجوی حریف»)، /// بُر زدن، و پخشِ بقیه‌ی کارت‌ها. یک [animating] هم برای HUD/دیالوگِ حکم می‌دهد. class AnimGate { bool _intro = true; bool _pendingShuffle = false; // بُرِ دستِ اول که تا پایانِ اینترو معوق مانده bool _shuffling = false; bool _dealing = false; /// آیا انیمیشنی در جریان است (صفحه از این برای پنهان‌کردنِ دیالوگِ حکم استفاده می‌کند). final ValueNotifier 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(); } }