UNPKG

cdf

Version:

A library for creating oldschool demo-like animations with JavaScript

69 lines (65 loc) 2.51 kB
(function(global,cdf_varname){var lib = global[cdf_varname] || {}; var encodeNumber = function(num){ return (0+num).toString(26).split('').map(function(num){ var cc = num.charCodeAt(0); return String.fromCharCode(cc+(cc<=57 ?49:10)); }).join(''); }; var decodeNumber = function(str){ return parseInt(str.split('').map(function(s){ var n = s.charCodeAt(0); return String.fromCharCode((n-10<97)?n-49:n-10); }).join(''),26) }; lib.map = { /** * Draw a bit sequence onto canvas * @param {cdf.Canvas} canvas c0deff canvas to draw bit sequence onto * @param {string} bits A string of bits. For example, 0110 * @param {CanvasRenderingContext2D.fillStyle} fillStyle A fillstyle to put non-empty bits with */ draw: function(canvas, bits, fillStyle, invert){ bits = bits.split('') bits.forEach(function(b,n){ if((b==0 && !invert) || (b!=0 && invert))return; x = n%canvas.width; y = Math.floor(n/canvas.width); canvas.plot(x,y,1,fillStyle); }) }, /** * Turns bit sequence to map * @param {string} bits A string of bits. For example, 0000110100100111111111100000000000000001101 * @return {string} A map, for example (4)2#1##1##10(16)2#1 */ bitsToMap: function(bits){ return bits .replace(/(0+)/g,function(a){return encodeNumber(a.length)}) .replace(/(1+)/g,function(a){return a.length}); }, /** * Turns map to bit sequence * @param {string} map A map, for example (4)2#1##1##10(16)2#1 * @return {string} A string of bits. For example, 0000110100100111111111100000000000000001101 */ mapToBits: function(map){ return map .replace(/\d+/g,function(a){return '1'.repeat(a)}) .replace(/[a-z]+/g,function(a){return '0'.repeat(decodeNumber(a))}) }, /** * Create new canvas and draw a bit sequence onto it * @param {int} width * @param {int} height * @param {string} bits * @param {CanvasRenderingContext2D.fillStyle} fillStyle A fillstyle to put non-empty bits with * @return {lib.canvas} Canvas filled with pattern */ c: function(width, height, bits, fillStyle){ var c = new lib.Canvas(width,height); if(bits.match(/[a-z]/))bits = this.mapToBits(bits); this.draw(c, bits, fillStyle); return c; } } if(cdf_varname) global[cdf_varname]=lib;})(window, (typeof module!=='undefined'&& module.exports)?false:'cdf');