'use strict'; /*global require, module*/ /************************************************************************ ### Drone.prism() method Creates a prism. This is useful for roofs on houses. #### Parameters * block - the block id - e.g. 6 for an oak sapling or '6:2' for a birch sapling. Alternatively you can use any one of the `blocks` values e.g. `blocks.sapling.birch` * width - the width of the prism * length - the length of the prism (will be 2 time its height) #### Example prism(blocks.oak,3,12); ![prism example](img/prismex1.png) ### Drone.prism0() method A variation on `prism` which hollows out the inside of the prism. It uses the same parameters as `prism`. ***/ var STAIRBLOCKS = { 53: '5:0' // oak wood ,67: 4 // cobblestone ,108: 45 // brick ,109: 98 // stone brick ,114: 112 // nether brick ,128: 24 // sandstone ,134: '5:1' // spruce wood ,135: '5:2' // birch wood ,136: '5:3' // jungle wood ,156: 155 // quartz }; // // prism private implementation // function prism( block, w, d ) { var stairEquiv = STAIRBLOCKS[block]; if ( stairEquiv ) { this .fwd() .prism( stairEquiv,w,d-2 ) .back() .stairs(block, w, d / 2) .fwd(d - 1) .right(w - 1) .turn(2) .stairs(block, w, d / 2) .turn(2) .left(w - 1) .back(d - 1); }else{ var c = 0; var d2 = d; while ( d2 >= 1 ) { this.cuboid(block,w,1,d2 ); d2 -= 2; this.fwd( ).up( ); c++; } this.down(c ).back(c ); } return this; }; // // prism0 private implementation // function prism0( block,w,d ) { this .stairs(block,w,d/2) .fwd(d-1) .right(w-1) .turn(2) .stairs(block,w,d/2) .turn(2) .left(w-1) .back(d-1); var se = STAIRBLOCKS[block]; if (se) { this .fwd() .prism(se,1,d-2) .right(w-1) .prism(se,1,d-2) .left(w-1) .back(); } } module.exports = function(Drone){ Drone.extend(prism0); Drone.extend(prism); };