"use strict";
/** @namespace Patterns */
/**
* Update pattern selector component on the index.html and also sets
* the default pattern on game's grid.
* @member
* @memberof Patterns
*/
var setupPatterns = function () {
// populate patternSelector with supported patterns
for (var key in allPatterns) {
$('#patternSelector').append($('<option>', {
value: key,
text: allPatterns[key].name,
}));
}
// set default pattern on selector
$("#patternSelector").val(defaults.pattern);
// update game's default pattern
game.setPattern(allPatterns[$("#patternSelector").val()]);
}
//// GAME PATTERNS ////
/**
* Returns all supported patterns (key, val)
* @member
* @memberof Patterns
*/
var allPatterns = {
'clear': { name: "Clear", get: emptyPattern },
'random': { name: "Random", get: randomPattern },
'gameoflife': { name: "Game Of Life", get: gameOfLifeLettersPattern },
'gliderGun': { name: "Gosper Glider Gun", get: gosperGliderGunPattern }
};
/**
* Clear grid pattern
* @member
* @memberof Patterns
*/
function emptyPattern() {
return Array.from(Array(defaults.lines).fill(0));
}
/**
* Random cells pattern
* @member
* @memberof Patterns
*/
function randomPattern() {
function rand() { return Math.floor(Math.random() * defaults.lines); }
function getRandomCell() { return [rand(), rand()]; }
var density = 2500 // number of cells to create - TODO: parameterize to allow throttling
var coordinates = Array.from(Array(density));
return coordinates.map(getRandomCell);
}
/**
* Gosper's Glider Gun pattern
* @member
* @memberof Patterns
*/
function gosperGliderGunPattern() {
return [
[1, 5], [1, 6], [2, 5], [2, 6], [11, 5], [11, 6], [11, 7], [12, 4],
[12, 8], [13, 3], [13, 9], [14, 3], [14, 9], [15, 6], [16, 4],
[16, 8], [17, 5], [17, 6], [17, 7], [18, 6], [21, 3], [21, 4],
[21, 5], [22, 3], [22, 4], [22, 5], [23, 2], [23, 6], [25, 1],
[25, 2], [25, 6], [25, 7], [35, 3], [35, 4], [36, 3], [36, 4],
];
}
function gameOfLifeLettersPattern() {
return [].concat(G, A, M, E, O, F, L, I, FF, EE)
}
// const G = [[18, 14], [17, 14], [16, 14], [15, 14], [14, 14], [13, 14], [18, 15], [17, 15], [16, 15], [15, 15], [14, 15], [13, 15], [16, 16], [15, 17], [14, 17], [14, 18], [13, 18], [13, 19], [12, 19], [11, 19], [11, 20], [10, 20], [9, 20], [8, 20], [7, 20], [6, 20], [6, 19], [6, 18], [5, 18], [4, 17], [5, 19], [7, 19], [8, 19], [9, 19], [10, 19], [15, 16], [14, 16], [13, 17], [12, 17], [12, 18], [11, 18], [10, 18], [9, 18], [8, 18], [7, 18], [4, 18], [3, 17], [3, 16], [3, 15], [3, 14], [3, 13], [3, 12], [4, 12], [4, 11], [4, 10], [4, 9], [4, 8], [5, 8], [5, 7], [6, 7], [6, 6], [7, 6], [8, 6], [8, 5], [9, 5], [10, 5], [11, 5], [12, 5], [13, 5], [14, 5], [15, 5], [15, 6], [16, 7], [16, 6], [17, 7], [17, 8], [16, 8], [15, 8], [15, 7], [14, 7], [13, 7], [13, 6], [14, 6], [12, 6], [12, 7], [11, 7], [10, 7], [9, 7], [9, 6], [11, 6], [10, 6], [8, 7], [7, 7], [3, 11], [3, 10], [3, 9], [4, 13], [4, 15], [4, 14], [4, 16], [2, 11], [2, 12], [2, 13], [2, 14], [2, 15], [2, 16], [6, 8], [7, 8], [5, 9], [6, 9], [5, 10], [5, 11], [5, 12], [5, 13], [5, 14], [5, 15], [5, 16], [5, 17], [6, 16], [7, 17], [6, 17], [19, 13], [18, 13], [17, 13], [16, 13], [15, 13], [14, 13], [13, 13], [12, 13], [12, 14], [19, 14], [18, 8]],
const G = [[18, 12], [17, 12], [16, 12], [15, 12], [14, 12], [13, 12], [12, 12], [11, 12], [15, 13], [15, 14], [15, 15], [15, 16], [15, 17], [15, 18], [15, 19], [15, 20], [14, 20], [13, 20], [12, 20], [11, 20], [10, 20], [9, 20], [8, 20], [7, 20], [6, 20], [5, 20], [4, 20], [3, 20], [3, 19], [3, 18], [3, 17], [3, 16], [3, 15], [3, 14], [3, 13], [3, 12], [3, 11], [3, 10], [3, 9], [3, 8], [3, 7], [3, 6], [3, 5], [3, 4], [4, 4], [5, 4], [6, 4], [7, 4], [8, 4], [9, 4], [10, 4], [11, 4], [12, 4], [13, 4], [14, 4], [15, 4], [15, 5], [14, 5], [13, 5], [12, 5], [11, 5], [10, 5], [9, 5], [8, 5], [7, 5], [6, 5], [5, 5], [4, 5], [14, 13], [14, 14], [14, 15], [14, 16], [14, 17], [14, 18], [14, 19], [13, 19], [12, 19], [11, 19], [10, 19], [9, 19], [8, 19], [7, 19], [6, 19], [5, 19], [4, 19], [4, 18], [4, 17], [4, 16], [4, 15], [4, 14], [4, 13], [4, 12], [4, 11], [4, 10], [4, 9], [4, 8], [4, 7], [4, 6], [14, 6], [15, 6]],
A = [[20, 20], [21, 19], [21, 18], [22, 18], [22, 17], [23, 16], [23, 15], [23, 14], [24, 13], [24, 12], [24, 11], [25, 10], [25, 9], [25, 8], [26, 8], [26, 7], [26, 6], [26, 5], [27, 5], [28, 5], [28, 6], [28, 7], [29, 7], [29, 8], [29, 9], [29, 10], [29, 11], [30, 11], [30, 12], [31, 12], [31, 13], [31, 14], [31, 15], [32, 15], [32, 16], [33, 16], [33, 17], [33, 18], [34, 18], [34, 19], [34, 20], [35, 20], [32, 14], [30, 10], [28, 8], [27, 6], [27, 7], [27, 8], [25, 7], [25, 11], [24, 10], [23, 12], [23, 13], [22, 15], [22, 16], [28, 9], [26, 9], [30, 13], [29, 13], [28, 13], [27, 13], [26, 13], [25, 13], [24, 14], [25, 14], [26, 15], [27, 15], [28, 15], [29, 15], [29, 14], [30, 14], [28, 14], [27, 14], [26, 14], [24, 15], [25, 15], [30, 15], [33, 20], [32, 20], [31, 20], [33, 19], [32, 19], [32, 18], [32, 17], [31, 16], [31, 17], [30, 16], [29, 16], [28, 16], [27, 16], [26, 16], [25, 16], [24, 16], [23, 17], [23, 18], [23, 19], [22, 19], [21, 20], [22, 20], [23, 20], [24, 20], [24, 17]],
M = [[37, 20], [37, 19], [37, 18], [37, 17], [37, 16], [37, 15], [37, 14], [37, 13], [37, 12], [37, 11], [37, 10], [37, 9], [37, 8], [37, 7], [37, 6], [37, 5], [38, 5], [38, 6], [38, 7], [38, 8], [38, 9], [38, 10], [38, 11], [39, 11], [39, 12], [38, 12], [38, 13], [38, 14], [38, 15], [38, 16], [38, 17], [38, 18], [38, 19], [38, 20], [39, 5], [39, 6], [39, 7], [39, 8], [39, 9], [39, 10], [40, 12], [40, 13], [41, 13], [41, 14], [42, 14], [42, 15], [42, 13], [43, 13], [44, 13], [44, 12], [43, 14], [45, 12], [45, 13], [45, 14], [45, 15], [45, 16], [46, 16], [46, 17], [46, 18], [46, 19], [46, 20], [47, 20], [47, 19], [47, 18], [47, 17], [47, 16], [47, 15], [46, 15], [46, 14], [46, 13], [46, 12], [46, 11], [46, 10], [46, 9], [46, 8], [46, 7], [46, 6], [46, 5], [47, 14], [47, 13], [47, 12], [47, 11], [47, 10], [47, 9], [47, 8], [47, 7], [47, 6], [47, 5], [45, 11], [45, 10], [45, 9], [45, 8], [45, 7], [45, 6], [45, 5], [39, 13], [39, 14], [39, 15], [39, 16], [41, 12], [41, 11], [40, 11], [40, 10], [40, 9], [43, 12], [43, 11], [44, 11], [44, 10], [44, 9], [42, 12], [42, 11], [43, 10], [44, 8], [40, 8], [41, 10]],
E = [[52, 5], [52, 6], [52, 7], [52, 8], [52, 9], [52, 10], [52, 11], [52, 12], [52, 13], [52, 14], [52, 15], [52, 16], [52, 17], [52, 18], [52, 19], [52, 20], [53, 20], [54, 20], [55, 20], [56, 20], [57, 20], [58, 20], [59, 20], [60, 20], [61, 20], [62, 20], [62, 19], [61, 19], [60, 19], [59, 19], [58, 19], [57, 19], [56, 19], [55, 19], [54, 19], [53, 19], [53, 6], [53, 7], [53, 8], [53, 9], [53, 10], [53, 11], [53, 12], [53, 13], [53, 14], [53, 15], [53, 16], [53, 17], [53, 18], [53, 5], [54, 5], [55, 5], [56, 5], [57, 5], [58, 5], [59, 5], [59, 6], [60, 6], [60, 5], [61, 5], [62, 5], [62, 6], [61, 6], [58, 6], [57, 6], [56, 6], [55, 6], [54, 6], [54, 12], [55, 12], [56, 12], [57, 13], [58, 13], [59, 13], [60, 13], [61, 13], [62, 13], [62, 12], [61, 12], [60, 12], [59, 12], [58, 12], [57, 12], [56, 13], [55, 13], [54, 13], [54, 7], [54, 18], [54, 11], [54, 14], [62, 11], [62, 14], [62, 7], [62, 18]],
O = [[17, 43], [18, 43], [19, 43], [20, 43], [21, 43], [22, 43], [23, 43], [24, 43], [25, 43], [26, 43], [27, 43], [28, 43], [29, 43], [29, 42], [29, 41], [29, 40], [29, 39], [29, 38], [29, 37], [29, 36], [29, 35], [29, 34], [29, 33], [29, 32], [29, 31], [29, 30], [29, 29], [29, 28], [29, 27], [28, 27], [27, 27], [26, 27], [25, 27], [25, 28], [24, 28], [24, 27], [23, 27], [22, 27], [21, 27], [20, 27], [19, 27], [18, 27], [17, 27], [16, 27], [16, 28], [16, 29], [16, 30], [16, 31], [16, 32], [16, 33], [16, 34], [16, 35], [16, 36], [16, 37], [16, 38], [16, 39], [16, 40], [16, 41], [16, 42], [16, 43], [28, 28], [27, 28], [26, 28], [23, 28], [22, 28], [21, 28], [20, 28], [19, 28], [18, 28], [17, 28], [28, 42], [27, 42], [26, 42], [25, 42], [24, 42], [23, 42], [22, 42], [21, 42], [20, 42], [19, 42], [18, 42], [17, 42], [17, 29], [17, 30], [17, 31], [17, 32], [17, 33], [17, 34], [17, 35], [17, 36], [17, 37], [17, 38], [17, 39], [17, 40], [17, 41], [28, 29], [28, 30], [28, 31], [28, 32], [28, 33], [28, 34], [28, 35], [28, 36], [28, 37], [28, 38], [28, 39], [28, 40], [28, 41]],
F = [[35, 27], [36, 27], [37, 27], [38, 27], [39, 27], [40, 27], [41, 27], [42, 27], [43, 27], [44, 27], [45, 27], [46, 27], [47, 27], [48, 27], [49, 27], [35, 28], [35, 29], [35, 30], [35, 31], [35, 32], [35, 33], [35, 34], [35, 35], [35, 36], [35, 37], [35, 38], [35, 39], [35, 40], [35, 41], [35, 42], [35, 43], [36, 28], [37, 28], [38, 28], [39, 28], [40, 28], [41, 28], [42, 28], [43, 28], [44, 28], [45, 28], [46, 28], [47, 28], [48, 28], [49, 28], [36, 34], [37, 34], [38, 34], [39, 34], [40, 34], [41, 34], [42, 34], [43, 34], [43, 35], [42, 35], [41, 35], [40, 35], [39, 35], [38, 35], [37, 35], [36, 35], [36, 29], [36, 30], [36, 31], [36, 32], [36, 33], [36, 36], [36, 37], [36, 38], [36, 39], [36, 40], [36, 41], [36, 42], [36, 43]],
L = [[3, 48], [3, 49], [3, 50], [3, 51], [3, 52], [3, 53], [3, 54], [3, 55], [3, 56], [3, 57], [3, 58], [3, 59], [3, 60], [3, 61], [3, 62], [3, 63], [3, 64], [3, 65], [3, 66], [4, 66], [5, 66], [6, 66], [7, 66], [8, 66], [9, 66], [10, 66], [11, 66], [12, 66], [13, 66], [14, 66], [15, 66], [16, 66], [4, 48], [4, 49], [4, 50], [4, 51], [4, 52], [4, 53], [4, 54], [4, 55], [4, 56], [4, 57], [4, 58], [4, 59], [4, 60], [4, 61], [4, 62], [4, 63], [4, 64], [4, 65], [5, 65], [6, 65], [7, 65], [8, 65], [9, 65], [10, 65], [11, 65], [12, 65], [13, 65], [14, 65], [15, 65], [16, 65]],
I = [[21, 48], [22, 48], [23, 48], [24, 48], [25, 48], [23, 49], [23, 50], [23, 51], [23, 52], [23, 53], [23, 54], [23, 55], [23, 56], [23, 57], [23, 58], [23, 59], [23, 60], [23, 61], [23, 62], [23, 63], [23, 64], [23, 65], [21, 66], [22, 66], [23, 66], [24, 66], [25, 66], [26, 66], [26, 48], [24, 49], [24, 50], [24, 51], [24, 52], [24, 53], [24, 54], [24, 55], [24, 56], [24, 57], [24, 58], [24, 59], [24, 60], [24, 61], [24, 62], [24, 63], [24, 64], [24, 65]],
FF = F.map(function (item) { // same letter, different row
var x = item[0], y = item[1];
return [x, y + 22];
}),
EE = E.map(function (item) { // ,, ,,
var x = item[0], y = item[1];
return [x, y + 44];
});