priority of cards fixed
This commit is contained in:
@@ -97,12 +97,21 @@ class _GameScreenState extends State<GameScreen> {
|
||||
_backButton(context),
|
||||
if (state.connection == WsStatus.disconnected) _connBanner(),
|
||||
if (_showSearch(state)) _searchPanel(state),
|
||||
if (!_showSearch(state) && _showTrumpPicker(state))
|
||||
_trumpPicker(context),
|
||||
// دیالوگِ انتخابِ حکم و بنرِ نوبت فقط پس از پایانِ انیمیشنِ
|
||||
// پخشِ کارت نمایش داده میشوند (نه وسطِ بُر زدن/پخش).
|
||||
if (!_showSearch(state))
|
||||
ValueListenableBuilder<bool>(
|
||||
valueListenable: _game.animating,
|
||||
builder: (context, animating, _) {
|
||||
if (animating) return const SizedBox.shrink();
|
||||
return Stack(children: [
|
||||
if (_showTrumpPicker(state)) _trumpPicker(context),
|
||||
if (_isMyPlayTurn(state)) _turnBanner(),
|
||||
]);
|
||||
},
|
||||
),
|
||||
if (state.handResult != null && state.gameOver == null)
|
||||
_handResult(state),
|
||||
if (!_showSearch(state) && _isMyPlayTurn(state))
|
||||
_turnBanner(),
|
||||
if (state.gameOver != null) _gameOver(context, state),
|
||||
],
|
||||
);
|
||||
@@ -258,7 +267,7 @@ class _GameScreenState extends State<GameScreen> {
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
for (var seat = 0; seat < 4; seat++)
|
||||
_searchSlot(at(seat), seat == mySeat),
|
||||
_searchSlot(at(seat), seat == mySeat, seat),
|
||||
],
|
||||
),
|
||||
if (searching) ...[
|
||||
@@ -274,7 +283,7 @@ class _GameScreenState extends State<GameScreen> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _searchSlot(GamePlayer? p, bool isYou) {
|
||||
Widget _searchSlot(GamePlayer? p, bool isYou, int seat) {
|
||||
final found = p != null;
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 6),
|
||||
@@ -305,7 +314,7 @@ class _GameScreenState extends State<GameScreen> {
|
||||
),
|
||||
child:
|
||||
!found
|
||||
? const _SearchingAvatar() // آواتارهای متغیر تا یافتنِ حریف
|
||||
? _SearchingAvatar(slot: seat) // آواتارهای متغیر و متفاوت
|
||||
: p.bot
|
||||
? const Icon(
|
||||
Icons.smart_toy,
|
||||
@@ -471,7 +480,8 @@ class _GameScreenState extends State<GameScreen> {
|
||||
|
||||
/// آواتارِ در حالِ تغییر برای جایگاههای خالیِ پنل جستجو (حسِ «در حال یافتن»).
|
||||
class _SearchingAvatar extends StatefulWidget {
|
||||
const _SearchingAvatar();
|
||||
final int slot; // هر جایگاه دامنهی seedِ متفاوت دارد تا یکسان نباشند
|
||||
const _SearchingAvatar({required this.slot});
|
||||
|
||||
@override
|
||||
State<_SearchingAvatar> createState() => _SearchingAvatarState();
|
||||
@@ -484,7 +494,8 @@ class _SearchingAvatarState extends State<_SearchingAvatar> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_timer = Timer.periodic(const Duration(milliseconds: 220), (_) {
|
||||
_i = widget.slot * 13; // شروعِ متفاوت برای هر جایگاه
|
||||
_timer = Timer.periodic(const Duration(milliseconds: 240), (_) {
|
||||
if (mounted) setState(() => _i++);
|
||||
});
|
||||
}
|
||||
@@ -497,9 +508,10 @@ class _SearchingAvatarState extends State<_SearchingAvatar> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// پیشوندِ مخصوصِ جایگاه ⇒ آواتارِ هر جایگاه با بقیه فرق دارد.
|
||||
return ClipRRect(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
child: RandomAvatar('seek-${_i % 24}'),
|
||||
child: RandomAvatar('s${widget.slot}-$_i'),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user