Description
The server has two separate scoring mechanisms: (1) `ScoreComponent` per player entity, updated by `RingCollisionSystem`; and (2) `ScoringServiceImpl`, which is never instantiated or called. This creates ambiguity about which is the source of truth, risks data loss at map transitions, and blocks the leaderboard/database persistence layer.
Acceptance Criteria
Technical Details
- `ScoringServiceImpl` is in `server/src/main/java/.../service/`
- Instantiate it in `VoyagerServer` or a DI container and inject into `RingCollisionSystem`
- `ScoreComponent` remains the fast per-tick ECS store; `ScoringService` is the durable session-scoped store
- Database persistence (separate ticket) can hook into `ScoringService.onCupEnd()` later
Dependencies
- Ring pass feedback issue (RingCollisionSystem must be the single call site)
Estimate
S
Description
The server has two separate scoring mechanisms: (1) `ScoreComponent` per player entity, updated by `RingCollisionSystem`; and (2) `ScoringServiceImpl`, which is never instantiated or called. This creates ambiguity about which is the source of truth, risks data loss at map transitions, and blocks the leaderboard/database persistence layer.
Acceptance Criteria
Technical Details
Dependencies
Estimate
S