Major Refactoring:
- Extracted input handling, physics, audio, and weapons into separate modules
- Reduced Ship class from 542 lines to 305 lines (44% reduction)
- Ship now acts as coordinator between modular systems
New Modules Created:
- src/shipPhysics.ts - Pure force calculation and application logic
- No external dependencies, fully testable in isolation
- Handles linear/angular forces with velocity caps
- Returns force magnitudes for audio feedback
- src/keyboardInput.ts - Keyboard and mouse input handling
- Combines both input methods in unified interface
- Exposes observables for shoot and camera change events
- Clean getInputState() API
- src/controllerInput.ts - VR controller input handling
- Maps WebXR controllers to input state
- Handles thumbstick and button events
- Observables for shooting and camera adjustments
- src/shipAudio.ts - Audio management system
- Manages thrust sounds (primary and secondary)
- Weapon fire sounds
- Dynamic volume based on force magnitudes
- src/weaponSystem.ts - Projectile creation and lifecycle
- Creates and manages ammo instances
- Physics setup for projectiles
- Auto-disposal timer
Ship Class Changes:
- Removed all input handling code (keyboard, mouse, VR)
- Removed force calculation logic
- Removed audio management code
- Removed weapon creation code
- Now wires up modular systems via observables
- Maintains same external API (backward compatible)
Material Improvements:
- Updated planet materials to use emissive texture
- Enhanced sun material with better color settings
- Set planets to unlit mode for better performance
Benefits:
- Each system independently testable
- Clear separation of concerns
- Easier to maintain and extend
- Better code organization
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>