Full AL-001 through AL-008 implementation: shared/ module with ModuleType enum, GameHost routing, StylusInputBridge, LineCorridorScreen with live stroke rendering, LineScore (straightness + anglePrecision), score returned to Compose hub via ActivityResult. Fixes LineScore field mismatch (pressureConsistency → anglePrecision) caught during AL-009 build check. Adds .gitignore and handoff notes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4.0 KiB
4.0 KiB
ArtLegend Roadmap
Phase 0 — Foundation (current)
Goal: Hybrid architecture running end-to-end. Compose hub launches LibGDX game screen with stylus data flowing.
Milestones
- LibGDX scaffold (core + android modules)
shared/module withModuleTypeenumGameHostrouting byModuleTypeStylusInputBridge(AtomicReference, thread-safe)StylusFramedata class (x, y, pressure, tiltRad, orientRad, isStylus)MainActivity+ Compose navigation (Hub → Detail → Game)GameActivityreadsModuleTypefrom Intent, posts stylus framesLineCorridorScreenrenders guided corridor + real-time stroke- Score calculation for Line Corridor (straightness + pressure consistency)
- Score displayed on return to ModuleDetail (ScoreCard)
Phase 1 — Line Corridor MVP
Goal: Shippable first module. Players can train, score, and see improvement over sessions.
Milestones
- Corridor generation (random angle, configurable width)
- Stroke capture and rendering (LibGDX ShapeRenderer)
- Straightness score algorithm (RMS deviation from ideal line)
- Pressure consistency score (variance from target pressure profile)
- Difficulty progression (narrowing corridor, longer strokes)
- Session summary screen (score + streak)
- Local persistence (Room or DataStore) for scores per session
- Progress screen populated with real data (last 7 sessions graph)
Phase 2 — Pressure Ramp Module
Goal: Second module ships. Shared infrastructure for module scoring is solid.
Milestones
- Pressure Ramp screen: draw a stroke matching a target pressure curve
- Pressure curve rendering (target vs actual overlay)
- DTW (Dynamic Time Warping) score for pressure curve matching
- Unified
ModuleScoredata model shared across modules - Difficulty tiers (linear ramp → S-curve → arbitrary profile)
Phase 3 — Curve Sculptor + Vector Snap
Goal: Full 4-module training suite. App is content-complete for v1.0.
Milestones
- Curve Sculptor: hit bezier control points with stylus
- Vector Snap: tap precise endpoints within tolerance radius
- Per-module difficulty levels stored in settings
- Global XP system across all modules
Phase 4 — Monetization Ready
Goal: In-app purchase infrastructure. Free tier vs paid modules enforced.
Milestones
- Google Play Billing integration
- Entitlement check before launching
GameActivity - "Line Corridor" free; others gated behind Skill Pack purchase
- Pro subscription tier (all modules + cloud sync)
- Settings screen: manage subscription, restore purchases
Phase 5 — Cloud + Social
Goal: Cross-device sync and community features.
Milestones
- Firebase Auth (Google sign-in)
- Firestore sync for scores and progress
- Global leaderboard per module
- Weekly challenge mode (fixed seed corridor, global rank)
- Share score card (image export)
Per-Module Milestones Detail
Line Corridor
| Milestone | Description |
|---|---|
| Skeleton | Screen renders, bridge connected |
| Corridor | Guided corridor drawn, stroke captured |
| Score | Straightness + pressure score calculated |
| Persist | Scores saved locally |
| Polish | Animations, streak counter, SFX |
Pressure Ramp
| Milestone | Description |
|---|---|
| Skeleton | Screen renders |
| Curve target | Target pressure profile displayed |
| Score | DTW score vs target |
| Difficulty | 3 difficulty tiers |
Curve Sculptor
| Milestone | Description |
|---|---|
| Skeleton | Screen renders |
| Bezier display | Target bezier curve shown |
| Stroke eval | How close did the stroke follow the curve? |
| Control points | Optional control point hints |
Vector Snap
| Milestone | Description |
|---|---|
| Skeleton | Screen renders |
| Target points | Random endpoint targets displayed |
| Hit detection | Distance from target scored |
| Speed bonus | Faster accurate taps = higher score |