diff --git a/doc/tutorials/klondike/app/lib/step5/components/card.dart b/doc/tutorials/klondike/app/lib/step5/components/card.dart index 5ffbfeb70..b68049828 100644 --- a/doc/tutorials/klondike/app/lib/step5/components/card.dart +++ b/doc/tutorials/klondike/app/lib/step5/components/card.dart @@ -359,20 +359,18 @@ class Card extends PositionComponent Vector2 to, { double speed = 10.0, double start = 0.0, + int startPriority = 100, Curve curve = Curves.easeOutQuad, VoidCallback? onComplete, - bool bumpPriority = true, }) { assert(speed > 0.0, 'Speed must be > 0 widths per second'); final dt = (to - position).length / (speed * size.x); assert(dt > 0, 'Distance to move must be > 0'); - if (bumpPriority) { - priority = 100; - } add( - MoveToEffect( + CardMoveEffect( to, EffectController(duration: dt, startDelay: start, curve: curve), + transitPriority: startPriority, onComplete: () { onComplete?.call(); }, @@ -443,3 +441,20 @@ class Card extends PositionComponent //#endregion } + +class CardMoveEffect extends MoveToEffect { + CardMoveEffect( + super.destination, + super.controller, { + super.onComplete, + this.transitPriority = 100, + }); + + final int transitPriority; + + @override + void onStart() { + super.onStart(); // Flame connects MoveToEffect to EffectController. + parent?.priority = transitPriority; + } +} diff --git a/doc/tutorials/klondike/app/lib/step5/components/tableau_pile.dart b/doc/tutorials/klondike/app/lib/step5/components/tableau_pile.dart index ab7e38a5c..100d91ea6 100644 --- a/doc/tutorials/klondike/app/lib/step5/components/tableau_pile.dart +++ b/doc/tutorials/klondike/app/lib/step5/components/tableau_pile.dart @@ -75,7 +75,7 @@ class TableauPile extends PositionComponent implements Pile { _cards.add(card); card.doMove( nextPosition, - bumpPriority: false, // Priorities have been set: don't change them. + startPriority: card.priority, onComplete: () { nCardsToMove--; if (nCardsToMove == 0) { diff --git a/doc/tutorials/klondike/app/lib/step5/klondike_world.dart b/doc/tutorials/klondike/app/lib/step5/klondike_world.dart index 51b45a4a3..3f13bf8fd 100644 --- a/doc/tutorials/klondike/app/lib/step5/klondike_world.dart +++ b/doc/tutorials/klondike/app/lib/step5/klondike_world.dart @@ -114,6 +114,13 @@ class KlondikeWorld extends World with HasGameReference { // For the "Same deal" option, re-use the previous seed, else use a new one. cards.shuffle(Random(game.seed)); + // Each card dealt must be seen to come from the top of the deck! + var dealPriority = 1; + for (final card in cards) { + card.priority = dealPriority++; + } + + // Change priority as cards take off: so later cards fly above earlier ones. var cardToDeal = cards.length - 1; var nMovingCards = 0; for (var i = 0; i < 7; i++) { @@ -121,7 +128,9 @@ class KlondikeWorld extends World with HasGameReference { final card = cards[cardToDeal--]; card.doMove( tableauPiles[j].position, + speed: 15.0, start: nMovingCards * 0.15, + startPriority: 100 + nMovingCards, onComplete: () { tableauPiles[j].acquireCard(card); nMovingCards--;