UNPKG

obelisk.js-browserify-test

Version:

JavaScript Engine for Building Pixel Isometric Element with HTML5 Canvas

126 lines (103 loc) 4.49 kB
/*global obelisk:true*/ /* * Cube */ (function (obelisk) { "use strict"; var Cube, p; Cube = function (dimension, color, border, useDefaultCanvas) { this.initialize(dimension, color, border, useDefaultCanvas); }; p = Cube.prototype = new obelisk.AbstractPrimitive(); // public properties // constructor p.initialize = function (dimension, color, border, useDefaultCanvas) { this.initRender(dimension, color, border, useDefaultCanvas); this.initRectangle(); this.initBitmapData(); this.build(); this.renderBitmapDataForCanvas(); return this; }; // private method p.initRender = function (dimension, color, border, useDefaultCanvas) { this.useDefaultCanvas = useDefaultCanvas || false; this.border = border || border === undefined; this.dimension = dimension === undefined ? new obelisk.CubeDimension() : dimension; this.color = color === undefined ? new obelisk.CubeColor() : color; }; p.initRectangle = function () { this.w = this.dimension.xAxis + this.dimension.yAxis; this.h = this.dimension.zAxis + (this.dimension.xAxis + this.dimension.yAxis) / 2; // 22.6 degrees implementation this.w -= 2; this.h -= 1; // the matrix offset between the bitmap and the 3d pixel coordinate ZERO point this.matrix = new obelisk.Matrix(); this.matrix.tx = -this.dimension.yAxis + 2; this.matrix.ty = -this.dimension.zAxis; }; p.initBitmapData = function () { this.bitmapData = new obelisk.BitmapData(this.w, this.h, this.useDefaultCanvas); }; p.renderBitmapDataForCanvas = function () { this.canvas = this.bitmapData.canvas; }; p.build = function () { var brick, sideX, sideY, po_brick, po_x, po_y, ctx, bmd, offsetX, offsetY, i, j, k; // horizontal layer brick = new obelisk.Brick( new obelisk.BrickDimension(this.dimension.xAxis, this.dimension.yAxis), new obelisk.SideColor(this.color.border, this.color.horizontal), this.border ); // left side sideX = new obelisk.SideX( new obelisk.SideXDimension(this.dimension.xAxis, this.dimension.zAxis), new obelisk.SideColor(this.color.border, this.color.left), this.border ); // right side sideY = new obelisk.SideY( new obelisk.SideYDimension(this.dimension.yAxis, this.dimension.zAxis), new obelisk.SideColor(this.color.border, this.color.right), this.border ); po_brick = new obelisk.PixelObject(brick); po_x = new obelisk.PixelObject(sideX); po_y = new obelisk.PixelObject(sideY); ctx = this.bitmapData.context; ctx.drawImage(po_brick.canvas, po_brick.x + this.dimension.yAxis - 2, po_brick.y); ctx.drawImage(po_x.canvas, po_x.x, po_x.y + this.dimension.zAxis + this.dimension.yAxis / 2 - 1); ctx.drawImage(po_y.canvas, po_y.x + this.w - 2, po_x.y + this.dimension.zAxis + this.dimension.xAxis / 2 - 1); // highlight & highlight fix bmd = new obelisk.BitmapData(this.w, this.h); if (this.border) { offsetX = this.dimension.xAxis - 2; offsetY = (this.dimension.xAxis + this.dimension.yAxis) / 2 - 2; //the 2px in bounding without hightlight for (i = 0; i < this.dimension.xAxis - 2; i += 1) { bmd.setPixel(offsetX + 1 - i, offsetY - Math.floor(i / 2), this.color.borderHighlight); } //the 2px in bounding without hightlight for (j = 0; j < this.dimension.yAxis - 2; j += 1) { bmd.setPixel(offsetX + j, offsetY - Math.floor(j / 2), this.color.borderHighlight); } for (k = 0; k < this.dimension.zAxis; k += 1) { bmd.setPixel(offsetX, offsetY + k, this.color.borderHighlight); } } else { for (i = 0; i < this.dimension.zAxis; i += 1) { bmd.setPixel(this.dimension.xAxis - 2, (this.dimension.xAxis + this.dimension.yAxis) / 2 - 1 + i, this.color.left); } } bmd.context.putImageData(bmd.imageData, 0, 0); ctx.drawImage(bmd.canvas, 0, 0); }; // public methods p.toString = function () { return "[Cube]"; }; obelisk.Cube = Cube; }(obelisk));