fix: some buggs
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
import 'dart:math' as math;
|
||||
|
||||
import 'package:flame/components.dart';
|
||||
import 'package:flame/effects.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
const _gold = Color(0xFFE9B949);
|
||||
const _goldDark = Color(0xFF8A5A00);
|
||||
|
||||
/// ستارهی طلایی روی بازیکنِ نوبتدار (مطابقِ تصویرِ مرجع).
|
||||
class StarBadge extends PositionComponent {
|
||||
final double r;
|
||||
StarBadge(this.r, Vector2 pos)
|
||||
: super(position: pos, size: Vector2.all(r * 2), anchor: Anchor.center);
|
||||
|
||||
static final _fill = Paint()..color = _gold;
|
||||
static final _stroke = Paint()
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = 1.5
|
||||
..color = _goldDark;
|
||||
|
||||
@override
|
||||
void render(Canvas canvas) {
|
||||
final path = _starPath(Offset(r, r), r, r * 0.45, 5);
|
||||
canvas.drawPath(path, _fill);
|
||||
canvas.drawPath(path, _stroke);
|
||||
}
|
||||
}
|
||||
|
||||
/// تاجِ طلایی روی حاکم.
|
||||
class CrownBadge extends PositionComponent {
|
||||
final double w;
|
||||
CrownBadge(this.w, Vector2 pos)
|
||||
: super(
|
||||
position: pos,
|
||||
size: Vector2(w, w * 0.8),
|
||||
anchor: Anchor.center,
|
||||
);
|
||||
|
||||
static final _fill = Paint()..color = _gold;
|
||||
static final _stroke = Paint()
|
||||
..style = PaintingStyle.stroke
|
||||
..strokeWidth = 1.5
|
||||
..color = _goldDark;
|
||||
|
||||
@override
|
||||
void render(Canvas canvas) {
|
||||
final h = size.y;
|
||||
final p = Path()
|
||||
..moveTo(0, h) // پایینچپ
|
||||
..lineTo(0, h * 0.35) // نوکِ چپ
|
||||
..lineTo(w * 0.25, h * 0.62) // فرورفتگی
|
||||
..lineTo(w * 0.5, h * 0.18) // نوکِ میانی (بلندترین)
|
||||
..lineTo(w * 0.75, h * 0.62)
|
||||
..lineTo(w, h * 0.35) // نوکِ راست
|
||||
..lineTo(w, h) // پایینراست
|
||||
..close();
|
||||
canvas.drawPath(p, _fill);
|
||||
canvas.drawPath(p, _stroke);
|
||||
// نگینهای نوکِ تاج
|
||||
final gem = Paint()..color = const Color(0xFFB71C1C);
|
||||
canvas.drawCircle(Offset(w * 0.5, h * 0.14), w * 0.05, gem);
|
||||
}
|
||||
}
|
||||
|
||||
Path _starPath(Offset c, double outer, double inner, int points) {
|
||||
final path = Path();
|
||||
for (var i = 0; i < points * 2; i++) {
|
||||
final rad = i.isEven ? outer : inner;
|
||||
final ang = -math.pi / 2 + i * math.pi / points;
|
||||
final pt = Offset(c.dx + rad * math.cos(ang), c.dy + rad * math.sin(ang));
|
||||
i == 0 ? path.moveTo(pt.dx, pt.dy) : path.lineTo(pt.dx, pt.dy);
|
||||
}
|
||||
return path..close();
|
||||
}
|
||||
|
||||
/// افکتِ ضربان (برای جلبِ توجه؛ مثلاً ستارهی نوبت).
|
||||
PulseEffect pulse() => PulseEffect();
|
||||
|
||||
class PulseEffect extends ScaleEffect {
|
||||
PulseEffect()
|
||||
: super.by(
|
||||
Vector2.all(0.25),
|
||||
EffectController(
|
||||
duration: 0.5,
|
||||
reverseDuration: 0.5,
|
||||
infinite: true,
|
||||
curve: Curves.easeInOut,
|
||||
),
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user