fix: delay after fire
This commit is contained in:
@@ -18,6 +18,7 @@ class CardComponent extends PositionComponent
|
||||
VoidCallback? onPlay; // در صورت مجاز بودن، بازیِ این کارت
|
||||
bool dimmed; // کارت غیرمجاز/غیرفعال
|
||||
Vector2? home; // موقعیت اصلی در دست (برای برگشت پس از کشیدنِ ناقص)
|
||||
double homeAngle = 0; // زاویهی بادبزنیِ کارت در دست (برای برگشت پس از کشیدن)
|
||||
bool highlight = false; // کارتِ برندهی دست ⇒ درخششِ طلایی پیش از جمعشدن
|
||||
int restPriority = 0; // ترتیب لایهی اصلی در دست (برای بازگردانی پس از کشیدن)
|
||||
Rect? dropZone; // ناحیهی وسط میز؛ رهاکردن کارت در آن یعنی بازی
|
||||
@@ -72,6 +73,13 @@ class CardComponent extends PositionComponent
|
||||
Vector2.all(s), EffectController(duration: 0.12, curve: Curves.easeOut)));
|
||||
}
|
||||
|
||||
// چرخاندنِ نرمِ کارت به زاویهی مشخص (صافکردن هنگام کشیدن، برگشت هنگام رها).
|
||||
void _rotateTo(double a) {
|
||||
children.whereType<RotateEffect>().toList().forEach((e) => e.removeFromParent());
|
||||
add(RotateEffect.to(
|
||||
a, EffectController(duration: 0.12, curve: Curves.easeOut)));
|
||||
}
|
||||
|
||||
/// بازنشانیِ فوریِ مقیاس به اندازهی عادی (هنگام بازی روی میز).
|
||||
void resetScale() {
|
||||
children.whereType<ScaleEffect>().toList().forEach((e) => e.removeFromParent());
|
||||
@@ -94,12 +102,15 @@ class CardComponent extends PositionComponent
|
||||
_dragging = true;
|
||||
priority = 1000; // روی همهی کارتها
|
||||
_scaleTo(_dragScale); // بزرگنماییِ نرم هنگام انتخاب
|
||||
_rotateTo(0); // صافشدن: کارت دیگر با زاویهی بادبزنیِ دست کشیده نمیشود
|
||||
}
|
||||
|
||||
@override
|
||||
void onDragUpdate(DragUpdateEvent event) {
|
||||
if (!_dragging) return;
|
||||
position += event.localDelta;
|
||||
// canvasDelta (فضای صفحه) نه localDelta: مستقل از چرخش/مقیاسِ خودِ کارت است،
|
||||
// پس کارت دقیقاً بهدنبالِ انگشت میآید نه روی مسیرِ منحنیِ قوسِ دست.
|
||||
position += event.canvasDelta;
|
||||
_overZone = _inDropZone();
|
||||
}
|
||||
|
||||
@@ -139,6 +150,7 @@ class CardComponent extends PositionComponent
|
||||
|
||||
void _returnHome() {
|
||||
priority = restPriority; // بازگردانی ترتیب لایه تا روی کارتهای دیگر نیفتد
|
||||
_rotateTo(homeAngle); // بازگشت به زاویهی بادبزنیِ دست
|
||||
if (home == null) return;
|
||||
add(MoveToEffect(home!, EffectController(duration: 0.2, curve: Curves.easeOut)));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user