import GUI from "lil-gui"; import Config from "./Config"; type EventHandler = () => void; class GUIController { private gui: GUI = new GUI({ width: 400, }); private listeners: Map = new Map(); constructor() { const simFolder = this.gui.addFolder("Simulation"); simFolder .add(Config, "worldSize", 256, 4096) .name("World size") .step(1) .onChange(() => this.emit("reset")); simFolder .add(Config, "antsCount", 0, 22) .name("Ants count 2^") .step(1) .onChange(() => this.emit("reset")); simFolder .add(Config, "scentFadeOutFactor", 0, 0.01) .name("Pheromone evaporation factor") .step(0.0001) .onChange(() => this.emit("reset")); simFolder .add(Config, "scentBlurRadius", 0, 0.5) .name("Pheromone diffusion factor") .step(0.01) .onChange(() => this.emit("reset")); simFolder .add(Config, "simulationStepsPerSecond", 1, 500) .name("Simulation steps per second") .step(1); const controlsFolder = this.gui.addFolder("Controls"); controlsFolder.add(Config, "brushRadius", 1, 100).name("Brush radius"); simFolder.open(); controlsFolder.open(); } on(event: string, handler: EventHandler): void { if (!this.listeners.has(event)) { this.listeners.set(event, []); } this.listeners.get(event)!.push(handler); } private emit(event: string): void { const handlers = this.listeners.get(event); if (handlers) { for (const handler of handlers) { handler(); } } } } export default GUIController;