fix: both flippers should respond to multi touch taps

pull/330/head
Jochum van der Ploeg 3 years ago
parent f38f18d60a
commit 8aacd4ead2
No known key found for this signature in database
GPG Key ID: E961B7B51589CA09

@ -77,7 +77,7 @@ class PinballGame extends PinballForge2DGame
await super.onLoad(); await super.onLoad();
} }
BoardSide? focusedBoardSide; final focusedBoardSide = <int, BoardSide>{};
@override @override
void onTapDown(int pointerId, TapDownInfo info) { void onTapDown(int pointerId, TapDownInfo info) {
@ -90,9 +90,10 @@ class PinballGame extends PinballForge2DGame
descendants().whereType<Plunger>().single.pullFor(2); descendants().whereType<Plunger>().single.pullFor(2);
} else { } else {
final leftSide = info.eventPosition.widget.x < canvasSize.x / 2; final leftSide = info.eventPosition.widget.x < canvasSize.x / 2;
focusedBoardSide = leftSide ? BoardSide.left : BoardSide.right; focusedBoardSide[pointerId] =
leftSide ? BoardSide.left : BoardSide.right;
final flippers = descendants().whereType<Flipper>().where((flipper) { final flippers = descendants().whereType<Flipper>().where((flipper) {
return flipper.side == focusedBoardSide; return flipper.side == focusedBoardSide[pointerId];
}); });
flippers.first.moveUp(); flippers.first.moveUp();
} }
@ -103,23 +104,23 @@ class PinballGame extends PinballForge2DGame
@override @override
void onTapUp(int pointerId, TapUpInfo info) { void onTapUp(int pointerId, TapUpInfo info) {
_moveFlippersDown(); _moveFlippersDown(pointerId);
super.onTapUp(pointerId, info); super.onTapUp(pointerId, info);
} }
@override @override
void onTapCancel(int pointerId) { void onTapCancel(int pointerId) {
_moveFlippersDown(); _moveFlippersDown(pointerId);
super.onTapCancel(pointerId); super.onTapCancel(pointerId);
} }
void _moveFlippersDown() { void _moveFlippersDown(int pointerId) {
if (focusedBoardSide != null) { if (focusedBoardSide[pointerId] != null) {
final flippers = descendants().whereType<Flipper>().where((flipper) { final flippers = descendants().whereType<Flipper>().where((flipper) {
return flipper.side == focusedBoardSide; return flipper.side == focusedBoardSide[pointerId];
}); });
flippers.first.moveDown(); flippers.first.moveDown();
focusedBoardSide = null; focusedBoardSide.remove(pointerId);
} }
} }
} }

Loading…
Cancel
Save