124 lines
4.0 KiB
Markdown
124 lines
4.0 KiB
Markdown
|
|
# ArtLegend Roadmap
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Phase 0 — Foundation (current)
|
||
|
|
|
||
|
|
**Goal:** Hybrid architecture running end-to-end. Compose hub launches LibGDX game screen with stylus data flowing.
|
||
|
|
|
||
|
|
### Milestones
|
||
|
|
- [x] LibGDX scaffold (core + android modules)
|
||
|
|
- [x] `shared/` module with `ModuleType` enum
|
||
|
|
- [x] `GameHost` routing by `ModuleType`
|
||
|
|
- [x] `StylusInputBridge` (AtomicReference, thread-safe)
|
||
|
|
- [x] `StylusFrame` data class (x, y, pressure, tiltRad, orientRad, isStylus)
|
||
|
|
- [x] `MainActivity` + Compose navigation (Hub → Detail → Game)
|
||
|
|
- [x] `GameActivity` reads `ModuleType` from Intent, posts stylus frames
|
||
|
|
- [x] `LineCorridorScreen` renders guided corridor + real-time stroke
|
||
|
|
- [x] Score calculation for Line Corridor (straightness + pressure consistency)
|
||
|
|
- [x] 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 `ModuleScore` data 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 |
|