Skip to content

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 06 Feb 17:07

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: resizeToContainer now auto-enables responsive scaling via ResponsiveScaleCalculator
  • New responsive config option for window/container-based scaling
  • ModelLoader: Deep-clones materials (clones are now independent), disposeModel() is now public
  • DirectionalLight: setShadowMapSize() now sets needsUpdate flag
  • TypeScript 5.7+: Fixed ArrayBuffer/Float32Array type mismatches
  • CI/CD: Hardened workflows, fixed platform-specific dependencies

Breaking Changes (Low Severity)

  1. resizeToContainer now integrates with ResponsiveScaleCalculator instead of raw ResizeObserver. Basic usage unchanged — only affects code relying on internal resize mechanism.

  2. Model clones are now independentModelLoader deep-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