Implement defensive setup scoring v3.10
Реализует финальную модель scoring из data-contracts.md v3.10:
fixed center bumpers — по last-touch; setup-bumpers — defensive trap
(награждают владельца только когда мяч принадлежит сопернику).
Self-farm запрещён. Neutral ball не даёт очков нигде.
Code changes:
- types/index.ts: BumperScoreSource union ('fixed_last_touch' |
'player_setup' | 'ai_setup'); MatchResult.aiBumperPointsEarned +
aiBumperHitsCount.
- Bumper.ts: новый required field source: BumperScoreSource;
передаётся в onHit callback через bumper.source.
- scoring/MatchTracker.ts: pure helper computeCreditedTo(source, ballOwner)
→ реализует 9-cell credit matrix; recordBumperHit принимает
(rawPoints, source, ballOwner, type, ...) и возвращает {creditedTo,
pointsEarned}; новые getter'ы getAIBumperHits + getUncreditedBumperHits.
- scenes/MatchScene.ts:
* Fixed bumpers создаются с source='fixed_last_touch'
* placeSetupBumpers передаёт source per side
* handleBumperHit (новая сигнатура: bumper, points) рутит в tracker,
emit'ит spawn-particles + telemetry bumper_hit event с полным
набором полей per telemetry-spec.md v3.10
* MatchResult заполняется с AI BP/hits
* match_end telemetry также включает aiBumperPointsEarned/HitsCount
* HUD: BP теперь сравнительный «P x / AI y»
- scenes/ResultScene.ts: breakdown показывает обе стороны BP и hits.
Particle effects (DoD v3.10):
- 12 псевдо-частиц радиально от bumper'а (cubic ease-out, 320ms)
- цвет: player=magenta, ai=cyan, null=grey
- screenshake 80ms/0.0025 ТОЛЬКО на credited hit
(иначе экран дрожит на каждом нейтральном отскоке)
Tests: scoring/MatchTracker.test.ts — 21 теста:
- 9-cell credit matrix (computeCreditedTo, все source × ballOwner)
- recordBumperHit с counter assertions
- многократные hits (накопление BP per сторона)
- симметрия player/AI defensive trap scenarios
- fixed bumpers через смену владения
- events log для telemetry
- recordGoal с autogoal-flag
Итого 50/50 unit-тестов (16 calculateScores + 13 flipperGeometry +
21 MatchTracker). typecheck/lint/build все зелёные.
Несоответствия с docs остающиеся:
- DoD: «12 частиц per credited side» — done; SFX bumper hit (DoD line 247)
— TODO Phase 4 (asset pack).
- Particle effects через psecdoupartials (Arc + tween), не через
ParticleEmitter — упрощение, визуально эквивалентно.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -57,7 +57,7 @@ src/
|
||||
scenes/ Phaser scenes (Boot, Preload, MainMenu, Setup, Match, Result)
|
||||
game/ Game objects (Ball, Flipper, Bumper, Table, Match orchestration)
|
||||
ai/ AI personalities (Defensive, Aggressive, Trickster, Ghost) + heuristics
|
||||
scoring/ calculateScores + MatchTracker (last-touch + bumper points)
|
||||
scoring/ calculateScores + MatchTracker (defensive setup scoring + bumper points)
|
||||
```
|
||||
|
||||
### Фазовый план
|
||||
|
||||
Reference in New Issue
Block a user