Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | import { Story } from '../story.js'; let gameState; let eventQueue = []; let pathFindingChanges = []; let flags; let mapDim; const pathFindingWorker = new Worker('./path-finding-worker.js'); pathFindingWorker.onmessage = (e) => { pathFindingChanges = pathFindingChanges.concat(e.data); }; const pathFindingWorker2 = new Worker('./path-finding-worker.js'); pathFindingWorker2.onmessage = (e) => { pathFindingChanges = pathFindingChanges.concat(e.data); }; let lastWorker = 0; let last = new Date(); const start = new Date(); function updateStory() { if (!gameState) { postMessage({}); // Important to post an empty change to synchronise return; } const now = new Date() - start; const timeSinceLast = new Date() - last; last = new Date(); let changes = Story.updateGameState({ gameState, now, timeSinceLast, eventQueue, flags, mapDim, }); eventQueue = []; const pathFindingRequests = changes.filter((t) => t.type === 'request-path-finding'); if (pathFindingRequests.length > 0) { const workers = [pathFindingWorker, pathFindingWorker2]; const worker = workers[lastWorker % 2]; lastWorker++; worker.postMessage({ type: 'add-requests', requests: pathFindingRequests, }); changes = changes .filter((t) => t.type !== 'request-path-finding') .concat({ type: 'set-characters-path-finding-request', ids: pathFindingRequests.map((t) => t.actor.id), }); } if (pathFindingChanges.length > 0) { changes = changes.concat(pathFindingChanges); pathFindingChanges = []; } postMessage(changes); } onmessage = (e) => { switch (e.data.type) { case 'update-grid': pathFindingWorker.postMessage(e.data); pathFindingWorker2.postMessage(e.data); mapDim = e.data.mapDim; break; case 'update-game-state': gameState = e.data.gameState; flags = e.data.flags; updateStory(); break; case 'add-event': eventQueue = eventQueue.concat(e.data.event); break; default: console.warn(`Unknown event passed to worker: ${e.data.type}`); // eslint-disable-line no-console } }; |