Files
spore-ledlab/presets/preset-registry.js
2025-10-12 10:35:56 +02:00

75 lines
2.3 KiB
JavaScript

// Preset registry for LEDLab
const RainbowPreset = require('./rainbow-preset');
const AuroraCurtainsPreset = require('./aurora-curtains-preset');
const BouncingBallPreset = require('./bouncing-ball-preset');
const CircuitPulsePreset = require('./circuit-pulse-preset');
const FadePreset = require('./fade-preset');
const LavaLampPreset = require('./lava-lamp-preset');
const MeteorRainPreset = require('./meteor-rain-preset');
const NebulaDriftPreset = require('./nebula-drift-preset');
const OceanGlimmerPreset = require('./ocean-glimmer-preset');
const SpiralBloomPreset = require('./spiral-bloom-preset');
const VoxelFirefliesPreset = require('./voxel-fireflies-preset');
const WormholeTunnelPreset = require('./wormhole-tunnel-preset');
class PresetRegistry {
constructor() {
this.presets = new Map();
this.registerDefaults();
}
registerDefaults() {
this.register('rainbow', RainbowPreset);
this.register('aurora-curtains', AuroraCurtainsPreset);
this.register('bouncing-ball', BouncingBallPreset);
this.register('circuit-pulse', CircuitPulsePreset);
this.register('fade', FadePreset);
this.register('lava-lamp', LavaLampPreset);
this.register('meteor-rain', MeteorRainPreset);
this.register('nebula-drift', NebulaDriftPreset);
this.register('ocean-glimmer', OceanGlimmerPreset);
this.register('spiral-bloom', SpiralBloomPreset);
this.register('voxel-fireflies', VoxelFirefliesPreset);
this.register('wormhole-tunnel', WormholeTunnelPreset);
}
register(name, presetClass) {
this.presets.set(name, presetClass);
}
createPreset(name, width = 16, height = 16) {
const presetClass = this.presets.get(name);
if (!presetClass) {
throw new Error(`Preset '${name}' not found`);
}
return new presetClass(width, height);
}
getPresetNames() {
return Array.from(this.presets.keys());
}
getPresetMetadata(name) {
try {
const preset = this.createPreset(name);
return preset.getMetadata();
} catch (error) {
console.error(`Error getting metadata for preset '${name}':`, error);
return null;
}
}
getAllPresetMetadata() {
const metadata = {};
for (const name of this.getPresetNames()) {
metadata[name] = this.getPresetMetadata(name);
}
return metadata;
}
}
// Export the constructor class
module.exports = PresetRegistry;