286 lines
9.3 KiB
Markdown
286 lines
9.3 KiB
Markdown
# Tetris Refactoring TODO List
|
|
|
|
## 🚀 Phase 1: Foundation (Week 1-2) - CRITICAL ✅ COMPLETED
|
|
|
|
### Core Architecture Setup
|
|
|
|
- [x] Create `ApplicationManager` class
|
|
- [x] Design interface and basic structure
|
|
- [x] Implement initialize(), run(), shutdown() methods
|
|
- [x] Move SDL initialization from main() to ApplicationManager
|
|
- [x] Add proper error handling and cleanup
|
|
- [x] Test basic application lifecycle
|
|
|
|
- [x] Extract `RenderManager` class
|
|
- [x] Create rendering abstraction layer
|
|
- [x] Move SDL_Window and SDL_Renderer management
|
|
- [x] Implement viewport and scaling logic
|
|
- [x] Add texture and primitive rendering methods
|
|
- [x] Test rendering pipeline isolation
|
|
|
|
- [x] Implement basic `StateManager` improvements
|
|
- [x] Enhance current StateManager with stack support
|
|
- [x] Add state validation and error handling
|
|
- [x] Implement proper state lifecycle management
|
|
- [x] Test state transitions thoroughly
|
|
|
|
**✅ MILESTONE ACHIEVED**: Core architecture foundation is complete! We now have:
|
|
- Clean separation between main() and application logic
|
|
- Abstracted rendering system
|
|
- Enhanced state management with proper lifecycle
|
|
- Working refactored application (`tetris_refactored.exe`) alongside original
|
|
- Proper error handling and logging throughout
|
|
|
|
### Immediate Code Cleanup
|
|
- [ ] Remove global variables from main.cpp
|
|
- [ ] Move static variables to appropriate managers
|
|
- [ ] Remove global texture and font variables
|
|
- [ ] Eliminate global state flags
|
|
- [ ] Clean up static function declarations
|
|
|
|
- [ ] Extract constants to configuration
|
|
- [ ] Create Config namespace with all constants
|
|
- [ ] Remove magic numbers from main.cpp
|
|
- [ ] Define window size constants
|
|
- [ ] Set up gameplay timing constants
|
|
|
|
## 🔧 Phase 2: Core Systems (Week 3-4) - HIGH PRIORITY
|
|
|
|
### Input Management
|
|
- [x] Create `InputManager` class
|
|
- [x] Implement keyboard state tracking
|
|
- [x] Add mouse input handling
|
|
- [x] Create event handler registration system
|
|
- [x] Implement DAS/ARR logic in InputManager
|
|
- [x] Test input responsiveness and accuracy
|
|
|
|
- [x] Refactor event handling in main()
|
|
- [x] Move SDL event polling to InputManager
|
|
- [x] Replace inline event handlers with registered callbacks
|
|
- [x] Simplify main loop event processing
|
|
- [x] Test all input scenarios (keyboard, mouse, gamepad)
|
|
|
|
### Asset Management
|
|
- [ ] Create `AssetManager` class
|
|
- [ ] Design resource loading interface
|
|
- [ ] Implement texture management
|
|
- [ ] Add font loading and management
|
|
- [ ] Create sound asset handling
|
|
- [ ] Add resource cleanup and error handling
|
|
|
|
- [ ] Migrate existing asset loading
|
|
- [ ] Move texture loading from main() to AssetManager
|
|
- [ ] Convert font initialization to use AssetManager
|
|
- [ ] Update StateContext to use AssetManager
|
|
- [ ] Test asset loading and memory management
|
|
|
|
### State System Enhancement
|
|
- [ ] Implement `IGameState` interface
|
|
- [ ] Define clear state contract
|
|
- [ ] Add update(), render(), handleEvent() methods
|
|
- [ ] Implement proper state lifecycle
|
|
- [ ] Add state type identification
|
|
|
|
- [ ] Create `StateFactory` pattern
|
|
- [ ] Design state creation interface
|
|
- [ ] Implement factory registration system
|
|
- [ ] Add state parameter passing
|
|
- [ ] Test dynamic state creation
|
|
|
|
## 🎨 Phase 3: Rendering Systems (Week 5-6) - MEDIUM PRIORITY
|
|
|
|
### UI Rendering Separation
|
|
- [ ] Create `UIRenderer` class
|
|
- [ ] Extract button rendering logic
|
|
- [ ] Implement popup rendering system
|
|
- [ ] Add progress bar rendering
|
|
- [ ] Create menu rendering components
|
|
- [ ] Test UI rendering consistency
|
|
|
|
- [ ] Refactor state rendering
|
|
- [ ] Update LoadingState to use UIRenderer
|
|
- [ ] Modify MenuState rendering
|
|
- [ ] Enhance LevelSelectorState visuals
|
|
- [ ] Test all state rendering paths
|
|
|
|
### Game Rendering Optimization
|
|
- [ ] Create `GameRenderer` class
|
|
- [ ] Extract game board rendering
|
|
- [ ] Implement piece rendering system
|
|
- [ ] Add background management
|
|
- [ ] Create HUD rendering components
|
|
- [ ] Optimize rendering performance
|
|
|
|
- [ ] Enhance visual effects
|
|
- [ ] Improve line clearing effects
|
|
- [ ] Add piece drop animations
|
|
- [ ] Enhance particle systems
|
|
- [ ] Implement screen transitions
|
|
|
|
### Background System
|
|
- [ ] Create `BackgroundManager` class
|
|
- [ ] Implement level-based backgrounds
|
|
- [ ] Add background caching system
|
|
- [ ] Create smooth transitions
|
|
- [ ] Test background loading performance
|
|
|
|
## ⚙️ Phase 4: Configuration (Week 7) - MEDIUM PRIORITY
|
|
|
|
### Configuration System
|
|
- [ ] Implement `ConfigManager` class
|
|
- [ ] Design configuration storage
|
|
- [ ] Add file loading/saving
|
|
- [ ] Implement runtime configuration updates
|
|
- [ ] Add configuration validation
|
|
- [ ] Test configuration persistence
|
|
|
|
- [ ] Migrate constants
|
|
- [ ] Move window size settings
|
|
- [ ] Convert gameplay constants
|
|
- [ ] Update UI layout values
|
|
- [ ] Set up default configurations
|
|
|
|
### Settings Management
|
|
- [ ] Create settings persistence
|
|
- [ ] Save audio preferences
|
|
- [ ] Store control mappings
|
|
- [ ] Remember window settings
|
|
- [ ] Test settings across restarts
|
|
|
|
## 📡 Phase 5: Event System (Week 8) - MEDIUM PRIORITY
|
|
|
|
### Event Bus Implementation
|
|
- [ ] Create `EventBus` template class
|
|
- [ ] Implement subscription system
|
|
- [ ] Add event publishing mechanism
|
|
- [ ] Create handler management
|
|
- [ ] Test event delivery reliability
|
|
|
|
- [ ] Define Game Events
|
|
- [ ] Create LevelUp event
|
|
- [ ] Implement LineCleared event
|
|
- [ ] Add GameOver event
|
|
- [ ] Define PieceSpawned event
|
|
- [ ] Test event system integration
|
|
|
|
### Audio System Decoupling
|
|
- [ ] Convert audio callbacks to events
|
|
- [ ] Replace sound callbacks with event handlers
|
|
- [ ] Implement music management events
|
|
- [ ] Add audio configuration events
|
|
- [ ] Test audio system responsiveness
|
|
|
|
## 🔌 Phase 6: Dependency Injection (Week 9) - LOW PRIORITY
|
|
|
|
### Service Container
|
|
- [ ] Implement `ServiceContainer` class
|
|
- [ ] Design service registration
|
|
- [ ] Add dependency resolution
|
|
- [ ] Implement service lifecycle
|
|
- [ ] Test service dependencies
|
|
|
|
- [ ] Migrate to dependency injection
|
|
- [ ] Update manager constructors
|
|
- [ ] Implement service interfaces
|
|
- [ ] Add service configuration
|
|
- [ ] Test dependency resolution
|
|
|
|
## 🧪 Phase 7: Testing & Quality (Week 10) - LOW PRIORITY
|
|
|
|
### Unit Testing Setup
|
|
- [ ] Set up testing framework
|
|
- [ ] Configure Google Test or Catch2
|
|
- [ ] Create test project structure
|
|
- [ ] Add basic test utilities
|
|
- [ ] Set up automated test running
|
|
|
|
- [ ] Write core tests
|
|
- [ ] Test ApplicationManager lifecycle
|
|
- [ ] Validate StateManager transitions
|
|
- [ ] Test InputManager functionality
|
|
- [ ] Verify AssetManager operations
|
|
- [ ] Test ConfigManager persistence
|
|
|
|
### Integration Testing
|
|
- [ ] Create integration test suite
|
|
- [ ] Test manager interactions
|
|
- [ ] Validate state transitions
|
|
- [ ] Test complete game scenarios
|
|
- [ ] Run performance regression tests
|
|
|
|
### Code Quality
|
|
- [ ] Add static analysis
|
|
- [ ] Configure clang-tidy
|
|
- [ ] Set up cppcheck
|
|
- [ ] Add memory leak detection
|
|
- [ ] Run code coverage analysis
|
|
|
|
## 🔧 Optimization Tasks - ONGOING
|
|
|
|
### Performance Optimization
|
|
- [ ] Profile rendering performance
|
|
- [ ] Identify rendering bottlenecks
|
|
- [ ] Optimize texture usage
|
|
- [ ] Improve draw call batching
|
|
- [ ] Test frame rate consistency
|
|
|
|
- [ ] Memory optimization
|
|
- [ ] Analyze memory usage patterns
|
|
- [ ] Optimize asset loading
|
|
- [ ] Implement memory pooling where needed
|
|
- [ ] Test for memory leaks
|
|
|
|
### Code Quality Improvements
|
|
- [ ] Documentation
|
|
- [ ] Add comprehensive class documentation
|
|
- [ ] Document API interfaces
|
|
- [ ] Create usage examples
|
|
- [ ] Write development guidelines
|
|
|
|
- [ ] Error Handling
|
|
- [ ] Implement consistent error handling
|
|
- [ ] Add logging system
|
|
- [ ] Create error recovery mechanisms
|
|
- [ ] Test error scenarios
|
|
|
|
### Platform Compatibility
|
|
- [ ] Cross-platform testing
|
|
- [ ] Test on Windows
|
|
- [ ] Validate Linux compatibility
|
|
- [ ] Check macOS support
|
|
- [ ] Test different screen resolutions
|
|
|
|
## 📊 Progress Tracking
|
|
|
|
### Metrics to Monitor
|
|
- [ ] **Code Complexity**: Reduce main() from 1,678 to <100 lines
|
|
- [ ] **Test Coverage**: Achieve >90% code coverage
|
|
- [ ] **Build Time**: Maintain fast compilation
|
|
- [ ] **Performance**: No regression in frame rate
|
|
- [ ] **Memory Usage**: Stable memory consumption
|
|
|
|
### Milestones
|
|
- [ ] **Milestone 1**: Basic managers extracted and working
|
|
- [ ] **Milestone 2**: State system fully refactored
|
|
- [ ] **Milestone 3**: Rendering system modularized
|
|
- [ ] **Milestone 4**: Configuration system implemented
|
|
- [ ] **Milestone 5**: Event system integrated
|
|
- [ ] **Milestone 6**: All tests passing, full documentation
|
|
|
|
### Success Criteria
|
|
- [ ] Main function reduced to application setup only
|
|
- [ ] All components unit testable
|
|
- [ ] Easy to add new features without modifying core code
|
|
- [ ] Clear separation of concerns throughout codebase
|
|
- [ ] Comprehensive documentation and examples
|
|
|
|
---
|
|
|
|
## 📝 Notes
|
|
|
|
- **Priority levels**: CRITICAL = Must complete, HIGH = Important for maintainability, MEDIUM = Quality improvements, LOW = Nice to have
|
|
- **Estimated timeline**: 10 weeks for complete refactoring
|
|
- **Risk mitigation**: Each phase should maintain working application
|
|
- **Testing strategy**: Test after each major change to ensure no regressions
|
|
- **Documentation**: Update as you go, don't leave it for the end
|