Commit Graph

47 Commits

Author SHA1 Message Date
2e1c8ad725 Fix inspector 'i' key registration in KeyboardInput
Problem:
- main.ts registered inspector with window.addEventListener
- keyboardInput.ts used document.onkeydown which replaces event handler
- This caused the inspector key binding to be overridden

Solution:
- Moved inspector 'i' key handling into KeyboardInput class
- Removed duplicate setupInspector() method from main.ts
- Inspector now opens correctly when 'i' is pressed

Changes:
- src/keyboardInput.ts: Added 'i' key case to open Babylon Inspector
- src/main.ts: Removed setupInspector() method (no longer needed)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 13:07:15 -06:00
0988805652 Make ship physics constants configurable via GameConfig with UI
All checks were successful
Build / build (push) Successful in 1m14s
Implemented Option 5: Integrate ship physics constants into centralized GameConfig

Changes to gameConfig.ts:
- Added shipPhysics object with 4 tunable parameters:
  - maxLinearVelocity (default: 200)
  - maxAngularVelocity (default: 1.4)
  - linearForceMultiplier (default: 800)
  - angularForceMultiplier (default: 15)
- Updated save() to persist shipPhysics to localStorage
- Updated loadFromStorage() to load shipPhysics with fallback defaults
- Updated reset() to restore shipPhysics defaults

Changes to shipPhysics.ts:
- Removed hardcoded constants
- Added GameConfig import
- Updated applyForces() to read values from GameConfig.getInstance().shipPhysics
- Now reads physics parameters dynamically at runtime

Changes to index.html:
- Added Ship Physics section in Settings UI
- 4 number inputs with appropriate min/max/step values
- Help text explaining each parameter's effect on ship handling
- Section positioned after Developer settings

Changes to settingsScreen.ts:
- Added input element references for ship physics controls
- Updated loadSettings() to populate ship physics inputs from config
- Updated saveSettings() to save ship physics values to config
- Values persist across sessions via localStorage

Benefits:
- Ship physics now tunable in real-time via settings UI
- Parameters persist across sessions
- Easy to reset to defaults
- Centralized configuration management
- No need to edit code to adjust ship handling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 13:05:27 -06:00
72573054dd Refactor Ship class into modular components
All checks were successful
Build / build (push) Successful in 1m21s
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>
2025-11-07 12:48:17 -06:00
30e51ba57a Add local controller profiles and disable online repository
All checks were successful
Build / build (push) Successful in 1m19s
- Add profilesList.json with all XR controller profiles for offline use
- Disable online controller repository in ControllerDebug for faster loading
- Includes profiles for Meta Quest, Valve Index, HTC Vive, Pico, and others

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 11:31:13 -06:00
20dfc238f8 Fix level double initialization and refactor ship physics
All checks were successful
Build / build (push) Successful in 1m20s
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>
2025-11-07 11:16:50 -06:00
146ffccd3d Add Blender export tooling and refactor asset structure
All checks were successful
Build / build (push) Successful in 1m18s
## 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>
2025-11-06 12:25:34 -06:00
f11005fdb6 Refactor scoreboard to use GLB mesh and improve ship mechanics
All checks were successful
Build / build (push) Successful in 1m19s
- Move scoreboard ownership from Level1 to Ship class for better encapsulation
- Refactor scoreboard.initialize() to accept GLB submesh (Screen material mesh)
- Dispose original material when applying AdvancedDynamicTexture to mesh
- Change scoreboard background to green for visibility testing
- Increase ship velocities: MAX_LINEAR_VELOCITY to 200, LINEAR_FORCE_MULTIPLIER to 1200
- Adjust ammo spawn position (y: 0.5, z: 7.1) and velocity (200000)
- Update sight reticle position to match new ammo spawn point (y: 0.5)
- Fix sight circle rotation and rendering group assignment
- Update ship2.glb, ship1.glb, and base.glb models
- Comment out ship position override in level initialization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 13:41:17 -06:00
37128d8fbd Update gameplay mechanics, asteroid model, and star base physics
All checks were successful
Build / build (push) Successful in 1m18s
- Switch to asteroid4.glb model with updated material handling
- Adjust difficulty parameters: increased spawn distances (220-450m range), updated force multipliers, varied asteroid sizes
- Fix scoreboard timer display (was showing frames instead of actual seconds)
- Refactor star base to use asset container with mesh merging for better performance
- Change star base physics from STATIC to ANIMATED with collision detection enabled
- Add directional lighting in level deserializer for improved scene lighting
- Clean up commented code and optimize debug logging
- Update base.glb 3D model

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 12:26:25 -06:00
3e36662031 Refactor start base to use GLB model instead of procedural geometry
All checks were successful
Build / build (push) Successful in 1m20s
- Create buildStarBase function in src/starBase.ts
- Load base.glb model asynchronously with SceneLoader
- Extract child mesh from imported model similar to ship implementation
- Pass position parameter to buildStarBase function
- Update levelDeserializer to call buildStarBase instead of creating cylinder
- Add static physics body with MESH shape for proper collision
- Add debug logging for base mesh loading and bounds
- Remove inline cylinder creation code from createStartBase

The start base now uses a proper 3D model instead of a simple cylinder,
providing better visual quality and more accurate collision detection.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-31 15:59:46 -05:00
b4608e10d8 Add centralized debug logging system with settings UI control
All checks were successful
Build / build (push) Successful in 1m16s
- Create debugLog wrapper function in src/debug.ts
- Add debug checkbox to settings screen UI
- Replace all console.log statements with debugLog calls (153 replacements)
- Add debug flag to GameConfig with localStorage persistence
- Fix GameConfig to properly load and reset debug setting
- Preserve console.error and console.warn calls unchanged
- Add Developer section to settings screen with debug toggle
- Enable/disable all debug logging via settings UI checkbox

Debug logging can now be controlled from Settings > Developer section,
reducing console noise in production while maintaining full debugging
capability during development.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-31 14:44:09 -05:00
c21bd93c72 Refactor ship controls to force-based physics with world-space transformations
All checks were successful
Build / build (push) Successful in 1m16s
- Replace accumulated velocity approach with direct force application
- Transform local direction vectors to world space before applying forces
- Fix explosion animation to use Babylon's render loop instead of requestAnimationFrame
- Simplify Ship constructor and remove ControllerStickMode enum
- Comment out all renderingGroupId assignments for performance testing
- Add comprehensive CONTROLLER_THRUST.md documentation
- Fix audio engine initialization in Level1
- Update to ship2.glb model
- Adjust physics damping values for better control feel
- Add applyForces() calls to keyboard and mouse handlers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-31 11:20:31 -05:00
72bd25b686 Add minimal test level with performance metrics and extensive debug logging
Some checks failed
Build / build (push) Failing after 23s
Added TestLevel class for debugging with progressive box creation and performance tracking. Includes comprehensive debug logging throughout the explosion system to diagnose Meta Quest issues.

Key changes:
- New TestLevel with 1-1000 box spawning (doubling each 5s iteration)
- Performance metrics logging (FPS, triangle count, mesh count)
- Direct triangle computation from mesh geometry
- Extensive explosion system debug logging
- Fixed observable timing issue (initialize after listener registration)
- Material freezing optimization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 16:33:45 -05:00
db72847ce6 Add controls information and fix TypeScript build errors
All checks were successful
Build / build (push) Successful in 1m20s
Added "How to Play" section to landing page:
- VR controls: left/right thumbsticks for movement and rotation, front trigger to fire
- Desktop controls: WSAD for movement/yaw, arrow keys for pitch, space to fire
- Warning note that game is designed for VR with desktop as preview mode
- Styled with color-coded sections and responsive design
- Added overflow scroll to main div for better mobile experience

Fixed TypeScript build errors:
- Cast canvas context to CanvasRenderingContext2D in sphereLightmap.ts
- Resolved createImageData type errors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 12:25:01 -05:00
1a381ec47d Refactor explosion system to use MeshExploder with animated debris
Some checks failed
Build / build (push) Failing after 19s
Completely rewrote explosion system to use BabylonJS MeshExploder instead of particle systems for more dramatic and visible explosions.

- Replace particle system pooling with MeshExploder approach
- Create 12 sphere debris pieces that explode outward
- Animate explosion force from 0 to 15 over 500ms
- Animate debris scaling from 1.0 to 0.0 (shrink to nothing)
- Use requestAnimationFrame for smooth 60fps animation
- Pass asteroid mesh to ExplosionManager instead of position/scaling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 12:02:00 -05:00
bf5d33e1cb Extract explosion logic to ExplosionManager class
Some checks failed
Build / build (push) Failing after 25s
Refactored explosion particle system management from RockFactory to a dedicated ExplosionManager class for better code organization and reusability.

- Created ExplosionManager with particle system pooling
- Removed explosion-specific code from RockFactory
- Simplified collision handler in RockFactory

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 10:29:56 -05:00
cb96b4ea6c Refactor sight to crosshair reticle and rename starfield to rockFactory
Some checks failed
Build / build (push) Failing after 19s
Created new Sight class:
- Crosshair design with circle, lines, and center dot
- Configurable radius, line length, thickness, and colors
- Green reticle color (traditional gun sight)
- Center gap and proper rendering group
- Dispose method for cleanup

Refactored Ship class:
- Replaced disc sight with new Sight class
- Changed ammo mesh to IcoSphere for better performance
- Added dispose method to clean up sight resources
- Integrated sight with configuration options

Renamed starfield.ts to rockFactory.ts:
- Better reflects the class purpose (RockFactory)
- Updated all imports across codebase
- Updated CLAUDE.md documentation

Updated asteroid model:
- Changed from asteroid2.glb to asteroid3.glb
- Added new asteroid3.blend and asteroid3.glb assets

Fixed background stars material:
- Added proper material type casting for StandardMaterial
- Fixed emissiveColor setting

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 10:21:27 -05:00
9df64b7dd9 Add background starfield and fix scene background color
Some checks failed
Build / build (push) Failing after 19s
Created BackgroundStars class using PointCloudSystem:
- 5000 stars distributed uniformly on sphere surface
- Multiple star colors (white, warm, cool, yellowish, bluish)
- Varied brightness (0.3-1.0) for depth perception
- Follows camera position to maintain infinite distance effect
- Efficient rendering with disabled lighting and depth write

Integrated starfield into Level1:
- Created during level initialization
- Camera follow in render loop
- Proper disposal on level cleanup

Fixed XR background color:
- Set scene clearColor to pure black (was default grey)
- Adjusted ambientColor to black for space environment

Removed GlowLayer from ship and engines:
- Cleaned up unused glow effects
- Prevents unwanted glow on background stars

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 09:37:30 -05:00
db970ecc8a Add settings screen with graphics quality and physics controls
Some checks failed
Build / build (push) Failing after 19s
Created dedicated settings route and screen for game configuration:
- Settings UI with quality level dropdowns for planets, asteroids, and sun
- Physics enable/disable toggle
- Save and reset to defaults functionality
- localStorage persistence with feedback messages

Added settings navigation:
- Blue settings link button in game view header
- Integrated with existing hash-based router
- Back navigation to main menu

Settings features:
- Four texture quality levels: WIREFRAME, SIMPLE_MATERIAL, FULL_TEXTURE, PBR_TEXTURE
- Physics toggle for performance optimization
- Quality level guide with explanations
- Persistent settings across sessions
- Visual feedback on save/reset actions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 09:11:56 -05:00
181a427875 Add GameConfig system with texture quality levels and physics toggle
Some checks failed
Build / build (push) Failing after 18s
Created GameConfig singleton class with localStorage persistence for game settings:
- Texture quality levels: WIREFRAME, SIMPLE_MATERIAL, FULL_TEXTURE, PBR_TEXTURE
- Physics enable/disable toggle for performance optimization

Created MaterialFactory for quality-level-based material generation:
- Planet materials with dynamic sun-oriented lightmaps
- Asteroid materials preserving GLB bump textures
- Sun materials with procedural fire textures

Integrated GameConfig throughout game entities:
- Conditional physics creation in asteroids, ship, start base
- Material creation respects texture quality settings
- Physics constraints only applied when physics enabled

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 08:53:11 -05:00
03f170e150 Create mesh-based physics for ship and optimize planet geometry
Some checks failed
Build / build (push) Failing after 18s
- Update Ship class to use CONVEX_HULL physics from ship1.glb
  - Find geometry mesh from loaded GLB and create physics from it
  - Move physics creation to initialize() after mesh loads
  - Add fallback to BOX shape if mesh not found

- Fix ship position setter for async initialization
  - Add null check for physics body
  - Set transform position directly if body doesn't exist yet
  - Prevents crash when position set before mesh loads

- Optimize planet vertex count for performance
  - Reduce sphere segments from 32 to 12
  - ~144 vertices vs ~1024 vertices per planet
  - Planets are background objects, lower poly acceptable

- Update ship1.glb model

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 08:22:21 -05:00
a9054c2389 Add procedural lightmap system for planets and asteroids
Some checks failed
Build / build (push) Failing after 19s
- Create sphereLightmap.ts for procedural lighting generation
- Update planets to use lightmaps oriented toward sun
- Switch asteroids to PBR material with noise texture
- Use sphere physics shape for asteroids

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-29 17:30:02 -05:00
942c0a1af0 Distribute asteroids in 3D spherical pattern around base
Some checks failed
Build / build (push) Failing after 18s
- Use spherical coordinates (theta, phi) instead of circular (2D)
- Apply equal-area distribution formula for even spacing on sphere
- Convert spherical to Cartesian: (r, theta, phi) -> (x, y, z)
- Asteroids now surround player from all directions (above, below, around)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-29 08:46:54 -05:00
56488edd0b Fix scoreboard, improve asteroid distribution, and eliminate code duplication
Some checks failed
Build / build (push) Failing after 19s
- Fix scoreboard remaining count initialization
  - Add setRemainingCount() method to Scoreboard class
  - Initialize count once with total asteroids in Level1
  - Remove incorrect per-asteroid notifications from deserializer

- Distribute asteroids evenly around base in circular pattern
  - Calculate positions using angle: (i / total) * 2π
  - Add small random variation (±0.15 radians) for natural spacing
  - Set tangential velocities for orbital motion
  - Apply to both LevelGenerator and CustomLevelGenerator

- Eliminate code duplication in level generation
  - Convert LevelGenerator static constants to public instance properties
  - Remove ~130 lines of duplicated code from CustomLevelGenerator
  - CustomLevelGenerator now just inherits from base class
  - Net reduction: 99 lines of code

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-29 08:44:55 -05:00
12710b9a5c Add JSON-based level editor with localStorage persistence
Some checks failed
Build / build (push) Failing after 22s
- Create comprehensive level editor UI with real-time configuration
- Implement JSON schema validation for level configurations
- Add client-side routing for game/editor views
- Support manual JSON editing with validation feedback
- Auto-generate 4 default levels on first load
- Replace hardcoded difficulty presets with dynamic level system
- Add level serializer/deserializer for import/export workflow
- Enhance responsive design with high-contrast styling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-29 08:24:55 -05:00
bb3aabcf3e Refine gameplay balance and rendering performance
All checks were successful
Build / build (push) Successful in 1m16s
Adjust difficulty parameters to improve game progression, optimize rendering with proper layer assignments, increase projectile velocity for better responsiveness, and clean up visual effects rendering.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 16:58:13 -05:00
5f3fcf6bc0 Adjust lighting, physics, and visual settings for improved gameplay
All checks were successful
Build / build (push) Successful in 1m19s
Increase asteroid sizes, add ship-specific lighting, enhance sun brightness, adjust physics timesteps, and improve planet/asteroid material appearance. Increase planet count to 12 and move them farther from sun for better spatial layout.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 13:19:01 -05:00
44989d5145 increased heap space.
All checks were successful
Build / build (push) Successful in 1m18s
2025-10-28 12:01:29 -05:00
052d972e69 Optimize WebXR performance and add procedural planet generation
Some checks failed
Build / build (push) Failing after 4m43s
Enable multiview rendering in WebXR for improved framerate, remove expensive PhotoDome per-frame updates, and add planet generation system with 76 unique textures across 12 planet types.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 11:50:18 -05:00
57ffe8f689 Migrate to AudioEngineV2 and fix Meta Quest 2 controller detection
- 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>
2025-10-17 13:59:48 -05:00
d2aec0a87b Add difficulty levels and upgrade BabylonJS
Some checks failed
Build / build (push) Failing after 20s
Implemented a level selection system with 5 difficulty modes (Recruit, Pilot, Captain, Commander, Test), each with different asteroid counts, sizes, speeds, and constraints. Upgraded BabylonJS from 7.13.1 to 8.32.0 and fixed particle system animation compatibility issues.

- Add card-based level selection UI with 5 difficulty options
- Create difficulty configuration system in Level1
- Fix explosion particle animations for mesh emitters (emitter.y → emitter.position.y)
- Implement particle system pooling for improved explosion performance
- Upgrade @babylonjs packages to 8.32.0
- Fix audio engine unlock after Babylon upgrade
- Add test mode with 100 large, slow-moving asteroids
- Add styles.css for level selection cards with hover effects

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-17 09:05:18 -05:00
4d9b678f70 test new autodeploy feature.
All checks were successful
Build / build (push) Successful in 4m17s
2025-10-16 10:35:59 -05:00
843abdf4f1 update for autodeploy feature.
All checks were successful
Build / build (push) Successful in 2m12s
2025-10-16 10:31:54 -05:00
8f224f7350 update build.yml 2025-10-16 10:30:44 -05:00
81af267a29 updated workflow to deploy to nginx when build succeeds.
All checks were successful
Build / build (push) Successful in 5m5s
2025-10-16 09:46:09 -05:00
61baf82771 Updated Title
All checks were successful
Build / build (push) Successful in 2m48s
2025-10-16 09:26:57 -05:00
eea860e19c Increase Node.js heap size to 2GB for build process.
All checks were successful
Build / build (push) Successful in 2m38s
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-16 09:06:34 -05:00
eb620ee6d4 Remove setup-node action for self-hosted runner.
Some checks failed
Build / build (push) Failing after 1m4s
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-16 08:46:06 -05:00
2901106819 Fix workflow runner label to match declared runner labels.
Some checks failed
Build / build (push) Failing after 34s
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-16 08:43:28 -05:00
52e2ecccb6 Updated action runner.
Some checks are pending
Build / build (push) Waiting to run
2025-10-16 08:25:16 -05:00
3d063b1174 Add GitHub Actions workflow for automated builds.
Some checks are pending
Build / build (push) Waiting to run
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-16 08:23:01 -05:00
db7fdb9958 changed game dynamics. 2025-10-13 19:41:04 -05:00
736250499e changed game dynamics. 2025-10-13 17:16:50 -05:00
c9d03e832d changed game dynamics. 2025-02-20 19:11:46 -06:00
5b7d04bd39 changed game dynamics. 2025-02-17 16:51:06 -06:00
b85d1f5b09 Started cleaning up audio, rendering artifacts. 2025-02-16 16:44:18 -06:00
de108e8a40 Initial Commit 2025-02-15 11:23:41 -06:00
a105e28333 Initial Commit 2025-02-15 11:19:24 -06:00