fix: delay after fire

This commit is contained in:
2026-07-08 19:20:30 +03:30
parent 6b9b9a0f3a
commit 2496580e86
3 changed files with 217 additions and 35 deletions
@@ -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)));
}