bend_puzzle/puzzle-worker.js
2026-07-31 12:54:46 +09:00

28 lines
1.4 KiB
JavaScript

'use strict';
importScripts('build-meta.js');
importScripts('puzzle-patterns.js');
importScripts(`puzzle-core.js?v=${BendBuildMeta.APP_VERSION}-${BendBuildMeta.GENERATOR_VERSION}`);
const uniquenessCache = new Map();
self.onmessage = ({data}) => {
const {id, action='generate', chunks, seed, level, originX, originY, generationOptions, generatorVersion} = data;
try {
if (generatorVersion !== BendPuzzle.GENERATOR_VERSION) throw new Error('Generator version mismatch');
if (action === 'verify') {
const signature = BendPuzzle.puzzleSignature(data.puzzle);
const cacheKey = JSON.stringify([signature, data.limits || null]);
let result = uniquenessCache.get(cacheKey);
if (!result) {
result = BendPuzzle.verifyPuzzleUniqueness(data.puzzle, data.limits || null);
uniquenessCache.set(cacheKey, result);
if (uniquenessCache.size > 256) uniquenessCache.delete(uniquenessCache.keys().next().value);
}
self.postMessage({id, result, generatorVersion: BendPuzzle.GENERATOR_VERSION});
return;
}
const puzzle = BendPuzzle.generatePuzzle(chunks, seed, level, originX, originY, generationOptions || null);
self.postMessage({id, puzzle, generatorVersion: BendPuzzle.GENERATOR_VERSION});
} catch (error) {
self.postMessage({id, error: error?.message || String(error), generatorVersion: BendPuzzle.GENERATOR_VERSION});
}
};