UNPKG

pixelscanjs

Version:

Simple pixel based physics engine only supporting static environments and ropes!

121 lines (97 loc) 2.74 kB
const fs = require('fs'); const path = require('path'); // { // path: contents, // } const watched = {}; // let changed = false; let writeQueued = false; const first = [ 'aabb.js', 'hash.js', 'mat3.js', 'vec2.js', ]; const queueWrite = () => { if (writeQueued) { return; } writeQueued = true; setTimeout(() => { writeQueued = false; write(); }, 50); }; const clear = () => { for (const path in watched) { if (!fs.existsSync(path)) { delete watched[path]; // changed = true; queueWrite(); console.log('File deleted: ', path); } } }; const read = (file) => { if (fs.lstatSync(file).isDirectory()) { const files = fs.readdirSync(file); for (let i = 0; i < files.length; i++) { read(path.join(file, files[i])); } } else if (!watched[file]) { // add the file, mark as changed, then wait for real changes watched[file] = String(fs.readFileSync(file)); // changed = true; queueWrite(); fs.watchFile(file, () => { if (fs.existsSync(file)) { watched[file] = String(fs.readFileSync(file)); // changed = true; queueWrite(); console.log('File changed: ', file); } else { delete watched[file]; // changed = true; queueWrite(); console.log('File deleted: ', file); } }); } }; const write = () => { const file = path.join(__dirname, 'pixelscan.js'); let data = 'const PixelScan = (function() {'; data += '\n'; // move main.js to the end const files = Object.keys(watched); for (let i = 0; i < files.length; i++) { if (!first.find(name => files[i].endsWith(name))) { continue; } files.unshift(files.splice(i, 1)[0]); } files.push(files.splice(files.findIndex(file => file.endsWith('main.js')), 1)[0]); for (let i = 0; i < files.length; i++) { const file = files[i]; data += watched[file]; data += '\n'; } data += 'return PixelScan;'; data += '\n'; data += '})();'; fs.writeFileSync(file, data); console.log('Wrote file changes. ', Date.now()); }; const loop = () => { clear(); read(path.join(__dirname, 'src')); // if (changed) { // // changed = false; // // write(); // // queueWrite(); // } setTimeout(() => { loop(); }, 2000); }; loop();