diff --git a/examples/contour.html b/examples/contour.html index ae81c87..c4317c8 100644 --- a/examples/contour.html +++ b/examples/contour.html @@ -24,46 +24,105 @@ var cellsX = grid[0].length-1; var cellsY = grid.length-1; var contourValues = [0,2]; + var lines = []; + var pointsTraveled = new Set(); for(var c = 0; c < contourValues.length; c++){ - for (var y = 0; y < cellsY; y++){ - for (var x = 0; x < cellsX; x++){ + var pointerX = 0, pointerY = 0, x = 0, y = 0; + var line = []; + var xy = march(0,0); + + while(xy){ + xy = march(xy.x, xy.y); + } + + function march(x,y){ + var marchTo; + if(x >= grid[0].length){ + pointerX = 0; + pointerY++; + } + if (y > grid.length) return; + if (pointsTraveled.has(x+":"+y) && line.length === 0){ + pointerX ++; + return {x: pointerX, y: pointerY }; + } + else{ + pointsTraveled.add(x+":"+y); var currentCell = [grid[y][x], grid[y][x+1], grid[y+1][x+1], grid[y+1][x]]; - var pipe = getPipe(currentCell, contourValues[c]); + var pipe = getPipe(currentCell, contourValues[c], line); if (pipe){ - ctx.beginPath(); - ctx.moveTo(20 + x*20 + 20 * pipe[0][0], 20 + y*20 + 20 * pipe[0][1]); - ctx.lineTo(20 + x*20 + 20 * pipe[1][0], 20 + y*20 + 20 * pipe[1][1]); - ctx.stroke(); - if (pipe.length === 4){ - ctx.beginPath(); - ctx.moveTo(20 + x*20 + 20 * pipe[2][0], 20 + y*20 + 20 * pipe[2][1]); - ctx.lineTo(20 + x*20 + 20 * pipe[3][0], 20 + y*20 + 20 * pipe[3][1]); - ctx.stroke(); + if (line.length > 0 && (x+":"+y === line[0].coordStr)){ + lines.push(line); + line = []; + pointerX ++; + return {x: pointerX, y: pointerY }; } + else{ + var next = pipe.next[0]; + if(line.length > 0){ + var gp = line[line.length-1].gridPos; + if(x + pipe.next[0][0] === gp[0] && y + pipe.next[0][1] === gp[1]){ + next = pipe.next[1] + } + } + line.push({"pipe": pipe, "coordStr": x+":"+y, geom: [20 + x*20 + 20 * pipe.c[0][0], 20 + y*20 + 20 * pipe.c[0][1], 20 + x*20 + 20 * pipe.c[1][0], 20 + y*20 + 20 * pipe.c[1][1]] , "gridPos": [x, y]}); + return {x: x + next[0], y: y + next[1] }; + } + } + else{ + pointerX ++; + return {x: pointerX, y: pointerY }; } } } } + debugger; + + function callback(){ + console.log("wololo"); + } + + // for(var c = 0; c < contourValues.length; c++){ + // for (var y = 0; y < cellsY; y++){ + // for (var x = 0; x < cellsX; x++){ + // var currentCell = [grid[y][x], grid[y][x+1], grid[y+1][x+1], grid[y+1][x]]; + // var pipe = getPipe(currentCell, contourValues[c], line); + // if (pipe){ + // ctx.beginPath(); + // ctx.moveTo(20 + x*20 + 20 * pipe[0][0], 20 + y*20 + 20 * pipe[0][1]); + // ctx.lineTo(20 + x*20 + 20 * pipe[1][0], 20 + y*20 + 20 * pipe[1][1]); + // ctx.stroke(); + // if (pipe.length === 4){ + // ctx.beginPath(); + // ctx.moveTo(20 + x*20 + 20 * pipe[2][0], 20 + y*20 + 20 * pipe[2][1]); + // ctx.lineTo(20 + x*20 + 20 * pipe[3][0], 20 + y*20 + 20 * pipe[3][1]); + // ctx.stroke(); + // } + // } + // } + // } + // } + function gridData(tile){ - var res = 16; - var grid = new Array(256/res); - for(var i =0; i contour){ return "1"; @@ -75,24 +134,38 @@ S = [lerp(cell[2], cell[3], contour), 1], E = [1, lerp(cell[2], cell[1], contour)], W = [0, lerp(cell[3], cell[0], contour)] - // Blank + if (type === 0 || type === 15) return null; - // W - S - if (type === 1 || type === 14) return [W, S] - // S - E - if (type === 2 || type === 13) return [S, E] - // W - E - if (type === 3 || type === 12) return [W, E] - // N - E - if (type === 4 || type === 11) return [N, E] - // N - S - if (type === 6 || type === 9) return [N, S] - // W - N - if (type === 7 || type === 8) return [W, N] - // W - N / S - E - if (type === 5) return [W, N, S, E] - // W - S / N - E - if (type === 10) return [W, S, N, E] + + if (type === 1 || type === 14) return {"c":[W, S], "next": [[0,1],[-1,0]]} + + if (type === 2 || type === 13) return {"c":[S, E], "next": [[1,0],[0,1]]} + + if (type === 3 || type === 12) return {"c":[W, E], "next": [[1,0],[-1,0]]} + + if (type === 4 || type === 11) return {"c":[N, E], "next": [[1,0],[0,-1]]} + + if (type === 6 || type === 9) return {"c":[N, S], "next": [[0,1],[0,-1]]} + + if (type === 7 || type === 8) return {"c":[W, N], "next": [[0,-1],[-1,0]]} + + if (type === 5) { + if(JSON.stringify(line[line.length-1].pipe.next).indexOf("[1,0]")){ + return {"c":[W, N], "next": [[0,-1],[-1,0]]} + } + else{ + return {"c":[S, E], "next": [[1,0],[0,1]]} + } + } + + if (type === 10) { + if(JSON.stringify(line[line.length-1].pipe.next).indexOf("[1,0]")){ + return {"c":[N, E], "next": [[1,0],[0,-1]]} + } + else{ + return {"c":[W, S], "next": [[0,1],[-1,0]]} + } + } } // Linear interpolation