Menu

Plugin Selection Toys ❲Top 20 Quick❳

reorder() // sort: visual → physics → audio (example) this.activePlugins = new Map([...this.activePlugins.entries()] .sort((a,b) => orderMap[a[1].category] - orderMap[b[1].category]));

interface ToyContext // shared state across plugins audioBuffer?: AudioBuffer; canvas?: HTMLCanvasElement; physicsWorld?: Matter.World; userParams: Record<string, any>; plugin selection toys

interface ToyPlugin "physics"; icon: string; // emoji or asset URL cost?: number; // for resource-limited toys exclusiveGroup?: string; // e.g., "reverb-group" – only one per group apply: (context: ToyContext) => ToyContext; // core transformation ui?: knob?: string[]; toggle?: boolean ; // user configurable params reorder() // sort: visual → physics → audio

// 2. apply to context in order (order matters!) this.activePlugins.set(plugin.id, plugin); this.reorder(); // sort by category/priority orderMap[a[1].category] - orderMap[b[1].category]))

function encodePreset(preset) return btoa(JSON.stringify(preset));