- Switch from svelte-spa-router to svelte-routing for clean URLs without hashes
- Fix relative asset paths to absolute paths (prevents 404s on nested routes)
- Fix physics engine disposal using scene.disablePhysicsEngine()
- Fix Ship observer cleanup to prevent stale callbacks after level disposal
- Add _gameplayStarted flag to prevent false game-end triggers during init
- Add hasAsteroidsToDestroy check to prevent false victory on restart
- Add RockFactory.reset() to properly reinitialize asteroid mesh between games
- Add null safety checks throughout RockFactory for static properties
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major refactoring of the UI layer to use Svelte components:
- Replace inline HTML with modular Svelte components
- Add authentication system with UserProfile component
- Implement navigation store for view management
- Create comprehensive settings and controls screens
- Add level editor with JSON validation
- Implement progression tracking system
- Update level configurations and base station model
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major Changes:
- Fix Level1 double initialization by deferring initialize() call
- Removed initialize() from Level1 constructor
- Main.ts now explicitly calls initialize() after registering ready observable
- Added error logging for double initialization detection
- Refactor Ship to use loadAsset utility and new GLB structure
- Changed from SceneLoader.ImportMeshAsync to loadAsset pattern
- Ship constructor no longer calls initialize() - must be called explicitly
- Updated physics to use transformNode from GLB container
- Adjusted control mappings for yaw/pitch/roll (inverted signs)
- Reduced force multipliers for better control feel
- Remove MaterialFactory pattern
- Deleted src/materialFactory.ts
- LevelDeserializer now creates PBRMaterial directly for planets/sun
- Removed texture quality settings from gameConfig
- Cleaned up settings UI to remove texture quality controls
- Fix UI element hiding when entering VR
- Editor and Settings links now properly hidden on level start
- Update GLB models for new asset structure
- Updated ship.glb and base.glb models
- Modified loadAsset to work with container transformNodes
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
## Blender Export Utilities
- Add blenderExporter utility with ESM support (tsx)
- Create CLI script for exporting .blend files to GLB
- Add npm scripts: export-blend, export-blend:watch, export-blend:batch
- Support watch mode, batch export, and Draco compression
- Complete documentation in docs/BLENDER_EXPORT.md
- Add loadAsset utility helper
## Asset Structure Reorganization
- Move models to themeable structure: public/assets/themes/default/models/
- Add themes/ directory with source .blend files
- Remove old model files from public/ root
- Consolidate to asteroid.glb, base.glb, ship.glb
## Level Configuration Improvements
- Make startBase optional in LevelConfig interface
- Update LevelGenerator to not generate startBase data by default
- Update LevelDeserializer to handle optional startBase
- Update Level1 to handle null startBase
- Fix levelEditor to remove startBase generation references
- Update validation to treat startBase as optional
## Dependencies
- Add tsx for ESM TypeScript execution
- Add @types/node for Node.js types
- Update package-lock.json
This enables modding support with themeable assets and simplifies
level generation by making base stations optional.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>