45 lines
1.2 KiB
Dart
45 lines
1.2 KiB
Dart
import 'package:boardgames_app/games/checkers.dart';
|
|
import 'package:boardgames_core/games.dart';
|
|
import 'package:flame/components.dart';
|
|
import 'package:flame/events.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
class CheckerComp extends PositionComponent
|
|
with HasGameRef<CheckersGame>, Tappable {
|
|
Checker checker;
|
|
bool selected = false;
|
|
|
|
CheckerComp(this.checker);
|
|
|
|
@override
|
|
bool onTapDown(TapDownInfo event) {
|
|
if (selected) {
|
|
selected = false;
|
|
return false;
|
|
} else if (!checker.isOwner(game.boardGame.currentPlayer!)) {
|
|
return true;
|
|
}
|
|
for (final element in game.children) {
|
|
if (element != this && element is CheckerComp) {
|
|
element.selected = false;
|
|
}
|
|
}
|
|
selected = true;
|
|
return false;
|
|
}
|
|
|
|
@override
|
|
void render(Canvas canvas) {
|
|
position =
|
|
Vector2(checker.position.column * width, checker.position.row * height);
|
|
Color color =
|
|
checker.getOwners().first.id % 2 == 1 ? Colors.red : Colors.white;
|
|
if (selected) {
|
|
color = Colors.blue;
|
|
}
|
|
final paint = Paint()..color = color;
|
|
final radius = width / 2;
|
|
canvas.drawCircle(Offset(radius, radius), radius, paint);
|
|
}
|
|
}
|