diff --git a/src/scenes/MatchScene.ts b/src/scenes/MatchScene.ts index e38b1c9..dbbc4ca 100644 --- a/src/scenes/MatchScene.ts +++ b/src/scenes/MatchScene.ts @@ -579,7 +579,7 @@ export class MatchScene extends Phaser.Scene { .text(sideW / 2, zoneY, '◀ L', { fontFamily: 'monospace', fontSize: '20px', color: '#ff006e', fontStyle: 'bold', }) - .setOrigin(0.5).setAlpha(0.5); + .setOrigin(0.5).setAlpha(0.7); // Right zone const rightX = GAME_WIDTH - sideW / 2; @@ -594,7 +594,7 @@ export class MatchScene extends Phaser.Scene { .text(rightX, zoneY, 'R ▶', { fontFamily: 'monospace', fontSize: '20px', color: '#ff006e', fontStyle: 'bold', }) - .setOrigin(0.5).setAlpha(0.5); + .setOrigin(0.5).setAlpha(0.7); // Booster zone (центр, узкая) — Phase 2 placeholder const boosterZone = this.add.rectangle(GAME_WIDTH / 2, zoneY, boosterW, zoneH * 0.5, PALETTE.accent, 0.05); @@ -606,9 +606,9 @@ export class MatchScene extends Phaser.Scene { }); this.add .text(GAME_WIDTH / 2, zoneY, 'BOOST', { - fontFamily: 'monospace', fontSize: '14px', color: '#ffbe0b', fontStyle: 'bold', + fontFamily: 'monospace', fontSize: '18px', color: '#ffbe0b', fontStyle: 'bold', }) - .setOrigin(0.5).setAlpha(0.5); + .setOrigin(0.5).setAlpha(0.7); } private buildHUD(): void { diff --git a/src/scoring/MatchTracker.test.ts b/src/scoring/MatchTracker.test.ts index bff5b8c..87f6202 100644 --- a/src/scoring/MatchTracker.test.ts +++ b/src/scoring/MatchTracker.test.ts @@ -99,7 +99,8 @@ describe('MatchTracker.recordBumperHit — credit и point-counters', () => { describe('MatchTracker.recordBumperHit — стэк очков и событий', () => { it('многократные hits корректно накапливают BP per сторона', () => { const t = new MatchTracker(0); - // Player атакует — player получает 3 hits через ai_setup (по 3 pts slingshot) + // Player атакует (ballOwner=player) — мяч застревает в AI-setup, + // AI фармит как защитник (defensive trap). Player BP не растёт. t.recordBumperHit(3, 'ai_setup', 'player', 'slingshot', 0, 0); t.recordBumperHit(3, 'ai_setup', 'player', 'slingshot', 100, 0.1); t.recordBumperHit(10, 'ai_setup', 'player', 'turbo', 200, 0.2); @@ -137,7 +138,7 @@ describe('MatchTracker.recordBumperHit — стэк очков и событий expect(events[0]?.data).toMatchObject({ source: 'fixed_last_touch', bumperType: 'standard', - ballOwner: 'player', + ballOwnerBeforeHit: 'player', creditedTo: 'player', pointsEarned: 5, }); diff --git a/src/scoring/MatchTracker.ts b/src/scoring/MatchTracker.ts index 3579239..1619b28 100644 --- a/src/scoring/MatchTracker.ts +++ b/src/scoring/MatchTracker.ts @@ -115,16 +115,18 @@ export class MatchTracker { this.uncreditedBumperHits += 1; } + // Event-log использует имена полей из telemetry-spec.md v3.10 bumper_hit event, + // чтобы при future batched-emit можно было пробрасывать .getEvents() напрямую. this.events.push({ type: 'bumper_hit', timestamp: now, data: { source, bumperType, - ballOwner, + ballOwnerBeforeHit: ballOwner, creditedTo, pointsEarned, - matchTimeSec, + matchTimeSeconds: matchTimeSec, }, }); @@ -139,6 +141,7 @@ export class MatchTracker { } else { this.aiGoals += 1; } + // Event-log поля совпадают с telemetry-spec.md goal_scored event. this.events.push({ type: 'goal', timestamp: now, @@ -146,7 +149,7 @@ export class MatchTracker { scorer: scoredBy, isAutogoal, ballOwnershipBeforeGoal: this.ballOwner, - matchTimeSec, + matchTimeSeconds: matchTimeSec, }, }); }