1 changed files with 37 additions and 0 deletions
@ -0,0 +1,37 @@
|
||||
export default class Effect { |
||||
constructor(options = {}) { |
||||
this.enabled = options.enabled !== undefined ? options.enabled : true; |
||||
this.priority = options.priority || 0; |
||||
this.params = options.params || {}; |
||||
this.debug = options.debug || false; |
||||
this.id = options.id || `effect-${Math.random().toString(36).substr(2, 9)}`; |
||||
} |
||||
|
||||
// Enable or disable the effect
|
||||
enable() { this.enabled = true; } |
||||
disable() { this.enabled = false; } |
||||
|
||||
// Update parameters for live adjustments
|
||||
updateParams(newParams = {}) { Object.assign(this.params, newParams); } |
||||
|
||||
// Set default parameters, to be called in subclasses
|
||||
setDefaults(defaultParams) { this.params = { ...defaultParams, ...this.params }; } |
||||
|
||||
// Log messages if debug mode is enabled
|
||||
debugLog(...args) { if (this.debug) console.log(`[${this.constructor.name} - ${this.id}]`, ...args); } |
||||
|
||||
// Get parameter with fallback
|
||||
getParam(key, fallback) { return key in this.params ? this.params[key] : fallback; } |
||||
|
||||
// Lifecycle hooks for optional custom behavior
|
||||
beforeApply(ctx, video, params) { /* Optionally overridden in subclass */ } |
||||
afterApply(ctx, video, params) { /* Optionally overridden in subclass */ } |
||||
|
||||
// Base apply method to be implemented in each subclass
|
||||
apply(ctx, video, params) { |
||||
if (!this.enabled) return; |
||||
this.beforeApply(ctx, video, params); |
||||
throw new Error("apply() method must be implemented by subclass"); |
||||
this.afterApply(ctx, video, params); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue