var -> let
This commit is contained in:
parent
c554a2311a
commit
96bd2a9dec
|
@ -1,11 +1,11 @@
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
// todo define things like 16x16, 128x128 etc. as constants?
|
// todo define things like 16x16, 128x128 etc. as constants?
|
||||||
// also script debounce/throttle times
|
// also script debounce/throttle times
|
||||||
var animationTime = 400; // defined in bitsy.js
|
let animationTime = 400; // defined in bitsy.js
|
||||||
|
|
||||||
var bitsyData = {};
|
let bitsyData = {};
|
||||||
|
|
||||||
var palette = {
|
let palette = {
|
||||||
id: 0,
|
id: 0,
|
||||||
background: {
|
background: {
|
||||||
red: 62,
|
red: 62,
|
||||||
|
@ -24,23 +24,23 @@ $(document).ready(function() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var room = [];
|
let room = [];
|
||||||
|
|
||||||
var tileMatchThreshold = 64;
|
let tileMatchThreshold = 64;
|
||||||
|
|
||||||
var croptions = {
|
let croptions = {
|
||||||
url: 'https://i.imgur.com/ThQZ94v.jpg',
|
url: 'https://i.imgur.com/ThQZ94v.jpg',
|
||||||
viewport: {width: 128, height: 128, type: 'square'},
|
viewport: {width: 128, height: 128, type: 'square'},
|
||||||
boundary: {width: 256, height: 256},
|
boundary: {width: 256, height: 256},
|
||||||
zoom: 0
|
zoom: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
var $croppie = $('#croppie');
|
let $croppie = $('#croppie');
|
||||||
|
|
||||||
$croppie.croppie(croptions);
|
$croppie.croppie(croptions);
|
||||||
|
|
||||||
function colourDifference(colour1, colour2) {
|
function colourDifference(colour1, colour2) {
|
||||||
var difference = {};
|
let difference = {};
|
||||||
|
|
||||||
_.each(['red', 'green', 'blue'], function(key) {
|
_.each(['red', 'green', 'blue'], function(key) {
|
||||||
difference[key] = Math.abs(colour1[key] - colour2[key]);
|
difference[key] = Math.abs(colour1[key] - colour2[key]);
|
||||||
|
@ -64,7 +64,7 @@ $(document).ready(function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function hexToColour(hex) {
|
function hexToColour(hex) {
|
||||||
var rgb = hex.match(/[\da-f]{2}/gi);
|
let rgb = hex.match(/[\da-f]{2}/gi);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
red: parseInt(rgb[0], 16),
|
red: parseInt(rgb[0], 16),
|
||||||
|
@ -87,9 +87,9 @@ $(document).ready(function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function newTileName() {
|
function newTileName() {
|
||||||
var tileNames = _.map(bitsyData.tiles, 'name');
|
let tileNames = _.map(bitsyData.tiles, 'name');
|
||||||
|
|
||||||
var i = 1; // start with 1 as 0 is an implicit tile
|
let i = 1; // start with 1 as 0 is an implicit tile
|
||||||
|
|
||||||
while (tileNames.indexOf(i.toString(36)) > -1) {
|
while (tileNames.indexOf(i.toString(36)) > -1) {
|
||||||
i++;
|
i++;
|
||||||
|
@ -100,7 +100,7 @@ $(document).ready(function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleBitsyGameData() {
|
function handleBitsyGameData() {
|
||||||
var input = $('#bitsy-data').val();
|
let input = $('#bitsy-data').val();
|
||||||
|
|
||||||
if ( ! input) {
|
if ( ! input) {
|
||||||
return;
|
return;
|
||||||
|
@ -109,14 +109,14 @@ $(document).ready(function() {
|
||||||
bitsyData = {};
|
bitsyData = {};
|
||||||
|
|
||||||
// get palettes
|
// get palettes
|
||||||
var palettes = input.match(/PAL ([^\n]*)\n(NAME ([^\n]*)\n)?(([0-9,]+){3}\n){3,}/g);
|
let palettes = input.match(/PAL ([^\n]*)\n(NAME ([^\n]*)\n)?(([0-9,]+){3}\n){3,}/g);
|
||||||
|
|
||||||
bitsyData.palettes = {};
|
bitsyData.palettes = {};
|
||||||
|
|
||||||
// do palettes always go 0..n?
|
// do palettes always go 0..n?
|
||||||
// will this cause problems if not?
|
// will this cause problems if not?
|
||||||
_.each(palettes, function(palette, n) {
|
_.each(palettes, function(palette, n) {
|
||||||
var name = "";
|
let name = "";
|
||||||
|
|
||||||
if (palette.match(/NAME (.+)\n/)) {
|
if (palette.match(/NAME (.+)\n/)) {
|
||||||
name = palette.match(/NAME (.+)\n/)[0].replace('NAME ', '');
|
name = palette.match(/NAME (.+)\n/)[0].replace('NAME ', '');
|
||||||
|
@ -124,10 +124,10 @@ $(document).ready(function() {
|
||||||
name = palette.match(/PAL (\d+)\n/)[0].replace("PAL", "palette");
|
name = palette.match(/PAL (\d+)\n/)[0].replace("PAL", "palette");
|
||||||
}
|
}
|
||||||
|
|
||||||
var colours = palette.match(/\d+,\d+,\d+/g);
|
let colours = palette.match(/\d+,\d+,\d+/g);
|
||||||
|
|
||||||
colours = _.map(colours, function(colour) {
|
colours = _.map(colours, function(colour) {
|
||||||
var rgb = colour.split(',');
|
let rgb = colour.split(',');
|
||||||
|
|
||||||
return {red: rgb[0], green: rgb[1], blue: rgb[2]};
|
return {red: rgb[0], green: rgb[1], blue: rgb[2]};
|
||||||
});
|
});
|
||||||
|
@ -154,16 +154,16 @@ $(document).ready(function() {
|
||||||
|
|
||||||
// everything after > is an optional second animation frame
|
// everything after > is an optional second animation frame
|
||||||
// todo: handle multiple animation frames! more than 2 are allowed (but not via the standard editor)
|
// todo: handle multiple animation frames! more than 2 are allowed (but not via the standard editor)
|
||||||
var tiles = input.match(/TIL (.*)\n([01]{8}\n){8}(>\n([01]{8}\n){8})?/g);
|
let tiles = input.match(/TIL (.*)\n([01]{8}\n){8}(>\n([01]{8}\n){8})?/g);
|
||||||
|
|
||||||
_.each(tiles, function(tile) {
|
_.each(tiles, function(tile) {
|
||||||
var name = tile.match(/TIL .*/)[0].replace('TIL ', '');
|
let name = tile.match(/TIL .*/)[0].replace('TIL ', '');
|
||||||
|
|
||||||
tile = tile.replace(/TIL .*\n/, '');
|
tile = tile.replace(/TIL .*\n/, '');
|
||||||
|
|
||||||
var bitmap = _.map(tile.match(/[01]/g), _.toInteger);
|
let bitmap = _.map(tile.match(/[01]/g), _.toInteger);
|
||||||
|
|
||||||
var newTile = {
|
let newTile = {
|
||||||
name: name,
|
name: name,
|
||||||
new: false
|
new: false
|
||||||
};
|
};
|
||||||
|
@ -219,7 +219,7 @@ $(document).ready(function() {
|
||||||
|
|
||||||
function readFile(input, callback) {
|
function readFile(input, callback) {
|
||||||
if (input.files && input.files[0]) {
|
if (input.files && input.files[0]) {
|
||||||
var reader = new FileReader();
|
let reader = new FileReader();
|
||||||
|
|
||||||
reader.onload = callback;
|
reader.onload = callback;
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ $(document).ready(function() {
|
||||||
|
|
||||||
function readTextFile(input, callback) {
|
function readTextFile(input, callback) {
|
||||||
if (input.files && input.files[0]) {
|
if (input.files && input.files[0]) {
|
||||||
var reader = new FileReader();
|
let reader = new FileReader();
|
||||||
|
|
||||||
reader.onload = callback;
|
reader.onload = callback;
|
||||||
|
|
||||||
|
@ -242,22 +242,22 @@ $(document).ready(function() {
|
||||||
type: 'rawcanvas',
|
type: 'rawcanvas',
|
||||||
size: 'viewport'
|
size: 'viewport'
|
||||||
}).then(function (result) {
|
}).then(function (result) {
|
||||||
var imageData = result.getContext('2d').getImageData(0, 0, 128, 128);
|
let imageData = result.getContext('2d').getImageData(0, 0, 128, 128);
|
||||||
var rawData = imageData.data;
|
let rawData = imageData.data;
|
||||||
var monochrome = [];
|
let monochrome = [];
|
||||||
|
|
||||||
var brightnessAdjustment = parseFloat($('#brightness').val());
|
let brightnessAdjustment = parseFloat($('#brightness').val());
|
||||||
|
|
||||||
// for each pixel
|
// for each pixel
|
||||||
for (var i = 0; i < rawData.length; i += 4) {
|
for (let i = 0; i < rawData.length; i += 4) {
|
||||||
// this brightness adjustment is pretty crude but whatever
|
// this brightness adjustment is pretty crude but whatever
|
||||||
var pixel = {
|
let pixel = {
|
||||||
red: _.clamp(rawData[i ] + brightnessAdjustment, 0, 255),
|
red: _.clamp(rawData[i ] + brightnessAdjustment, 0, 255),
|
||||||
green: _.clamp(rawData[i + 1] + brightnessAdjustment, 0, 255),
|
green: _.clamp(rawData[i + 1] + brightnessAdjustment, 0, 255),
|
||||||
blue: _.clamp(rawData[i + 2] + brightnessAdjustment, 0, 255)
|
blue: _.clamp(rawData[i + 2] + brightnessAdjustment, 0, 255)
|
||||||
};
|
};
|
||||||
|
|
||||||
var targetColour = getClosestColour(pixel, palette);
|
let targetColour = getClosestColour(pixel, palette);
|
||||||
|
|
||||||
if (targetColour.name === "background") {
|
if (targetColour.name === "background") {
|
||||||
monochrome.push(0);
|
monochrome.push(0);
|
||||||
|
@ -283,7 +283,7 @@ $(document).ready(function() {
|
||||||
_.times(16, function(tileY) {
|
_.times(16, function(tileY) {
|
||||||
_.times(16, function(tileX) {
|
_.times(16, function(tileX) {
|
||||||
// make pseudo-tile from monochrome bitmap
|
// make pseudo-tile from monochrome bitmap
|
||||||
var pseudoTile = [];
|
let pseudoTile = [];
|
||||||
|
|
||||||
_.times(8, function(y) {
|
_.times(8, function(y) {
|
||||||
pseudoTile.push(
|
pseudoTile.push(
|
||||||
|
@ -291,7 +291,7 @@ $(document).ready(function() {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
var bestMatch;
|
let bestMatch;
|
||||||
|
|
||||||
// if we want to always create new tiles, don't bother trying to check matches
|
// if we want to always create new tiles, don't bother trying to check matches
|
||||||
if (tileMatchThreshold === 64) {
|
if (tileMatchThreshold === 64) {
|
||||||
|
@ -330,8 +330,8 @@ $(document).ready(function() {
|
||||||
|
|
||||||
// what if there are several equally good matches?
|
// what if there are several equally good matches?
|
||||||
// find highest match amount and find all of them
|
// find highest match amount and find all of them
|
||||||
var bestMatchAmount = _.last(_.sortBy(bitsyData.tiles, ['match'])).match;
|
let bestMatchAmount = _.last(_.sortBy(bitsyData.tiles, ['match'])).match;
|
||||||
var bestMatches = _.filter(bitsyData.tiles, {'match': bestMatchAmount});
|
let bestMatches = _.filter(bitsyData.tiles, {'match': bestMatchAmount});
|
||||||
|
|
||||||
// sort by name in ascending order
|
// sort by name in ascending order
|
||||||
// earlier names are preferable
|
// earlier names are preferable
|
||||||
|
@ -341,7 +341,7 @@ $(document).ready(function() {
|
||||||
if ( ! bestMatch || bestMatch.match < tileMatchThreshold) {
|
if ( ! bestMatch || bestMatch.match < tileMatchThreshold) {
|
||||||
// turn pseudo-tile into a real tile and add it to the tile data
|
// turn pseudo-tile into a real tile and add it to the tile data
|
||||||
|
|
||||||
var name = newTileName();
|
let name = newTileName();
|
||||||
|
|
||||||
bitsyData.tiles.push({
|
bitsyData.tiles.push({
|
||||||
name: name,
|
name: name,
|
||||||
|
@ -370,15 +370,15 @@ $(document).ready(function() {
|
||||||
|
|
||||||
_.each(room, function(row, tileY) {
|
_.each(room, function(row, tileY) {
|
||||||
_.each(row, function(tileName, tileX) {
|
_.each(row, function(tileName, tileX) {
|
||||||
var tile = _.find(bitsyData.tiles, {'name' : tileName});
|
let tile = _.find(bitsyData.tiles, {'name' : tileName});
|
||||||
|
|
||||||
_.each(tile.bitmap, function(row, y) {
|
_.each(tile.bitmap, function(row, y) {
|
||||||
_.each(row, function(pixel, x) {
|
_.each(row, function(pixel, x) {
|
||||||
var position = (((tileY * 8) + y) * 128) + ((tileX * 8) + x);
|
let position = (((tileY * 8) + y) * 128) + ((tileX * 8) + x);
|
||||||
|
|
||||||
position *= 4; // 4 values (rgba) per pixel
|
position *= 4; // 4 values (rgba) per pixel
|
||||||
|
|
||||||
var pixelColour = {};
|
let pixelColour = {};
|
||||||
|
|
||||||
switch(parseInt(pixel)) {
|
switch(parseInt(pixel)) {
|
||||||
case 0: pixelColour = palette.background; break;
|
case 0: pixelColour = palette.background; break;
|
||||||
|
@ -399,12 +399,12 @@ $(document).ready(function() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var renderDebounced = _.debounce(render, 30);
|
let renderDebounced = _.debounce(render, 30);
|
||||||
var renderThrottled = _.throttle(render, 30);
|
let renderThrottled = _.throttle(render, 30);
|
||||||
|
|
||||||
$croppie.on('update', renderDebounced);
|
$croppie.on('update', renderDebounced);
|
||||||
|
|
||||||
var $brightness = $('#brightness');
|
let $brightness = $('#brightness');
|
||||||
|
|
||||||
$brightness.on('change', renderThrottled);
|
$brightness.on('change', renderThrottled);
|
||||||
|
|
||||||
|
@ -418,7 +418,7 @@ $(document).ready(function() {
|
||||||
$('#brightness').trigger('dblclick');
|
$('#brightness').trigger('dblclick');
|
||||||
});
|
});
|
||||||
|
|
||||||
var $bitsyData = $('#bitsy-data');
|
let $bitsyData = $('#bitsy-data');
|
||||||
|
|
||||||
$bitsyData.on('change blur keyup', handleBitsyGameData);
|
$bitsyData.on('change blur keyup', handleBitsyGameData);
|
||||||
|
|
||||||
|
@ -446,7 +446,7 @@ $(document).ready(function() {
|
||||||
|
|
||||||
// these inputs get added and removed from the DOM so the event handler needs to be on the document
|
// these inputs get added and removed from the DOM so the event handler needs to be on the document
|
||||||
$(document).on('change', '#palette input', function() {
|
$(document).on('change', '#palette input', function() {
|
||||||
var id = parseInt($(this).closest('.palette').find('input[name="id"]').val());
|
let id = parseInt($(this).closest('.palette').find('input[name="id"]').val());
|
||||||
|
|
||||||
// if this is a colour input, update the palette
|
// if this is a colour input, update the palette
|
||||||
if ($(this).attr('type') === 'color') {
|
if ($(this).attr('type') === 'color') {
|
||||||
|
@ -467,7 +467,7 @@ $(document).ready(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
$(document).on('change', '#threshold', function() {
|
$(document).on('change', '#threshold', function() {
|
||||||
var newValue = parseInt($(this).val());
|
let newValue = parseInt($(this).val());
|
||||||
|
|
||||||
if (newValue < tileMatchThreshold) {
|
if (newValue < tileMatchThreshold) {
|
||||||
// set tiles back to default
|
// set tiles back to default
|
||||||
|
@ -490,23 +490,23 @@ $(document).ready(function() {
|
||||||
$('#save').on('click touchend', function() {
|
$('#save').on('click touchend', function() {
|
||||||
$textArea = $('textarea');
|
$textArea = $('textarea');
|
||||||
|
|
||||||
var newGameData = $textArea.val();
|
let newGameData = $textArea.val();
|
||||||
|
|
||||||
// handle rooms
|
// handle rooms
|
||||||
|
|
||||||
// need to import IDs so we don't give the new room a conflicting ID
|
// need to import IDs so we don't give the new room a conflicting ID
|
||||||
var roomIds = newGameData.match(/ROOM \d+\n/g);
|
let roomIds = newGameData.match(/ROOM \d+\n/g);
|
||||||
|
|
||||||
roomIds = _.map(roomIds, function(roomId) {
|
roomIds = _.map(roomIds, function(roomId) {
|
||||||
return parseInt(roomId.replace(/[^\d]+/g, ""));
|
return parseInt(roomId.replace(/[^\d]+/g, ""));
|
||||||
});
|
});
|
||||||
|
|
||||||
var newRoomId = _.max(roomIds) + 1;
|
let newRoomId = _.max(roomIds) + 1;
|
||||||
|
|
||||||
var newRoomName = $('#roomName').val();
|
let newRoomName = $('#roomName').val();
|
||||||
// remove invalid chars? what's invalid? newlines? are those possible?
|
// remove invalid chars? what's invalid? newlines? are those possible?
|
||||||
|
|
||||||
var newRoom = "ROOM " + newRoomId + "\n";
|
let newRoom = "ROOM " + newRoomId + "\n";
|
||||||
|
|
||||||
_.each(room, function(row) {
|
_.each(room, function(row) {
|
||||||
newRoom += _.toString(row) + "\n";
|
newRoom += _.toString(row) + "\n";
|
||||||
|
@ -522,8 +522,8 @@ $(document).ready(function() {
|
||||||
|
|
||||||
// handle tiles
|
// handle tiles
|
||||||
|
|
||||||
var newTiles = _.filter(bitsyData.tiles, 'new');
|
let newTiles = _.filter(bitsyData.tiles, 'new');
|
||||||
var tileText = "";
|
let tileText = "";
|
||||||
|
|
||||||
_.each(newTiles, function(tile, n) {
|
_.each(newTiles, function(tile, n) {
|
||||||
tileText += "TIL " + tile.name + "\n"; //again, rename tile name to id...
|
tileText += "TIL " + tile.name + "\n"; //again, rename tile name to id...
|
||||||
|
|
Loading…
Reference in New Issue