Animation improvements

This commit is contained in:
Brian Fertig 2026-05-19 18:07:03 -06:00
parent 975ee6ea25
commit 27c13a57d4
1 changed files with 17 additions and 9 deletions

View File

@ -713,19 +713,26 @@ export default class GoFishGame extends Phaser.Scene {
const askerCard = beforeState.players[askerSeat].hand.find(c => c.rank === rank); const askerCard = beforeState.players[askerSeat].hand.find(c => c.rank === rank);
if (!askerCard) { onComplete(); return; } if (!askerCard) { onComplete(); return; }
const askerSprite = this.makeCardSprite(askerCard, askerLayout.handCenter.x, askerLayout.handCenter.y, { const existingSprite = this.cardObjs.get(`hand-${askerSeat}-${askerCard.id}`);
faceUp: false, rotation: 0, const askerSprite = existingSprite
}); ?? this.makeCardSprite(askerCard, askerLayout.handCenter.x, askerLayout.handCenter.y, {
faceUp: askerLayout.handFaceUp, rotation: 0,
});
if (existingSprite) this.cardObjs.delete(`hand-${askerSeat}-${askerCard.id}`);
const origX = askerSprite.x;
const origY = askerSprite.y;
askerSprite.setDepth(D.banner - 4); askerSprite.setDepth(D.banner - 4);
this.transientObjs.push(askerSprite); this.transientObjs.push(askerSprite);
// Move asker card to show zone then flip it face-up. // Move asker card to show zone then flip it face-up (skip flip if already face-up).
this.tweens.add({ this.tweens.add({
targets: askerSprite, targets: askerSprite,
x: askerShow.x, y: askerShow.y, x: askerShow.x, y: askerShow.y,
duration: 280, duration: 280,
ease: 'Cubic.easeOut', ease: 'Cubic.easeOut',
onComplete: () => this.flipCardFaceUp(askerSprite, askerCard), onComplete: () => {
if (!askerLayout.handFaceUp) this.flipCardFaceUp(askerSprite, askerCard);
},
}); });
// After card is revealed, cast fishing line toward the target, then show result. // After card is revealed, cast fishing line toward the target, then show result.
@ -782,12 +789,13 @@ export default class GoFishGame extends Phaser.Scene {
this.time.delayedCall(320, () => onComplete(allSprites)); this.time.delayedCall(320, () => onComplete(allSprites));
}); });
} else { } else {
// Fish — flip card back face-down and return it to hand. // Fish — flip card back face-down (if needed) and return it to hand.
this.flipCardFaceDown(askerSprite); if (!askerLayout.handFaceUp) this.flipCardFaceDown(askerSprite);
this.time.delayedCall(340, () => { const returnDelay = askerLayout.handFaceUp ? 80 : 340;
this.time.delayedCall(returnDelay, () => {
this.tweens.add({ this.tweens.add({
targets: askerSprite, targets: askerSprite,
x: askerLayout.handCenter.x, y: askerLayout.handCenter.y, x: origX, y: origY,
duration: 280, ease: 'Cubic.easeIn', duration: 280, ease: 'Cubic.easeIn',
onComplete: () => { if (askerSprite.active) askerSprite.destroy(); }, onComplete: () => { if (askerSprite.active) askerSprite.destroy(); },
}); });