diff --git a/panels/GameOfLife/script.js b/panels/GameOfLife/script.js new file mode 100755 index 0000000000000000000000000000000000000000..c4b7f05837cf4d1f9bb5e72f0bcb9879ea30c46f --- /dev/null +++ b/panels/GameOfLife/script.js @@ -0,0 +1,645 @@ +var GOLData = { + field: null, + canvas: null, + context: null, + vAmount: -1, + hAmount: -1, + sWidth: -1, + sHeight: -1, + panel: null, + config: null, + grid: 1 +}; + +binder.loaded = function(panel, config) { + GOLData.panel = panel; + GOLData.config = config; + GOLinit(); + GOLdraw(); + setTimeout(function(){setInterval(function() {GOLiterate(); GOLdraw();}, 100); }, 1000); +} + +function GOLinit(){ + //if(GOLData.config[initType] == "random") { + //GOLinitRandom(); + GOLinitText("FICKDICH"); + //} WTF config is so doch bullshit +} + +function GOLCreateField(vAmount,hAmount) { + GOLData.vAmount = vAmount; + GOLData.hAmount = hAmount; + var arr = []; + for (var i=0; i < vAmount; i++) { + arr[i] = []; + } + GOLData.field = arr; +} + +function GOLinitRandom(){ + GOLCreateField(500,500); + for (var i = 0; i < GOLData.vAmount; i++) { + for (var j = 0; j < GOLData.vAmount; j++){ + GOLData.field[i][j] = GOLrandom(0,3); + } + } +} + +function GOLrandom(min,max){ + return Math.floor((Math.random() * max) + min); +} + +function GOLinitStatic(){ + //Wait4Config +} + +function GOLinitText(text){ + GOLCreateField(4*6,2*6); + for (var i = 0; i < GOLData.vAmount; i++) { + for (var j = 0; j < GOLData.vAmount; j++){ + GOLData.field[i][j] = 0; + } + } + var charsPerLine = Math.floor(GOLData.vAmount/6); + var lines = Math.floor(GOLData.hAmount/6); + var j = 0; + var i = 0; + var c = 0; + while(i < charsPerLine) { + switch(text.charAt(c)){ + case 'A': + monoSpace.A(GOLData.field,i*6,j*6); + break; + case 'B': + monoSpace.B(GOLData.field,i*6,j*6); + break; + case 'C': + monoSpace.C(GOLData.field,i*6,j*6); + break; + case 'D': + monoSpace.D(GOLData.field,i*6,j*6); + break; + case 'E': + monoSpace.E(GOLData.field,i*6,j*6); + break; + case 'F': + monoSpace.F(GOLData.field,i*6,j*6); + break; + case 'G': + monoSpace.G(GOLData.field,i*6,j*6); + break; + case 'H': + monoSpace.H(GOLData.field,i*6,j*6); + break; + case 'I': + monoSpace.I(GOLData.field,i*6,j*6); + break; + case 'J': + monoSpace.J(GOLData.field,i*6,j*6); + break; + case 'K': + monoSpace.K(GOLData.field,i*6,j*6); + break; + case 'L': + monoSpace.L(GOLData.field,i*6,j*6); + break; + case 'M': + monoSpace.M(GOLData.field,i*6,j*6); + break; + case 'N': + monoSpace.N(GOLData.field,i*6,j*6); + break; + case 'O': + monoSpace.O(GOLData.field,i*6,j*6); + break; + case 'P': + monoSpace.P(GOLData.field,i*6,j*6); + break; + case 'Q': + monoSpace.Q(GOLData.field,i*6,j*6); + break; + case 'R': + monoSpace.R(GOLData.field,i*6,j*6); + break; + case 'S': + monoSpace.S(GOLData.field,i*6,j*6); + break; + case 'T': + monoSpace.T(GOLData.field,i*6,j*6); + break; + case 'U': + monoSpace.U(GOLData.field,i*6,j*6); + break; + case 'V': + monoSpace.V(GOLData.field,i*6,j*6); + break; + case 'W': + monoSpace.W(GOLData.field,i*6,j*6); + break; + case 'X': + monoSpace.X(GOLData.field,i*6,j*6); + break; + case 'Y': + monoSpace.Y(GOLData.field,i*6,j*6); + break; + case 'Z': + monoSpace.Z(GOLData.field,i*6,j*6); + break; + } + if(i >= charsPerLine-1){ + i = 0; + j++; + } else { + i++; + } + if(j == lines) { + break; + } + c++; + } +} + +function GOLiterate() { + var temp = GOLData.field.slice(0); + for (var i = 0; i < GOLData.vAmount; i++) { + for (var j = 0; j < GOLData.vAmount; j++){ + var cell = temp[i][j]; + if(cell == 1) { + var alife = GOLcountLife(temp,i,j); + if (alife < 2){ + GOLData.field[i][j] = 2; + } else if(alife > 3){ + GOLData.field[i][j] = 2; + } + } else { + var alife = GOLcountLife(temp,i,j); + if(alife == 3){ + GOLData.field[i][j] = 1; + } + } + } + } +} + +function GOLisLife(cell){ + if(cell == 1) { + return 1 + } else { + return 0 + } +} + +function GOLcountLife(temp,x,y){ + var value = 0; + if(x+1 < GOLData.vAmount){ + if(y+1 < GOLData.hAmount){ + value += GOLisLife(temp[x+1][y+1]); + } + value += GOLisLife(temp[x+1][y]); + if(y-1 >= 0){ + value += GOLisLife(temp[x+1][y-1]); + } + } + if(y+1 < GOLData.hAmount){ + value += GOLisLife(temp[x][y+1]); + } + if(y-1 >= 0){ + value += GOLisLife(temp[x][y-1]); + } + if(x-1 >= 0){ + if(y+1 < GOLData.hAmount){ + value += GOLisLife(temp[x-1][y+1]); + } + value += GOLisLife(temp[x-1][y]); + if(y-1 >= 0){ + value += GOLisLife(temp[x-1][y-1]); + } + } + return value; +} + +function GOLisDead(cell){ + if(cell == 2) { + return 1 + } else { + return 0 + } +} + +function GOLcountDead(temp,x,y){ + var value = 0; + if(x+1 < GOLData.vAmount){ + if(y+1 < GOLData.hAmount){ + value += GOLisDead(temp[x+1][y+1]); + } + value += GOLisDead(temp[x+1][y]); + if(y-1 >= 0){ + value += GOLisDead(temp[x+1][y-1]); + } + } + if(y+1 < GOLData.hAmount){ + value += GOLisDead(temp[x][y+1]); + } + if(y-1 >= 0){ + value += GOLisDead(temp[x][y-1]); + } + if(x-1 >= 0){ + if(y+1 < GOLData.hAmount){ + value += GOLisDead(temp[x-1][y+1]); + } + value += GOLisDead(temp[x-1][y]); + if(y-1 >= 0){ + value += GOLisDead(temp[x-1][y-1]); + } + } + return value; +} + +function GOLinitDraw(){ + GOLData.canvas = document.getElementById("GOLCanvas"); + GOLData.context = document.getElementById("GOLCanvas").getContext("2d"); + GOLData.canvas.width = panel.width(); + GOLData.canvas.height = panel.height(); + if(GOLData.grid) { + GOLData.sWidth = (GOLData.canvas.width-(GOLData.vAmount+1)) / GOLData.vAmount; + GOLData.sHeight = (GOLData.canvas.height-(GOLData.hAmount+1)) / GOLData.hAmount; + } else { + GOLData.sWidth = GOLData.canvas.width / GOLData.vAmount; + GOLData.sHeight = GOLData.canvas.height / GOLData.hAmount; + } +} + +function GOLdraw() { + GOLinitDraw(); + if(GOLData.grid) { + for (var i = 0; i < GOLData.vAmount; i++) { + for (var j = 0; j < GOLData.hAmount; j++){ + GOLdrawSquare((i*GOLData.sWidth)+i+1, (j*GOLData.sHeight)+j+1, GOLData.field[i][j]) + } + } + for(var i = 0; i <= GOLData.vAmount;i++) { + for(var j = 0; j <= GOLData.hAmount ;j++) { + GOLData.context.beginPath(); + GOLData.context.moveTo(i* GOLData.sWidth + i, 0); + GOLData.context.lineTo(i* GOLData.sWidth + i,j * GOLData.sHeight + j); + GOLData.context.stroke(); + GOLData.context.beginPath(); + GOLData.context.moveTo(0, j * GOLData.sHeight + j); + GOLData.context.lineTo(i * GOLData.sWidth + i,j * GOLData.sHeight + j); + GOLData.context.stroke(); + } + } + } else { + for (var i = 0; i < GOLData.vAmount; i++) { + for (var j = 0; j < GOLData.hAmount; j++){ + GOLdrawSquare((i*GOLData.sWidth), (j*GOLData.sHeight), GOLData.field[i][j]) + } + } + } +} + +function GOLdrawSquare(x,y,status){ + switch (status) { + case 0: + GOLData.context.fillStyle = "#FFFFFF"; + break; + case 1: + GOLData.context.fillStyle = "#00FF00"; + break; + case 2: + GOLData.context.fillStyle = "#FF0000"; + break; + } + GOLData.context.fillRect(x,y,GOLData.sWidth,GOLData.sHeight); +} + +var monoSpace = { +A: function A(array,x,y){ + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+1][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+2][y+3] = 1; + array[x+3][y+3] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+4][y+4] = 1; + array[x+1][y+5] = 1; + array[x+4][y+5] = 1; + }, +B: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+1][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+2][y+3] = 1; + array[x+3][y+3] = 1; + array[x+1][y+4] = 1; + array[x+4][y+4] = 1; + array[x+1][y+5] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + }, +C: function (array,x,y){ + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+4][y+1] = 1; + array[x+1][y+2] = 1; + array[x+1][y+3] = 1; + array[x+1][y+4] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + array[x+4][y+5] = 1; + }, +D: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+1][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+4][y+4] = 1; + array[x+1][y+5] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + }, +E: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+4][y+1] = 1; + array[x+1][y+2] = 1; + array[x+1][y+3] = 1; + array[x+2][y+3] = 1; + array[x+3][y+3] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+1][y+5] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + array[x+4][y+5] = 1; + }, +F: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+4][y+1] = 1; + array[x+1][y+2] = 1; + array[x+1][y+3] = 1; + array[x+2][y+3] = 1; + array[x+3][y+3] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+1][y+5] = 1; + }, +G: function (array,x,y){ + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+4][y+1] = 1; + array[x+1][y+2] = 1; + array[x+1][y+3] = 1; + array[x+3][y+3] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+4][y+4] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + array[x+4][y+5] = 1; + }, +H: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+4][y+1] = 1; + array[x+1][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+2][y+3] = 1; + array[x+3][y+3] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+4][y+4] = 1; + array[x+1][y+5] = 1; + array[x+4][y+5] = 1; + }, +I: function (array,x,y){ + array[x+2][y+1] = 1; + array[x+2][y+2] = 1; + array[x+2][y+3] = 1; + array[x+2][y+4] = 1; + array[x+2][y+5] = 1; + }, +J: function (array,x,y){ + array[x+4][y+1] = 1; + array[x+4][y+2] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+4][y+4] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + }, +K: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+4][y+1] = 1; + array[x+1][y+2] = 1; + array[x+3][y+2] = 1; + array[x+1][y+3] = 1; + array[x+2][y+3] = 1; + array[x+1][y+4] = 1; + array[x+3][y+4] = 1; + array[x+1][y+5] = 1; + array[x+4][y+5] = 1; + }, +L: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+1][y+2] = 1; + array[x+1][y+3] = 1; + array[x+1][y+4] = 1; + array[x+1][y+5] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + }, +M: function (array,x,y){ + array[x+0][y+1] = 1; + array[x+4][y+1] = 1; + array[x+0][y+2] = 1; + array[x+1][y+2] = 1; + array[x+3][y+2] = 1; + array[x+4][y+2] = 1; + array[x+0][y+3] = 1; + array[x+2][y+3] = 1; + array[x+4][y+3] = 1; + array[x+0][y+4] = 1; + array[x+4][y+4] = 1; + array[x+0][y+5] = 1; + array[x+4][y+5] = 1; + }, +N: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+4][y+1] = 1; + array[x+1][y+2] = 1; + array[x+2][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+3][y+3] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+4][y+4] = 1; + array[x+1][y+5] = 1; + array[x+4][y+5] = 1; + }, +O: function (array,x,y){ + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+1][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+4][y+4] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + }, +P: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+1][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+2][y+3] = 1; + array[x+3][y+3] = 1; + array[x+1][y+4] = 1; + array[x+1][y+5] = 1; + }, +Q: function (array,x,y){ + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+1][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+3][y+4] = 1; + array[x+2][y+5] = 1; + array[x+4][y+5] = 1; + }, +R: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+1][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+2][y+3] = 1; + array[x+3][y+3] = 1; + array[x+1][y+4] = 1; + array[x+3][y+4] = 1; + array[x+1][y+5] = 1; + array[x+4][y+5] = 1; + }, +S: function (array,x,y){ + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+4][y+1] = 1; + array[x+1][y+2] = 1; + array[x+2][y+3] = 1; + array[x+3][y+3] = 1; + array[x+4][y+4] = 1; + array[x+1][y+5] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + }, +T: function (array,x,y){ + array[x+0][y+1] = 1; + array[x+1][y+1] = 1; + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+4][y+1] = 1; + array[x+2][y+2] = 1; + array[x+2][y+3] = 1; + array[x+2][y+4] = 1; + array[x+2][y+5] = 1; + }, +U: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+4][y+1] = 1; + array[x+1][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+4][y+4] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + }, +V: function (array,x,y){ + array[x+0][y+1] = 1; + array[x+4][y+1] = 1; + array[x+0][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+3][y+3] = 1; + array[x+1][y+4] = 1; + array[x+3][y+4] = 1; + array[x+2][y+5] = 1; + }, +W: function W(array,x,y){ + array[x+0][y+1] = 1; + array[x+2][y+1] = 1; + array[x+4][y+1] = 1; + array[x+0][y+2] = 1; + array[x+2][y+2] = 1; + array[x+4][y+2] = 1; + array[x+0][y+3] = 1; + array[x+2][y+3] = 1; + array[x+4][y+3] = 1; + array[x+1][y+4] = 1; + array[x+3][y+4] = 1; + array[x+1][y+5] = 1; + array[x+3][y+5] = 1; + }, +X: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+4][y+1] = 1; + array[x+1][y+2] = 1; + array[x+4][y+2] = 1; + array[x+2][y+3] = 1; + array[x+3][y+3] = 1; + array[x+1][y+4] = 1; + array[x+4][y+4] = 1; + array[x+1][y+5] = 1; + array[x+4][y+5] = 1; + }, +Y: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+4][y+1] = 1; + array[x+1][y+2] = 1; + array[x+4][y+2] = 1; + array[x+1][y+3] = 1; + array[x+2][y+3] = 1; + array[x+3][y+3] = 1; + array[x+4][y+3] = 1; + array[x+4][y+4] = 1; + array[x+1][y+5] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + }, +Z: function (array,x,y){ + array[x+1][y+1] = 1; + array[x+2][y+1] = 1; + array[x+3][y+1] = 1; + array[x+4][y+1] = 1; + array[x+4][y+2] = 1; + array[x+2][y+3] = 1; + array[x+3][y+3] = 1; + array[x+1][y+4] = 1; + array[x+1][y+5] = 1; + array[x+2][y+5] = 1; + array[x+3][y+5] = 1; + array[x+4][y+5] = 1; + } +} diff --git a/panels/GameOfLife/style.css b/panels/GameOfLife/style.css new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/panels/GameOfLife/template.html b/panels/GameOfLife/template.html new file mode 100755 index 0000000000000000000000000000000000000000..2ee9a4d6e80d9bc365c4c64dbef4e66129eb55ce --- /dev/null +++ b/panels/GameOfLife/template.html @@ -0,0 +1 @@ +<canvas id="GOLCanvas"/>