This repository has been archived on 2021-07-14. You can view files and clone it, but cannot push or open issues or pull requests.
scriptcraft/src/main/js/modules/drone/prism.js

99 lines
2 KiB
JavaScript

'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);
};