|
function drawSmallTriTL(ctx,blockSize,info){ |
|
ctx.moveTo(blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize/2+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize/4+blockSize*info.offset[0], blockSize/2+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
} |
|
function drawSmallTriBL(ctx,blockSize,info){ |
|
ctx.moveTo(blockSize*info.offset[0], blockSize/2+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize/2+blockSize*info.offset[0], blockSize*3/4+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
} |
|
function drawSmallTriTR(ctx,blockSize,info){ |
|
ctx.moveTo(blockSize+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], blockSize/2+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize/2+blockSize*info.offset[0], blockSize/4+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
} |
|
function drawSmallTriBR(ctx,blockSize,info){ |
|
ctx.moveTo(blockSize/2+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*3/4+blockSize*info.offset[0], blockSize/2+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
} |
|
function drawStack(ctx, blockSize, shape,position,rotation){ |
|
const halfBlock = blockSize/2 |
|
let offsets = [] |
|
switch(position){ |
|
case 1: //corner |
|
offsets = [[0,0],[3,0],[3,3],[0,3]] |
|
break |
|
case 2: // middle |
|
offsets = [[1,1],[2,1],[2,2],[1,2]] |
|
break |
|
case 3: // edge |
|
offsets = [[[0,1],[1,0]],[[2,0],[3,1]],[[3,2],[2,3]],[[1,3],[0,2]]] |
|
break |
|
} |
|
const shapes = [ |
|
function (info) {// top bar (5 mid, o corner) |
|
ctx.rect(([0,2,3].includes(info.rotation)?0:halfBlock)+blockSize*info.offset[0], ([0,1,3].includes(info.rotation)?0:halfBlock)+blockSize*info.offset[1], info.rotIsEven?blockSize: halfBlock, info.rotation%2===0?halfBlock:blockSize) |
|
ctx.fill() |
|
}, |
|
function (info) {// lg square (45 corner) |
|
ctx.fillRect(blockSize*info.offset[0], blockSize*info.offset[1],blockSize,blockSize) |
|
}, |
|
function(info) {// half sq tri (w4 mid) |
|
ctx.moveTo((info.rotation<2?0:blockSize)+blockSize*info.offset[0], ([1,2].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo(([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// middle tri (36 corner) |
|
console.log(info.rotation, info.rotIsEven, info.rotIsZero, info.rotIsOne) |
|
ctx.moveTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// diamond (3) |
|
ctx.moveTo(halfBlock+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*info.offset[0],halfBlock+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// corner gem (12) |
|
ctx.moveTo(([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo(([1,3].includes(info.rotation)?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[0], ([1,3].includes(info.rotation)?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// tritri (15) |
|
ctx.moveTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize*3/4:blockSize/4))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize/4:blockSize*3/4))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize/4:blockSize*3/4))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize*3/4:blockSize/4))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill('evenodd') |
|
ctx.beginPath() |
|
ctx.moveTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation%2!==0?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotation%2===0?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotation==1?blockSize*3/4:blockSize/4))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize/4:blockSize*3/4))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize/4:blockSize*3/4))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize*3/4:blockSize/4))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill('evenodd') |
|
}, |
|
function(info) {// corner tri (4) |
|
ctx.moveTo(([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// sm sq center (8) |
|
ctx.rect(blockSize/4+blockSize*info.offset[0], blockSize/4+blockSize*info.offset[1], halfBlock,halfBlock) |
|
ctx.fill() |
|
}, |
|
function(info) {// two small sq half (f) |
|
ctx.moveTo((info.rotation<2?0:blockSize)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// sm sq corner (c) |
|
ctx.rect(([0,3].includes(info.rotation)?0:halfBlock)+blockSize*info.offset[0], (info.rotation<2?0:halfBlock)+blockSize*info.offset[1],halfBlock,halfBlock) |
|
ctx.fill() |
|
}, |
|
function(info) {// center tri (e) |
|
ctx.moveTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// edge tri (77) |
|
ctx.moveTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// sm corner tri inv (38) |
|
ctx.moveTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// sm corner tri (0,yuygjh) |
|
ctx.moveTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// checkered (2) |
|
ctx.rect(blockSize*info.offset[0], (info.rotIsEven?halfBlock:0)+blockSize*info.offset[1], halfBlock,halfBlock) |
|
ctx.fill() |
|
ctx.beginPath() |
|
ctx.rect(halfBlock+blockSize*info.offset[0], (info.rotIsEven?0:halfBlock)+blockSize*info.offset[1], halfBlock, halfBlock) |
|
ctx.fill() |
|
}, |
|
function(info) {// 2 tri (23) |
|
ctx.moveTo(blockSize*info.offset[0], (info.rotIsEven?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?0:blockSize)+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?blockSize:0)+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], (info.rotIsEven?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// long tri (29) |
|
ctx.moveTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo(([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// 2 long tri (2a,2addewsx) |
|
ctx.moveTo(([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?0:blockSize)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// long, short tri (3) |
|
ctx.moveTo(([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?0:blockSize)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// spike (0) |
|
ctx.moveTo(([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// flock (2d) |
|
ctx.moveTo((info.rotation<2?0:blockSize)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// 2 edge tri (1) |
|
ctx.moveTo(([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize/4:blockSize*3/4))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize*3/4:blockSize/4))+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize*3/4:blockSize/4))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize/4:blockSize*3/4))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// teeth tri (1d) |
|
ctx.moveTo(blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?blockSize:0)+blockSize*info.offset[0], (info.rotIsEven?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:blockSize/4)+blockSize*info.offset[0], (info.rotIsEven?blockSize/4:halfBlock)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
ctx.beginPath() |
|
ctx.moveTo(blockSize+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?0:blockSize)+blockSize*info.offset[0], (info.rotIsEven?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:blockSize*3/4)+blockSize*info.offset[0], (info.rotIsEven?blockSize*3/4:halfBlock)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// teeth with food (4d) |
|
ctx.moveTo((info.rotIsEven?0:blockSize)+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], (info.rotIsEven?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?0:halfBlock)+blockSize*info.offset[0], (info.rotIsEven?halfBlock:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?blockSize:0)+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*info.offset[0], (info.rotIsEven?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?blockSize:halfBlock)+blockSize*info.offset[0], (info.rotIsEven?halfBlock:blockSize)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// sm diamond (10) |
|
ctx.moveTo(halfBlock+blockSize*info.offset[0], blockSize/4+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*3/4+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], blockSize*3/4+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize/4+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// invert star (31) |
|
ctx.moveTo(blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], blockSize/4+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*3/4+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], blockSize*3/4+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize/4+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill('evenodd') |
|
}, |
|
function(info) {// rewind (7d) |
|
ctx.moveTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
ctx.beginPath() |
|
ctx.moveTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// spike cross (4) |
|
ctx.moveTo(([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
ctx.beginPath() |
|
ctx.moveTo((info.rotation<2?0:blockSize)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// invert bar (a) |
|
ctx.moveTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo(([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
ctx.beginPath() |
|
ctx.moveTo((info.rotation<2?0:blockSize)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo(([1,2].includes(info.rotation)?0:blockSize)+blockSize*info.offset[0], (info.rotation<2?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// origami (2) |
|
ctx.moveTo(blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], blockSize/4+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*3/4+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], blockSize*3/4+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize/4+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill('evenodd') |
|
ctx.beginPath() |
|
ctx.moveTo(halfBlock+blockSize*info.offset[0], blockSize/4+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*3/4+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], blockSize*3/4+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize/4+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// cup (b) |
|
ctx.moveTo((info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize*3/4:blockSize/4))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize*3/4:blockSize/4))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize*3/4:blockSize/4))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize/4:blockSize*3/4))+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize/4:blockSize*3/4))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize/4:blockSize*3/4))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize/4:blockSize*3/4))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize*3/4:blockSize/4))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// squash diamond (8c) |
|
ctx.moveTo((info.rotIsEven?0:halfBlock)+blockSize*info.offset[0], (info.rotIsEven?halfBlock:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:blockSize*3/4)+blockSize*info.offset[0], (info.rotIsEven?blockSize/4:halfBlock)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?blockSize:halfBlock)+blockSize*info.offset[0], (info.rotIsEven?halfBlock:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:blockSize/4)+blockSize*info.offset[0], (info.rotIsEven?blockSize*3/4:halfBlock)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// tri mirror (1e) |
|
ctx.moveTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.lineTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?0:blockSize)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.moveTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo(([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.fill() |
|
}, |
|
function(info) {// hollow diamond (16) |
|
ctx.moveTo(halfBlock+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.moveTo(halfBlock+blockSize*info.offset[0], blockSize/4+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*3/4+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], blockSize*3/4+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize/4+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.fill('evenodd') |
|
}, |
|
function(info) {// rotated 3 tri (1f) |
|
if ([1,2,3].includes(info.rotation)){ |
|
drawSmallTriTL(ctx,blockSize,info) |
|
} |
|
if ([0,2,3].includes(info.rotation)){ |
|
drawSmallTriTR(ctx,blockSize,info) |
|
} |
|
if ([0,1,2].includes(info.rotation)){ |
|
drawSmallTriBL(ctx,blockSize,info) |
|
} |
|
if ([0,1,3].includes(info.rotation)){ |
|
drawSmallTriBR(ctx,blockSize,info) |
|
} |
|
ctx.fill() |
|
}, |
|
function(info) {// rotated 2 tri (7) |
|
if ([1,2].includes(info.rotation)){ |
|
drawSmallTriTL(ctx,blockSize,info) |
|
} |
|
if ([2,3].includes(info.rotation)){ |
|
drawSmallTriTR(ctx,blockSize,info) |
|
} |
|
if ([0,1].includes(info.rotation)){ |
|
drawSmallTriBL(ctx,blockSize,info) |
|
} |
|
if ([0,3].includes(info.rotation)){ |
|
drawSmallTriBR(ctx,blockSize,info) |
|
} |
|
ctx.fill() |
|
}, |
|
function(info) {// opposite 2 tri (1) |
|
if (!info.rotIsEven){ |
|
drawSmallTriTL(ctx,blockSize,info) |
|
} |
|
if (info.rotIsEven){ |
|
drawSmallTriTR(ctx,blockSize,info) |
|
} |
|
if (info.rotIsEven){ |
|
drawSmallTriBL(ctx,blockSize,info) |
|
} |
|
if (!info.rotIsEven){ |
|
drawSmallTriBR(ctx,blockSize,info) |
|
} |
|
ctx.fill() |
|
}, |
|
function(info) {// chevron (7) |
|
ctx.moveTo((!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// hollow tri (23) |
|
ctx.moveTo((info.rotation<2?0:blockSize)+blockSize*info.offset[0], ([1,2].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo(([1,2].includes(info.rotation)?blockSize:0)+blockSize*info.offset[0], (info.rotation<2?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo(([1,3].includes(info.rotation)?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[0], (info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.moveTo(halfBlock+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize/4:blockSize*3/4)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?blockSize*3/4:blockSize/4)+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?blockSize/4:blockSize*3/4)+blockSize*info.offset[0], (info.rotation<2?blockSize/4:blockSize*3/4)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill('evenodd') |
|
}, |
|
function(info) {// 2 corner tri(13) |
|
ctx.moveTo((info.rotIsEven?0:blockSize)+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?0:blockSize)+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.moveTo((info.rotIsEven?blockSize:0)+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo(halfBlock+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?blockSize:0)+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// 2 block corner (3b) |
|
ctx.moveTo((info.rotIsEven?0:blockSize)+blockSize*info.offset[0], blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:blockSize)+blockSize*info.offset[0], (info.rotIsEven?0:halfBlock)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:blockSize*3/4)+blockSize*info.offset[0], (info.rotIsEven?blockSize/4:halfBlock)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?0:halfBlock)+blockSize*info.offset[0], (info.rotIsEven?halfBlock:0)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.moveTo(halfBlock+blockSize*info.offset[0], blockSize+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:0)+blockSize*info.offset[0], (info.rotIsEven?blockSize*3/4:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?blockSize:0)+blockSize*info.offset[0], halfBlock+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?blockSize:blockSize/4)+blockSize*info.offset[0], (info.rotIsEven?blockSize:halfBlock)+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// 2 diamond (e) |
|
ctx.moveTo((info.rotIsEven?halfBlock:blockSize)+blockSize*info.offset[0], (info.rotIsEven?0:halfBlock)+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize*3/4+blockSize*info.offset[0], (info.rotIsEven?blockSize/4:blockSize*3/4)+blockSize*info.offset[1]) |
|
ctx.lineTo(blockSize/4+blockSize*info.offset[0], (info.rotIsEven?blockSize*3/4:blockSize/4)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:0)+blockSize*info.offset[0], (info.rotIsEven?blockSize:halfBlock)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?blockSize*3/4:blockSize/4)+blockSize*info.offset[0], blockSize*3/4+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?blockSize/4:blockSize*3/4)+blockSize*info.offset[0], blockSize/4+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
}, |
|
function(info) {// 2 stick (3a) |
|
ctx.moveTo((info.rotation<2?0:blockSize)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?blockSize:0)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotation<2?blockSize:0)+blockSize*info.offset[0], ([0,3].includes(info.rotation)?0:blockSize)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?blockSize:0))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?0:blockSize))+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?blockSize/4:blockSize*3/4)+blockSize*info.offset[0], (info.rotation<2?blockSize/4:blockSize*3/4)+blockSize*info.offset[1]) |
|
ctx.lineTo(([0,3].includes(info.rotation)?blockSize*3/4:blockSize/4)+blockSize*info.offset[0], (info.rotation<2?blockSize*3/4:blockSize/4)+blockSize*info.offset[1]) |
|
ctx.lineTo((info.rotIsEven?halfBlock:(info.rotIsOne?0:blockSize))+blockSize*info.offset[0], (!info.rotIsEven?halfBlock:(info.rotIsZero?blockSize:0))+blockSize*info.offset[1]) |
|
ctx.closePath() |
|
ctx.fill() |
|
} |
|
] |
|
let data = { |
|
rotation: rotation, |
|
offset: [], |
|
rotIsEven: false |
|
} |
|
if (shape < shapes.length) { |
|
offsets.forEach(offset => { |
|
// for readability |
|
data.rotIsEven = data.rotation%2===0 |
|
data.rotIsZero = data.rotation === 0 |
|
data.rotIsOne = data.rotation === 1 |
|
if(Array.isArray(offset[0])) { |
|
data.offset = offset[0] |
|
ctx.beginPath() |
|
shapes[shape](data) |
|
data.offset = offset[1] |
|
ctx.beginPath() |
|
shapes[shape](data) |
|
} else { |
|
data.offset = offset |
|
ctx.beginPath() |
|
shapes[shape](data) |
|
} |
|
data.rotation+=1 |
|
data.rotation%=4 |
|
}) |
|
} |
|
} |
|
|
|
function generateStack(){ |
|
// const hash = document.getElementById('seed').value.murmurHash() |
|
const hash = document.getElementById('seed').value.cyrb53Hash() |
|
|
|
const color = `#${hash.substring(1,4)}` |
|
const invert = parseInt(hash.substring(4,5))<8 |
|
|
|
const c = document.getElementById('identicon') |
|
const ctx = c.getContext('2d') |
|
ctx.clearRect(0, 0, c.width,c.height) |
|
const blockSize = Math.floor(c.width/4) |
|
|
|
ctx.fillStyle = color |
|
if(invert){ |
|
ctx.beginPath() |
|
ctx.rect(0,0,c.width,c.height) |
|
ctx.fill() |
|
ctx.fillStyle='white' |
|
} |
|
let shape,rotation |
|
|
|
rotation = Math.floor(parseInt(hash.substring(3,4),16)/4) |
|
shape = Math.floor(parseInt(hash.substring(4,6),16)*45/256) |
|
drawStack(ctx,blockSize,shape,1,rotation) |
|
|
|
rotation = Math.floor(parseInt(hash.substring(4,5),16)/4) |
|
shape = Math.floor(parseInt(hash.substring(5,6)+hash.substring(0,1),16)*45/256) |
|
drawStack(ctx,blockSize,shape,2,rotation) |
|
|
|
rotation = Math.floor(parseInt(hash.substring(6,7),16)/4) |
|
shape = Math.floor(parseInt(hash.substring(6,8),16)*45/256) |
|
drawStack(ctx, blockSize, shape, 3, rotation) |
|
|
|
} |
|
|
|
function generateIdenticon(){ |
|
const identiconSize = document.getElementById('size').value |
|
document.getElementById('identicon').height = identiconSize |
|
document.getElementById('identicon').width = identiconSize |
|
|
|
generateStack() |
|
} |
|
|
|
generateIdenticon() |