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/plugins/drone/contrib/fort.js

102 lines
2 KiB
JavaScript

'use strict';
var Drone = require('drone');
var blocks = require('blocks');
//
// constructs a medieval fort
//
function fort( side, height ) {
var turret,
i,
torch;
if ( typeof side == 'undefined' ) {
side = 18;
}
if ( typeof height == 'undefined' ) {
height = 6;
}
// make sure side is even
if ( side % 2 ) {
side++;
}
var battlementWidth = 3;
if ( side <= 12 ) {
battlementWidth = 2;
}
if ( height < 4 || side < 10 ) {
throw new java.lang.RuntimeException('Forts must be at least 10 wide X 4 tall');
}
//
// build walls.
//
this
.chkpt('fort')
.down()
.chessboard( blocks.wool.black, blocks.wool.white, side)
.up()
.box0( blocks.brick.stone, side, height - 1, side)
.up(height-1);
//
// build battlements
//
for ( i = 0; i <= 3; i++ ) {
turret = [
blocks.stairs.stone ,
blocks.stairs.stone + ':'+ Drone.PLAYER_STAIRS_FACING[ (this.dir + 2) % 4 ]
];
this
.box( blocks.brick.stone ) // solid brick corners
.up()
.box(blocks.torch)
.down() // light a torch on each corner
.fwd()
.boxa( turret, 1, 1, side-2)
.fwd( side-2 )
.turn();
}
//
// build battlement's floor
//
this
.move('fort')
.up(height-2)
.fwd()
.right();
for ( i = 0; i < battlementWidth; i++ ) {
this
.box0(blocks.slab.oak, side - ( 2 + (i * 2) ), 1, side - ( 2 + ( i * 2) ))
.fwd()
.right();
}
//
// add door
//
torch = blocks.torch + ':' + Drone.PLAYER_TORCH_FACING[this.dir];
this
.move('fort')
.right((side/2)-1)
.door2() // double doors
.back()
.left()
.up()
.box(torch) // left torch
.right(3)
.box(torch); // right torch
//
// add ladder up to battlements
//
this
.move('fort')
.right((side/2)-3)
.fwd(1) // move inside fort
.turn(2)
.box(blocks.air, 1, height-1, 1)
.ladder(height-1)
.move('fort');
}
Drone.extend(fort);