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/dancefloor.js
2015-01-16 21:23:22 +00:00

75 lines
1.9 KiB
JavaScript

'use strict';
/*global require, clearInterval, setInterval*/
var Drone = require('drone'),
blocks = require('blocks'),
SECOND = 1000;
/************************************************************************
### Drone.dancefloor() method
Create an animated dance floor of colored tiles some of which emit light.
The tiles change color every second creating a strobe-lit dance-floor effect.
See it in action here [http://www.youtube.com/watch?v=UEooBt6NTFo][ytdance]
#### Parameters
* width - how wide the dancefloor should be (optional: default 5)
* length - how long the dancefloor should be (optional: default 5)
* duration - the time duration for which the lights should change (optional: default 30 seconds)
#### Example
At the in-game prompt you can create a dancefloor by looking at a block and typing:
```javascript
/js dancefloor()
```
Alternatively you can create a new Drone object from a Player or Location object and call the dancefloor() method.
```javascript
var d = new Drone(player);
d.dancefloor();
```
[ytdance]: http://www.youtube.com/watch?v=UEooBt6NTFo
![dancefloor example](img/dancefloorex1.png)
***/
//
function dancefloor(width, length, duration)
{
if (typeof width == 'undefined')
width = 5;
if (typeof length == 'undefined')
length = width;
if (typeof duration === 'undefined'){
duration = 30;
}
//
// create a separate Drone object to lay down disco tiles
//
var disco = new Drone(this.x, this.y, this.z, this.dir, this.world);
//
// under-floor lighting
//
disco
.down()
.box( blocks.glowstone, width, 1, length)
.up();
//
// strobe gets called in a java thread - disco only lasts 30 seconds.
//
var task = null;
var strobe = function() {
disco.rand(blocks.rainbow, width, 1, length);
duration--;
if ( duration == 0 ){
// turn off the lights
clearInterval(task);
}
};
task = setInterval( strobe, 1 * SECOND);
}
Drone.extend( dancefloor );