- Upgrade audio system from deprecated Sound API to AudioEngineV2
- Use CreateAudioEngineAsync() for audio engine initialization
- Replace new Sound() with createSoundAsync() throughout codebase
- Track sound playing state manually (StaticSound lacks isPlaying)
- Use volume property instead of setVolume() method
- Use stop() instead of pause() for proper StaticSound lifecycle
- Fix controller detection for Meta Quest 2
- Check for already-connected controllers after entering XR mode
- Fixes issue where Quest 2 controllers only become available after enterXRAsync()
- Maintains backward compatibility with WebXR emulator
- Improve initialization performance
- Move RockFactory.init() to main initialization (before level select)
- Pre-load asteroid meshes and explosion particle systems on startup
- Level initialization now only creates asteroids, not resources
- Refactor level initialization flow
- Level creation now happens before entering XR mode
- Add level ready observable to track initialization completion
- Show loading messages during asteroid creation
- Extract loading message logic to separate module
- Add audio unlock on user interaction (button click)
- Make play() methods async to support AudioEngineV2
- Pass AudioEngineV2 instance to Ship and Level1 constructors
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>