UNPKG

internet-of-buckets

Version:

http wrapper for controlling /The Internet of Buckets/ art installation

174 lines (161 loc) 2.67 kB
var set = require('../iob') function makeWorld (old) { var w = new Array(5).fill(0).map(function () { return new Array(10).fill([0, 0, 0]) }) for (var i=0; i < 10; i++) { for (var j=0; j < 5; j++) { w[j][i] = old ? old[j][i] : [0, 0, 0] } } return w } var world = makeWorld() var letters = { ' ': [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], 'A': [ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1 ], 'I': [ 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1 ], 'B': [ 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0 ], 'C': [ 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1 ], 'K': [ 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1 ], 'T': [ 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0 ], 'H': [ 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1 ], 'E': [ 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1 ], 'P': [ 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0 ], 'L': [ 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1 ], 'N': [ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1 ], 'N': [ 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1 ], } function letter (world, letter, x, rgb) { var next = makeWorld(world) var data = letters[letter] for (var i=x; i < x+3; i++) { for (var j=0; j < 5; j++) { var xx = (i-x) % 10 var col = data[xx + j*3] next[j][i] = col ? rgb : [0, 0, 0] // console.log(i, j, col, next[j][i]) } } return next } function render (world) { for (var i=0; i < 10; i++) { for (var j=0; j < 5; j++) { set(i, j, world[j][i]) } } } function renderSync (world, cb) { var n = 50 for (var i=0; i < 10; i++) { for (var j=0; j < 5; j++) { set(i, j, world[j][i], function () { n-- if (n <= 0 && cb) return cb() }) } } } function string (world, txt, offset, rgb) { return txt.split('').reduce(function (w, l) { var res = letter(w, l, offset, rgb) offset += 4 return res }, world) } var x = 8 function step (world) { x -= 0.5 var offset = Math.floor(x) var intensity = ((Math.sin(new Date().getTime() / 500) + 1) / 2) * 8 + 32 return string(makeWorld(), 'HACK THE PLANET', offset, [intensity, 0, 0]) // world = letter(world, 'H', x, [8, 0, 0]) // world = letter(world, 'I', x+4, [8, 0, 0]) return world } function frame () { world = makeWorld() world = step(world) renderSync(world, frame) } frame() // var world =