$(document).ready(function() { var bitsyData = {}; var palette = { background: { red: 62, green: 43, blue: 32, }, tile: { red: 208, green: 112, blue: 56, }, sprite: { red: 229, green: 92, blue: 68, } }; var croptions = { url: 'https://i.imgur.com/ThQZ94v.jpg', viewport: {width: 128, height: 128, type: 'square'}, boundary: {width: 256, height: 256}, zoom: 0 } var $croppie = $('#croppie'); var croppie = $croppie.croppie(croptions); function colourDifference(colour1, colour2) { difference = {}; _.each(['red', 'green', 'blue'], function(key) { difference[key] = Math.abs(colour1[key] - colour2[key]); }); // sum rgb differences return _.reduce(difference, function(sum, n) { return sum + n; }, 0); } function colourToHex(colour) { return '#' + Number(colour.red).toString(16) + Number(colour.green).toString(16) + Number(colour.blue).toString(16); } function hexToColour(hex) { var rgb = hex.match(/[\da-fA-F]{2}/g); return { red: parseInt(rgb[0], 16), green: parseInt(rgb[1], 16), blue: parseInt(rgb[2], 16), }; } function getClosestColour(initialColour, colourOptions) { // ditch sprite colour as we're not using it atm delete colourOptions.sprite; _.each(palette, function(colour, name) { colourOptions[name].difference = colourDifference(initialColour, colour); }); // lowest difference (closest) wins return _.first(_.sortBy(colourOptions, 'difference')); } function handleBitsyGameData() { bitsyData = {}; var input = $('#bitsy-data').val(); // get palettes var palettes = input.match(/PAL (.*)\s(NAME (.*)\s)?([0-9,]*[\s]){3}/g); bitsyData.palettes = {}; _.each(palettes, function(palette, n) { var thisPalette = {}; var name = ""; if (palette.match(/NAME (.+)\n/)) { name = palette.match(/NAME (.+)\n/)[0].replace('NAME ', ''); } else if (palette.match(/PAL (\d+)\n/)) { name = palette.match(/PAL (\d+)\n/)[0].replace("PAL", "palette"); } var colours = palette.match(/\d+,\d+,\d+/g); colours = _.map(colours, function(colour) { var rgb = colour.split(','); return {red: rgb[0], green: rgb[1], blue: rgb[2]}; }); bitsyData.palettes[name] = { sortOrder: n, background: colours[0], tile: colours[1], sprite: colours[2], } }); // set palette to first imported palette and redraw palette = _.first(_.sortBy(bitsyData.palettes, 'sortOrder')); renderResult(); // update palette picker $('tr.palette').remove(); _.each(bitsyData.palettes, function(palette, name) { $('#palette tbody').append( '