feat: add heart beat for timing
This commit is contained in:
@@ -4,7 +4,8 @@ import 'package:flame/components.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// حلقهی شمارشِ معکوسِ نوبت: کمانی که در طولِ مهلتِ نوبت خالی میشود.
|
||||
/// رنگ از طلایی به قرمز میرود و در ثانیههای پایانی هشدار میدهد.
|
||||
/// در ثانیههای پایانی قرمز و ضرباندار میشود. (صدای ضربانِ قلب در HokmGame
|
||||
/// مدیریت میشود تا هنگامِ بازیشدنِ کارت بلافاصله قطع شود.)
|
||||
class TurnTimer extends PositionComponent {
|
||||
final double radius;
|
||||
final double durationSeconds;
|
||||
@@ -20,6 +21,8 @@ class TurnTimer extends PositionComponent {
|
||||
anchor: Anchor.center,
|
||||
);
|
||||
|
||||
double get _warnSecs => math.min(8.0, durationSeconds * 0.4);
|
||||
|
||||
static final _bg = Paint()
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = 3
|
||||
@@ -28,6 +31,13 @@ class TurnTimer extends PositionComponent {
|
||||
@override
|
||||
void update(double dt) {
|
||||
_elapsed += dt;
|
||||
final remaining = durationSeconds - _elapsed;
|
||||
// ضربانِ تصویری در پنجرهی هشدار.
|
||||
if (remaining > 0 && remaining <= _warnSecs) {
|
||||
scale = Vector2.all(1 + 0.18 * math.sin(_elapsed * 2 * math.pi / 0.7).abs());
|
||||
} else {
|
||||
scale = Vector2.all(1);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -35,11 +45,12 @@ class TurnTimer extends PositionComponent {
|
||||
final center = Offset(radius, radius);
|
||||
canvas.drawCircle(center, radius, _bg);
|
||||
|
||||
final frac =
|
||||
durationSeconds <= 0 ? 0.0 : (1 - _elapsed / durationSeconds).clamp(0.0, 1.0);
|
||||
final frac = durationSeconds <= 0
|
||||
? 0.0
|
||||
: (1 - _elapsed / durationSeconds).clamp(0.0, 1.0);
|
||||
if (frac <= 0) return;
|
||||
|
||||
final color = frac > 0.3 ? const Color(0xFFE9B949) : const Color(0xFFE53935);
|
||||
final color = frac > 0.35 ? const Color(0xFFE9B949) : const Color(0xFFE53935);
|
||||
final arc = Paint()
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = 4
|
||||
@@ -47,7 +58,7 @@ class TurnTimer extends PositionComponent {
|
||||
..color = color;
|
||||
canvas.drawArc(
|
||||
Rect.fromCircle(center: center, radius: radius),
|
||||
-math.pi / 2, // شروع از بالا
|
||||
-math.pi / 2,
|
||||
2 * math.pi * frac,
|
||||
false,
|
||||
arc,
|
||||
|
||||
Reference in New Issue
Block a user