v1.3.0
v1.3.0 — Comprehensive Feature Expansion
10 new feature modules following the Laravel-inspired ServiceProvider + Facade + Contract pattern. Each module is tree-shakeable, mobile-optimized, and AI-agent friendly (1-3 lines to use any feature).
50+ new files | 15,000+ lines of production code | 5 new facades | 2,200+ lines of AI-agent docs
New Modules
| Module | Description | API |
|---|---|---|
| TickSystem | Per-component render loop with priority ordering | Tick.subscribe(fn, priority) |
| ResourceTracker | Auto-dispose scoped resource lifecycle | Resources.createScope('id').track(obj) |
| RaycastEventSystem | DOM-like 3D pointer events with bubbling | events.on(mesh, 'click', handler) |
| PerformanceAdvisor | Adaptive quality tiers with hysteresis | advisor.enable({ targetFps: 55 }) |
| InstanceManager | Automatic GPU instancing at 3+ copies | im.createInstance('tree', model) |
| PostProcessingPipeline | Effect merging via pmndrs/postprocessing | PostProcessing.add('bloom', opts) |
| EnvironmentSystem | Skybox, fog, sun presets with transitions | Environment.preset('sunset') |
| PrefabSystem | JSON-driven prefabs with ECS-lite components | Prefabs.spawn('enemy', pos) |
| SmartAssetPipeline | Priority loading, memory budgets, LRU eviction | pipeline.loadScene('level1') |
| GameSoundPresets | 15 procedural game sounds (no files needed) | sounds.play('explosion') |
Quick Examples
// Tick System
Tick.subscribe(({ delta }) => player.move(delta));
Tick.subscribe(physicsStep, -10); // priority ordering
// Resource Lifecycle
const scope = Resources.createScope('level-1');
scope.track(new THREE.BoxGeometry(1, 1, 1));
Resources.disposeScope('level-1'); // auto-disposed
// 3D Pointer Events
events.on(cube, 'click', (e) => console.log('Hit at', e.point));
events.on(cube, 'pointerenter', () => cube.scale.setScalar(1.1));
// Post-Processing
PostProcessing.add('bloom', { intensity: 0.5 });
PostProcessing.add('fxaa');
// Environment
Environment.preset('sunset');
await Environment.transitionTo('night', 5.0);
// Procedural Audio
sounds.play('explosion');
sounds.play('coin', { volume: 0.5, pitch: 1.2 });Other Changes
- Responsive mode:
resizeToContainernow auto-enables responsive scaling viaResponsiveScaleCalculator - New
responsiveconfig option for window/container-based scaling - ModelLoader: Deep-clones materials (clones are now independent),
disposeModel()is now public - DirectionalLight:
setShadowMapSize()now setsneedsUpdateflag - TypeScript 5.7+: Fixed
ArrayBuffer/Float32Arraytype mismatches - CI/CD: Hardened workflows, fixed platform-specific dependencies
Breaking Changes (Low Severity)
-
resizeToContainernow integrates withResponsiveScaleCalculatorinstead of rawResizeObserver. Basic usage unchanged — only affects code relying on internal resize mechanism. -
Model clones are now independent —
ModelLoaderdeep-clones materials per cache hit. Previously clones shared material refs (mutation risk).
See CHANGELOG.md for full details.
Performance Budgets
| Feature | Mobile | Desktop |
|---|---|---|
| TickSystem | < 0.1ms/frame | < 0.05ms/frame |
| RaycastEvents | < 1ms (20Hz) | < 0.5ms (60Hz) |
| PostProcessing | 1-2 passes | Up to 5 passes |
| PrefabSystem | Pooled spawn < 1ms | Same |
| AudioPresets | 4 concurrent | 8 concurrent |