From 2f58da8a63d73fdd3ea4e774bc3eafd182757d3e Mon Sep 17 00:00:00 2001 From: Giancarmine Salucci Date: Tue, 31 Mar 2026 22:42:12 +0200 Subject: [PATCH] =?UTF-8?q?feat(SCOPONE-0005):=20complete=20iteration=203?= =?UTF-8?q?=20=E2=80=94=20restore=20labels,=20move=20turn=20bar=20below=20?= =?UTF-8?q?cards?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/scenes/GameScene.ts | 43 +++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/src/scenes/GameScene.ts b/src/scenes/GameScene.ts index cc04248..38a1017 100644 --- a/src/scenes/GameScene.ts +++ b/src/scenes/GameScene.ts @@ -409,10 +409,10 @@ export class GameScene extends Phaser.Scene { private buildPlayerLabels(W: number, H: number): void { const defs: Array<{ idx: PlayerIndex; x: number; y: number; color: string; txt: string; originX: number; originY: number }> = [ - { idx: 0, x: W / 2, y: H - 8, color: '#aaffaa', txt: 'Tu [Team A]', originX: 0.5, originY: 1 }, - { idx: 1, x: 6, y: H / 2 + SCOREBAR_H / 2, color: '#ffaaaa', txt: 'AI\nOvest\n[B]', originX: 0, originY: 0.5 }, - { idx: 2, x: W / 2, y: SCOREBAR_H + 8, color: '#aaffaa', txt: 'Compagno [Team A]', originX: 0.5, originY: 0 }, - { idx: 3, x: W - 6, y: H / 2 + SCOREBAR_H / 2, color: '#ffaaaa', txt: 'AI\nEst\n[B]', originX: 1, originY: 0.5 }, + { idx: 0, x: W / 2, y: H - CH_H - 28, color: '#aaffaa', txt: 'Tu [Team A]', originX: 0.5, originY: 1 }, + { idx: 1, x: CH_A + 20, y: H / 2 + SCOREBAR_H / 2, color: '#ffaaaa', txt: 'AI\nOvest\n[B]', originX: 0, originY: 0.5 }, + { idx: 2, x: W / 2, y: SCOREBAR_H + CH_A + 44, color: '#aaffaa', txt: 'Compagno [Team A]', originX: 0.5, originY: 0 }, + { idx: 3, x: W - CH_A - 20, y: H / 2 + SCOREBAR_H / 2, color: '#ffaaaa', txt: 'AI\nEst\n[B]', originX: 1, originY: 0.5 }, ]; for (const d of defs) { const lbl = this.add.text(d.x, d.y, d.txt, { @@ -435,16 +435,30 @@ export class GameScene extends Phaser.Scene { this.activeHighlightRect = null; } - // Draw glow rectangle behind active player label - const lbl = this.playerLabels.get(playerIdx)!; - const bounds = lbl.getBounds(); - const pad = 6; + // Draw turn indicator bar below/outside player's cards + const W = this.scale.width; + const H = this.scale.height; const color = teamOf(playerIdx) === 0 ? 0x00ff44 : 0xff4444; - const gfx = this.add.graphics().setDepth(1); - gfx.fillStyle(color, 0.25); - gfx.fillRoundedRect(bounds.x - pad, bounds.y - pad, bounds.width + pad * 2, bounds.height + pad * 2, 6); - gfx.lineStyle(2, color, 0.8); - gfx.strokeRoundedRect(bounds.x - pad, bounds.y - pad, bounds.width + pad * 2, bounds.height + pad * 2, 6); + const gfx = this.add.graphics().setDepth(10); + const barThick = 4; + switch (playerIdx) { + case 0: // South — horizontal bar below hand + gfx.fillStyle(color, 0.9); + gfx.fillRoundedRect(W * 0.15, H - barThick - 2, W * 0.7, barThick, 2); + break; + case 1: // West — vertical bar left of cards + gfx.fillStyle(color, 0.9); + gfx.fillRoundedRect(2, SCOREBAR_H + 60, barThick, H - SCOREBAR_H - CH_H - 80, 2); + break; + case 2: // North — horizontal bar above partner cards + gfx.fillStyle(color, 0.9); + gfx.fillRoundedRect(W * 0.18, SCOREBAR_H + 2, W * 0.64, barThick, 2); + break; + case 3: // East — vertical bar right of cards + gfx.fillStyle(color, 0.9); + gfx.fillRoundedRect(W - barThick - 2, SCOREBAR_H + 60, barThick, H - SCOREBAR_H - CH_H - 80, 2); + break; + } this.activeHighlightRect = gfx; // Pulse the glow @@ -455,8 +469,9 @@ export class GameScene extends Phaser.Scene { }); // Pulse the label + const activeLbl = this.playerLabels.get(playerIdx)!; this.tweens.add({ - targets: lbl, + targets: activeLbl, scaleX: 1.2, scaleY: 1.2, duration: 300, yoyo: true, ease: 'Sine.InOut', });