Commit Graph
14 Commits
Author SHA1 Message Date
pastilhas 0749aba648 refactor: separate score calculation from score management
BREAKING CHANGES:
- Remove timeLimit from GameOptions (use gameOver function instead)
- Remove finalScore from ScoreManager (pure data collection only)
- Remove rows/cols parameters from useScore
- Remove finalScore calculation logic from useScore hook

ADDITIONS:
- Create calculateMazeScore() utility function
- ScoreManager now only returns raw metrics: timeValue, keystrokes, optimalSteps, efficiency, distToKey, distToExit
- Score calculation moved to consumer (calculateMazeScore takes scoreManager + mazeSize)
- Example app now uses calculateMazeScore to compute final score on game-won

BENEFITS:
- ScoreManager is now a pure data collector with no side effects
- Scoring algorithm is reusable and testable in isolation
- Game-over conditions fully controlled via gameOver option
- Clear separation of concerns: collection vs calculation
2025-11-02 17:04:21 +00:00
pastilhas 060c8abb24 feat: add custom gameOver condition to GameOptions
- Add optional gameOver field to GameOptions
- Can be a boolean value or a function that receives scoreManager
- Function receives current score metrics to make dynamic decisions
- Enables flexible game-over conditions beyond just time limit
- Example: gameOver: (sm) => sm.efficiency > 150 for efficiency threshold
- Checked every frame during 'started' and 'has-key' states
2025-11-02 17:01:53 +00:00
pastilhas 7800acaf56 feat: add timeLimit option and time-based game-over logic
- Add timeLimit to GameOptions (default 600 seconds)
- Game-over triggers when time limit exceeded
- Remove all efficiency-based game-over logic
- Pass timeLimit through to useScore
- Check time limit during started and has-key states
2025-10-22 22:07:59 +01:00
pastilhas a69b7bbb5f organized types 2025-10-19 16:11:38 +01:00
pastilhas 252027dab2 no more ReturnType<typeof> 2025-10-19 15:55:52 +01:00
pastilhas a6f066d738 scoreManager implemented flawlessly 2025-10-19 15:29:01 +01:00
pastilhas 07f218f4dd 0 works both ways now 2025-10-19 15:09:41 +01:00
pastilhas 70a8167fb0 refactor: implement clean architecture with separation of concerns
- Add useMazeNavigation for pure maze geometry and path validation
- Add useVimMotions for pure Vim-style input parsing
- Add useAnimation for pure movement animation system
- Refactor useCursor to use specialized hooks with cleaner interface
- Refactor useHero to pure game logic without DOM manipulation
- Refactor useHeroRender to pure visual presentation layer
- Fix dual position system - hero position now authoritative
- Replace global events with callback props and return values
- Implement state-driven rendering instead of direct DOM queries
- Update GameManager interface with new HeroManager and HeroRenderer
- Maintain backward compatibility with legacy Cursor type
- Update UNIFIED_API.md with new architecture and interfaces
2025-10-19 13:27:35 +01:00
pastilhas 2c7816306c fix: rename GameStatus 'hasKey' to 'has-key'
- Update GameStatus type to use kebab-case convention
- Change all occurrences in useHero.ts
- Update UNIFIED_API.md documentation
- Maintains consistency with other status values
2025-10-19 13:05:35 +01:00
pastilhas 7c36f9dc14 refactor: integrate key management into cursor module
- Move useKeyBindings functionality into useCursor as useGameKeys
- Flatten GameManager interface using intersection types
- Rename clearLog/getLog to clearKeyLog/getKeyLog for clarity
- Remove separate useKeyBindings module and exports
- Update all documentation to reflect new architecture
- Maintain backward compatibility for platform hooks
2025-10-19 12:56:35 +01:00
pastilhas 6108640267 useGame=>useCursor=>useHero=>useHeroRender 2025-10-19 03:01:22 +01:00
pastilhas 4db86e1cfe working on unified API and major refactoring 2025-10-19 01:48:20 +01:00
pastilhas ee58ab25fb working on refactor 2025-10-17 03:07:07 +01:00
pastilhas c8eb84ce7e first 2025-10-14 13:33:51 +01:00