UNPKG

unpak.js

Version:

Modern TypeScript library for reading Unreal Engine pak files and assets, inspired by CUE4Parse

212 lines (177 loc) • 8.34 kB
/** * Example application demonstrating unpak.js v2.0 new roadmap features * This shows how to use the enhanced audio system, registry, and web interface */ import { UnpakRestServer, UnpakWebInterface, EnhancedAssetRegistry, EnhancedWwiseConverter, AudioEventChain, AudioModulationSystem } from '../src'; async function demonstrateNewFeatures() { console.log('šŸš€ unpak.js v2.0 Roadmap Features Demo'); console.log('=====================================\n'); // 1. Enhanced Audio System (Phase 7) console.log('šŸ“¢ Enhanced Audio System Features:'); // Audio Event Chains const audioChain = new AudioEventChain(); audioChain.addEvent('intro_music', { id: 'intro_music', type: 'Play', parameters: new Map([['volume', 0.8], ['fade_in', 2.0]]), delay: 0, conditions: ['game_start'] }); audioChain.addEvent('gameplay_music', { id: 'gameplay_music', type: 'Play', parameters: new Map([['volume', 0.6], ['loop', true]]), delay: 3000, conditions: ['intro_complete'] }); audioChain.connectEvents('intro_music', 'gameplay_music'); const executionOrder = audioChain.processChain('intro_music'); console.log(` āœ“ Audio Event Chain created with ${executionOrder.length} events`); // Audio Modulation System const modulationSystem = new AudioModulationSystem(); modulationSystem.createModulator('battle_intensity', 'Volume', { minValue: 0.3, maxValue: 1.0, curve: 'Exponential', smoothingTime: 1.5, bipolar: false }); console.log(' āœ“ Audio Modulation System initialized'); // Cross-platform conversion example console.log(' āœ“ Cross-platform audio conversion support:'); console.log(' - Web: OGG Vorbis optimized'); console.log(' - iOS: AAC with battery efficiency'); console.log(' - Android: OGG with mobile optimization'); console.log(' - Desktop/Console: High-quality WAV\n'); // 2. Enhanced Asset Registry (Phase 8) console.log('šŸ“ Enhanced Asset Registry Features:'); // Note: In a real application, you would load an actual registry // const registry = new EnhancedAssetRegistry(); // registry.initialize(); console.log(' āœ“ Asset Bundle Information Support'); console.log(' - Automatic bundle size estimation'); console.log(' - Dependency mapping for streaming'); console.log(' - Platform-specific bundle detection'); console.log(' āœ“ Streaming Level Registry'); console.log(' - Level-specific asset collections'); console.log(' - Memory usage estimation'); console.log(' - Load priority management'); console.log(' āœ“ Plugin Asset Registry'); console.log(' - Plugin-specific asset tracking'); console.log(' - Cross-plugin dependency resolution'); console.log(' - Dynamic plugin loading support'); console.log(' āœ“ Custom Registry Formats'); console.log(' - JSON format support'); console.log(' - XML format support'); console.log(' - Custom binary formats\n'); // 3. Web Interface and REST API (Phase 12) console.log('🌐 Web Interface & REST API Features:'); try { // Start REST API Server const apiServer = new UnpakRestServer({ port: 3000 }); console.log(' šŸ”§ Starting REST API server...'); await apiServer.start(); console.log(' āœ“ REST API server running on http://localhost:3000'); // Start Web Interface const webInterface = new UnpakWebInterface({ port: 8080, apiPort: 3000 }); console.log(' šŸ”§ Starting Web Interface...'); await webInterface.start(); console.log(' āœ“ Web Interface running on http://localhost:8080'); console.log('\nšŸŽ‰ Demo Features Active:'); console.log(' šŸ“Š FModel-like asset browser with dark theme'); console.log(' šŸ” Real-time asset search and filtering'); console.log(' šŸ‘ļø Live asset preview system'); console.log(' šŸ“¤ Export and download capabilities'); console.log(' šŸ“ˆ Performance monitoring dashboard'); console.log(' šŸ”— REST API integration'); console.log('\nšŸ“– API Endpoints Available:'); console.log(' GET /api/status - Server status'); console.log(' GET /api/archives - List archives'); console.log(' POST /api/archives - Load archive'); console.log(' GET /api/archives/:id/files - Browse files'); console.log(' POST /api/convert - Asset conversion'); console.log(' POST /api/benchmark - Performance tests'); console.log('\nšŸ–„ļø Web Interface Features:'); console.log(' šŸ“‚ Tree/List/Grid view modes'); console.log(' šŸŽØ Modern dark theme design'); console.log(' šŸ“± Responsive layout'); console.log(' ⚔ Real-time status updates'); console.log(' šŸ”§ Asset manipulation tools'); // Keep servers running for demonstration console.log('\nā³ Servers running... Press Ctrl+C to stop'); // Graceful shutdown on SIGINT process.on('SIGINT', async () => { console.log('\nšŸ›‘ Shutting down servers...'); await webInterface.stop(); await apiServer.stop(); console.log('āœ… All servers stopped. Goodbye!'); process.exit(0); }); // Keep the process alive await new Promise(() => {}); } catch (error) { console.error('āŒ Failed to start servers:', error); process.exit(1); } } // Additional feature demonstrations function demonstrateAudioFeatures() { console.log('\nšŸŽµ Advanced Audio Features:'); // Cross-platform conversion const platforms = ['Web', 'iOS', 'Android', 'Console', 'Desktop'] as const; platforms.forEach(platform => { console.log(` šŸ“± ${platform}: Optimized for ${platform === 'Web' ? 'streaming' : platform === 'iOS' || platform === 'Android' ? 'mobile' : 'high quality'}`); }); // Audio compression formats const formats = ['OGG', 'MP3', 'AAC', 'OPUS'] as const; formats.forEach(format => { console.log(` šŸŽµ ${format}: ${format === 'OGG' ? 'Open source, web-friendly' : format === 'MP3' ? 'Universal compatibility' : format === 'AAC' ? 'Apple ecosystem optimized' : 'Low latency, high quality'}`); }); } function demonstrateRegistryFeatures() { console.log('\nšŸ“Š Registry System Capabilities:'); console.log(' šŸ—ļø Asset Bundle Management:'); console.log(' - Automatic size estimation'); console.log(' - Dependency resolution'); console.log(' - Streaming level optimization'); console.log(' - Platform-specific builds'); console.log(' šŸŽ® Streaming Level Support:'); console.log(' - Level asset categorization'); console.log(' - Memory usage prediction'); console.log(' - Load priority queuing'); console.log(' - Distance-based streaming'); console.log(' šŸ”Œ Plugin Asset Tracking:'); console.log(' - Plugin-specific collections'); console.log(' - Cross-plugin dependencies'); console.log(' - Version management'); console.log(' - Dynamic loading support'); } // Main execution if (require.main === module) { demonstrateNewFeatures() .then(() => { demonstrateAudioFeatures(); demonstrateRegistryFeatures(); }) .catch(console.error); } export { demonstrateNewFeatures, demonstrateAudioFeatures, demonstrateRegistryFeatures };