unpak.js
Version:
Modern TypeScript library for reading Unreal Engine pak files and assets, inspired by CUE4Parse
212 lines (177 loc) ⢠8.34 kB
text/typescript
/**
* 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
};