- Create centralized logger module (src/core/logger.ts)
- Replace all debugLog() calls with log.debug()
- Replace console.log() with log.info()
- Replace console.warn() with log.warn()
- Replace console.error() with log.error()
- Delete deprecated src/core/debug.ts
- Configure log levels: debug for dev, warn for production
- Add localStorage override for production debugging
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Made 75+ types internal (removed export keyword) across 24 files:
- Analytics event types (kept GameEventMap, GameEventName, GameEventProperties)
- Level config types (QuaternionArray, MaterialConfig, etc.)
- Ship types (SightConfig, InputState, etc.)
- Store state types (AuthState, GameConfigData, etc.)
- Various config interfaces
These types are still used internally but were never imported elsewhere.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added stateKey field to VoiceMessage interface to explicitly link messages
with warning states, preventing infinite repeat loops.
Bug fixes:
- Messages check warning state exists before re-queuing
- clearWarningState() now purges matching messages from queue
- Proper cleanup when resources increase above thresholds
Changes to voiceAudioSystem.ts:
- VoiceMessage interface: Added stateKey field
- queueMessage(): Added stateKey parameter
- handleStatusChange(): Pass state keys when queueing warnings
- update(): Validate state exists before re-queuing repeating messages
- clearWarningState(): Filter queue to remove messages with matching stateKey
Also includes explosion audio improvements:
- Use onEndedObservable instead of setTimeout for audio cleanup
- Adjusted explosion force and duration parameters
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Moved explosion audio management from RockFactory to ExplosionManager for better separation of concerns and synchronized audio/visual effects.
Changes:
- ExplosionManager: Added audio support with sound pooling (5 instances)
- New initAudio() method to load explosion sounds after audio unlock
- Sound pool prevents concurrent explosion conflicts
- Spatial audio synchronized with visual duration (1000ms)
- Proper SoundState checking for available sounds
- RockFactory: Simplified by delegating audio to ExplosionManager
- Removed _explosionSound and _audioEngine properties
- initAudio() now delegates to ExplosionManager
- Collision callback reduced from ~60 to ~30 lines
- Fixed disposal order to prevent double-disposal errors
Benefits:
- Fixes concurrent explosion sound bug (multiple asteroids can explode simultaneously)
- Audio/visual timing synchronized (both use config.duration)
- Cleaner code organization (all explosion effects in one place)
- Proper disposal ordering prevents runtime errors
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>