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
2015-01-16 21:20:34 +00:00

127 lines
2.6 KiB
JavaScript

'use strict';
/*global require */
var Drone = require('drone'),
blocks = require('blocks');
/************************************************************************
### Drone.fort() method
Constructs a medieval fort.
#### Parameters
* side - How many blocks whide and long the fort will be (default: 18 . Must be greater than 9)
* height - How tall the fort will be (default: 6 . Must be greater than 3)
#### Example
At the in-game prompt you can create a fort by looking at a block and typing:
```javascript
/js fort()
```
Alternatively you can create a new Drone object from a Player or Location object and call the fort() method.
```javascript
var d = new Drone(player);
d.fort();
```
![fort example](img/fortex1.png)
***/
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++ ) {
var bside = side - ( 2 + (i * 2) );
this
.box0( blocks.slab.oak, bside, 1, bside)
.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() // move inside fort
.turn( 2 )
.box( blocks.air, 1, height - 1, 1)
.ladder( height - 1 )
.move( 'fort' );
}
Drone.extend(fort);