Files
spore-ledlab/presets/base-preset.js
2025-10-11 17:46:32 +02:00

87 lines
1.6 KiB
JavaScript

// Base preset class for LEDLab
const { createFrame, frameToPayload } = require('./frame-utils');
class BasePreset {
constructor(width = 16, height = 16) {
this.width = width;
this.height = height;
this.frameCount = 0;
this.isActive = false;
this.parameters = {};
this.defaultParameters = {};
}
// Initialize the preset with default parameters
init() {
this.frameCount = 0;
this.resetToDefaults();
}
// Reset parameters to their default values
resetToDefaults() {
this.parameters = { ...this.defaultParameters };
}
// Set a parameter value
setParameter(name, value) {
this.parameters[name] = value;
}
// Get a parameter value
getParameter(name) {
return this.parameters[name];
}
// Get all parameters
getParameters() {
return { ...this.parameters };
}
// Start the preset
start() {
this.isActive = true;
this.init();
}
// Stop the preset
stop() {
this.isActive = false;
}
// Generate the next frame
generateFrame() {
if (!this.isActive) {
return null;
}
const frame = this.renderFrame();
this.frameCount++;
if (frame) {
return frameToPayload(frame);
}
return null;
}
// Override in subclasses to render a frame
renderFrame() {
// Default implementation returns a blank frame
return createFrame(this.width, this.height, '000000');
}
// Get preset metadata
getMetadata() {
return {
name: this.constructor.name,
description: 'Base preset class',
parameters: this.defaultParameters,
width: this.width,
height: this.height,
};
}
}
module.exports = BasePreset;