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