UNPKG

obelisk.js

Version:

JavaScript Library for Building Pixel Isometric Element with HTML5 Canvas

107 lines (94 loc) 2.93 kB
// control bar var ControlBar = function () { this.size = 10; this.height = 24; this.threshold = 130; }; var con = new ControlBar(); var gui = new dat.GUI(); var conSize = gui.add(con, 'size', 6, 20).step(2); var conHeight = gui.add(con, 'height', 4, 100).step(1); var conThreshold = gui.add(con, 'threshold', 80, 200).step(1); conSize.onChange(function () { buildPrimitive(); draw(); }); conHeight.onChange(function () { buildPrimitive(); draw(); }); conThreshold.onChange(function () { buildPrimitive(); draw(); }); // color patterns var colorData = ['#CCFF00', '#FF0099', '#FF7CBF', '#EEEEEE', '#666666']; var iMax = colorData.length; var colorHtml = ''; for (var i = 0; i < iMax; i++) { colorHtml += '<li style="background-color: ' + colorData[i] + '"></li>'; } $('#color-box').html(colorHtml); $('#color-box').find('li').on('click', function () { var index = $(this).index(); color = parseInt(colorData[index].replace('#', '0x'), 16); buildPrimitive(); draw(); }); // input field var ipt = $('#ipt'); ipt.on('keyup', draw); ipt.on('click', function () { $(this).select(); }); // input off canvas var offCanvas = $('#canvas-txt').get(0); var ctx = offCanvas.getContext("2d"); ctx.font = "20px Helvetica,sans-serif"; // pixel view var canvas = $('#canvas-demo'); var point = new obelisk.Point(150, 30); var pixelView = new obelisk.PixelView(canvas, point); var brick; var cube; var color = 0xCCFF00; // build method function buildPrimitive() { // floor var colorBrick = new obelisk.SideColor(0xAAAAAA, 0xEEEEEE); var dimensionBrick = new obelisk.BrickDimension(con.size, con.size); brick = new obelisk.Brick(dimensionBrick, colorBrick); // cube var colorCube = new obelisk.CubeColor().getByHorizontalColor(color); var dimensionCube = new obelisk.CubeDimension(con.size, con.size, con.height); cube = new obelisk.Cube(dimensionCube, colorCube, false); } function draw() { var size = con.size; var txtWidth = offCanvas.width; var txtHeight = offCanvas.height; // clear everything pixelView.clear(); ctx.clearRect(0, 0, txtWidth, txtHeight); ctx.fillText(ipt.val(), 2, 18); var textData = ctx.getImageData(0, 0, txtWidth, txtHeight); for (var y = 0; y <= txtHeight; y++) { for (var x = 0; x <= txtWidth; x++) { var p3d = new obelisk.Point3D(x * (size - 2), y * (size - 2), 0); pixelView.renderObject(brick, p3d); } } for (var y = 0; y < txtHeight; y++) { for (var x = 0; x < txtWidth; x++) { // check pixel var index = (y * textData.width + x) * 4; if (textData.data[index + 3] > con.threshold) { var p3d = new obelisk.Point3D(x * (size - 2), y * (size - 2), 0); pixelView.renderObject(cube, p3d); } } } } // main buildPrimitive(); draw();