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/lcd-clock.js
2015-01-16 21:20:34 +00:00

106 lines
2.6 KiB
JavaScript

'use strict';
/*global require, setInterval, clearInterval, __plugin, exports*/
/*************************************************************************
### Drone.lcdclock() method.
Constructs a large LCD Clock. The clock will display the current time of day.
The clock can be stopped by calling the stopLCD() method of the Drone which created the clock.
#### Parameters
* foregroundBlock (Optional - default is blocks.glowstone)
* backgroundBlock (Optional - default is blocks.wool.black)
* borderBlock (Optional - a border around the LCD display - default none)
#### Example
At the in-game prompt you can create a LCD clock by looking at a block and typing:
```javascript
/js var clock = lcdclock()
/js clock.stopLCD()
```
Alternatively you can create a new Drone object from a Player or Location object and call the lcdclock() method.
```javascript
var d = new Drone(player);
d.lcdclock();
d.stopLCD();
```
![lcdclock example](img/lcdclockex1.png)
***/
var blocks = require('blocks'),
utils = require('utils'),
Drone = require('drone');
function lcdclock(fgColor, bgColor, border){
var drone = this;
var lastSecs = [0,0,0,0],
world = drone.world,
intervalId = -1;
function update(secs) {
var digits = [0,0,0,0],
s = secs % 60,
m = (secs - s) / 60;
digits[3] = s%10;
digits[2] = (s-digits[3])/10;
digits[1] = m%10;
digits[0] = (m-digits[1])/10;
//
// updating all 4 digits each time is expensive
// only update digits which have changed (in most cases - just 1)
//
if (digits[3] != lastSecs[3]){
drone
.right(14)
.blocktype(''+digits[3],fgColor,bgColor, true)
.left(14);
}
if (digits[2] != lastSecs[2]){
drone
.right(10)
.blocktype(''+digits[2],fgColor,bgColor, true)
.left(10);
}
if (digits[1] != lastSecs[1]){
drone
.right(4)
.blocktype(''+digits[1], fgColor, bgColor, true)
.left(4);
}
if (digits[0] != lastSecs[0]){
drone
.blocktype(''+digits[0], fgColor, bgColor, true);
}
lastSecs[0] = digits[0];
lastSecs[1] = digits[1];
lastSecs[2] = digits[2];
lastSecs[3] = digits[3];
}
if ( typeof bgColor == 'undefined' ) {
bgColor = blocks.wool.black;
}
if ( typeof fgColor == 'undefined' ) {
fgColor = blocks.glowstone ;
}
if ( border ) {
drone.box(border,21,9,1);
drone.up().right();
}
drone.blocktype('00:00', fgColor, bgColor, true);
function tick() {
var timeOfDayInMins = utils.time24(world);
update( timeOfDayInMins );
}
intervalId = setInterval(tick, 800);
this.stopLCD = function(){
clearInterval(intervalId);
};
}
Drone.extend(lcdclock);