priority of cards fixed
This commit is contained in:
@@ -2,15 +2,18 @@ import 'package:flame/components.dart';
|
||||
import 'package:flame/effects.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// انیمیشنِ بُر زدن: دو دسته کارتِ پشترو در مرکز ریفل میشوند، کمی بالا/پایین
|
||||
/// میروند (بُر) و سپس به سمت چهار بازیکن پخش میشوند. مدتِ کل [totalMs] است
|
||||
/// تا صدای بُر زدن دقیقاً همزمان با پایانِ انیمیشن قطع شود.
|
||||
/// انیمیشنِ پخشِ کارت.
|
||||
/// - حالتِ بُر زدن ([dealOnly]=false): دو دسته در مرکز ریفل و سپس پخش میشوند.
|
||||
/// - حالتِ پخش ([dealOnly]=true): کارتها از مرکز به سمتِ چهار بازیکن پخش میشوند
|
||||
/// (پس از انتخابِ حکم، برای پخشِ بقیهی کارتها).
|
||||
class ShuffleAnimation extends PositionComponent {
|
||||
final Vector2 area;
|
||||
ShuffleAnimation(this.area);
|
||||
final bool dealOnly;
|
||||
ShuffleAnimation(this.area, {this.dealOnly = false});
|
||||
|
||||
/// مدتِ کلِ انیمیشن (مرجعِ هماهنگیِ صدا).
|
||||
/// مدتِ کلِ هر حالت (مرجعِ هماهنگیِ صدا).
|
||||
static const int totalMs = 2000;
|
||||
static const int dealMs = 1300;
|
||||
|
||||
@override
|
||||
Future<void> onLoad() async {
|
||||
@@ -29,24 +32,41 @@ class ShuffleAnimation extends PositionComponent {
|
||||
];
|
||||
|
||||
for (var i = 0; i < n; i++) {
|
||||
final left = i.isEven;
|
||||
final stack = center + Vector2((i - n / 2) * cw * 0.05, 0);
|
||||
final delay = i * 0.02; // ریفلِ پلکانی
|
||||
final delay = i * 0.02;
|
||||
|
||||
if (dealOnly) {
|
||||
// فقط پخش: از یک دستهی مرتب در مرکز به سمتِ بازیکنها.
|
||||
final card = _Back(Vector2(cw, ch))
|
||||
..anchor = Anchor.center
|
||||
..position = stack;
|
||||
add(card);
|
||||
card.add(MoveToEffect(
|
||||
center + dirs[i % 4],
|
||||
EffectController(
|
||||
duration: 0.45, curve: Curves.easeIn, startDelay: 0.15 + delay),
|
||||
));
|
||||
card.add(ScaleEffect.to(
|
||||
Vector2.all(0.5),
|
||||
EffectController(duration: 0.45, startDelay: 0.15 + delay),
|
||||
));
|
||||
continue;
|
||||
}
|
||||
|
||||
// حالتِ بُر زدن: ریفل سپس پخش.
|
||||
final left = i.isEven;
|
||||
final card = _Back(Vector2(cw, ch))
|
||||
..anchor = Anchor.center
|
||||
..position = center + Vector2((left ? -1 : 1) * cw, 0)
|
||||
..angle = (left ? -1 : 1) * 0.22;
|
||||
add(card);
|
||||
|
||||
// صافشدنِ زاویه همزمان با ریفل.
|
||||
card.add(RotateEffect.to(
|
||||
0, EffectController(duration: 0.55, startDelay: delay)));
|
||||
|
||||
// دنباله: ریفل به مرکز ← بالا (بُر) ← نشستن ← پخش به سمت بازیکن.
|
||||
card.add(SequenceEffect([
|
||||
MoveToEffect(stack,
|
||||
EffectController(duration: 0.55, curve: Curves.easeOut, startDelay: delay)),
|
||||
EffectController(
|
||||
duration: 0.55, curve: Curves.easeOut, startDelay: delay)),
|
||||
MoveToEffect(stack + Vector2(0, -ch * 0.18),
|
||||
EffectController(duration: 0.35, curve: Curves.easeInOut)),
|
||||
MoveToEffect(stack,
|
||||
@@ -54,15 +74,13 @@ class ShuffleAnimation extends PositionComponent {
|
||||
MoveToEffect(center + dirs[i % 4],
|
||||
EffectController(duration: 0.55, curve: Curves.easeIn)),
|
||||
]));
|
||||
|
||||
// کوچکشدن هنگامِ پخش (همزمان با حرکتِ آخرِ دنباله).
|
||||
card.add(ScaleEffect.to(
|
||||
Vector2.all(0.5),
|
||||
EffectController(duration: 0.55, startDelay: 1.25 + delay),
|
||||
));
|
||||
}
|
||||
|
||||
add(RemoveEffect(delay: totalMs / 1000));
|
||||
add(RemoveEffect(delay: (dealOnly ? dealMs : totalMs) / 1000));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user