move some mobs.js common functions to library
This commit is contained in:
parent
d271e13001
commit
e5a14b95eb
|
|
@ -71,6 +71,15 @@
|
||||||
return total / array.length
|
return total / array.length
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function sumNumericArray(array) { //Sum of array numbers
|
||||||
|
return array.reduce((partialSum, a) => partialSum + a, 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
function pad_array(arr,len,fill) { //https://stackoverflow.com/a/38851957
|
||||||
|
//console.log("Padding array");
|
||||||
|
return arr.concat(Array(len).fill(fill)).slice(0,len);
|
||||||
|
}
|
||||||
|
|
||||||
//Function to check if an array includes a given array by SO Johnny Tisdale: https://stackoverflow.com/a/60922255
|
//Function to check if an array includes a given array by SO Johnny Tisdale: https://stackoverflow.com/a/60922255
|
||||||
//CC-BY-SA-4.0
|
//CC-BY-SA-4.0
|
||||||
function includesArray(parentArray, testArray) {
|
function includesArray(parentArray, testArray) {
|
||||||
|
|
@ -82,6 +91,23 @@
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function addArraysInPairs(array1,array2,fill=0) { //e.g. [1,2,3] + [10,0,-1] = [11,2,2]
|
||||||
|
//console.log("Adding in pairs: " + array1 + " and " + array2 + ".");
|
||||||
|
if(array1.length > array2.length) { //zero-padding
|
||||||
|
array2 = pad_array(array2,array1.length,fill); //if a1 is longer, pad a2 to a1's length
|
||||||
|
} else if(array2.length > array1.length) {
|
||||||
|
array1 = pad_array(array1,array2.length,fill); //if a2 is longer, pad a1 to a2's length
|
||||||
|
};
|
||||||
|
var tempArray = [];
|
||||||
|
for(z = 0; z < array1.length; z++) {
|
||||||
|
//console.log("Forming output values (" + array1[z] + " + " + array2[z] + ")");
|
||||||
|
tempArray[z] = array1[z] + array2[z];
|
||||||
|
//console.log("Sum" + tempArray[z]);
|
||||||
|
};
|
||||||
|
//console.log("Added into " + tempArray + ".");
|
||||||
|
return tempArray;
|
||||||
|
};
|
||||||
|
|
||||||
//Checks
|
//Checks
|
||||||
|
|
||||||
//Element exists in the elements object
|
//Element exists in the elements object
|
||||||
|
|
@ -593,7 +619,87 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// Pixels
|
function averageRgbPrefixedColorArray(colorArray,returnObject=false) { //array of rgb()s to single rgb() of average color
|
||||||
|
//averageRgbPrefixedColorArray(["rgb(255,0,0)", "rgb(0,0,0)", "rgb(0,0,255)"]);
|
||||||
|
//console.log("Averaging started");
|
||||||
|
var reds = [];
|
||||||
|
var greens = [];
|
||||||
|
var blues = [];
|
||||||
|
for(k = 0; k < colorArray.length; k++) {
|
||||||
|
//console.log("Average function: Executing catcher on " + colorArray);
|
||||||
|
var color = rgbHexCatcher(colorArray[k]);
|
||||||
|
//console.log("Logged color for aRPCA: " + color);
|
||||||
|
color = color.split(",");
|
||||||
|
var red = parseFloat(color[0].substring(4));
|
||||||
|
reds.push(red)
|
||||||
|
var green = parseFloat(color[1]);
|
||||||
|
greens.push(green)
|
||||||
|
var blue = parseFloat(color[2].slice(0,-1));
|
||||||
|
blues.push(blue)
|
||||||
|
};
|
||||||
|
redAverage = Math.round(averageNumericArray(reds));
|
||||||
|
greenAverage = Math.round(averageNumericArray(greens));
|
||||||
|
blueAverage = Math.round(averageNumericArray(blues));
|
||||||
|
var output;
|
||||||
|
returnObject ? output = {r: redAverage, g: greenAverage, b: blueAverage} : output = `rgb(${redAverage},${greenAverage},${blueAverage})`;
|
||||||
|
//console.log("Averaging finished, product: " + output);
|
||||||
|
return output;
|
||||||
|
};
|
||||||
|
|
||||||
|
//https://stackoverflow.com/questions/46432335/hex-to-hsl-convert-javascript
|
||||||
|
function rgbStringToHSL(rgb) { //Originally a hex-to-HSL function, edited to take RGB and spit out an array
|
||||||
|
//console.log("HSLing some RGBs");
|
||||||
|
var result = rgbStringToUnvalidatedObject(rgb);
|
||||||
|
|
||||||
|
var r = result.r;
|
||||||
|
var g = result.g;
|
||||||
|
var b = result.b;
|
||||||
|
|
||||||
|
r /= 255, g /= 255, b /= 255;
|
||||||
|
var max = Math.max(r, g, b), min = Math.min(r, g, b);
|
||||||
|
var h, s, l = (max + min) / 2;
|
||||||
|
|
||||||
|
if(max == min){
|
||||||
|
h = s = 0; // achromatic
|
||||||
|
} else {
|
||||||
|
var d = max - min;
|
||||||
|
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
||||||
|
switch(max) {
|
||||||
|
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
|
||||||
|
case g: h = (b - r) / d + 2; break;
|
||||||
|
case b: h = (r - g) / d + 4; break;
|
||||||
|
}
|
||||||
|
h /= 6;
|
||||||
|
};
|
||||||
|
|
||||||
|
s = s*100;
|
||||||
|
s = Math.round(s);
|
||||||
|
l = l*100;
|
||||||
|
l = Math.round(l);
|
||||||
|
h = Math.round(360*h);
|
||||||
|
|
||||||
|
//var colorInHSL = 'hsl(' + h + ', ' + s + '%, ' + l + '%)';
|
||||||
|
//Edit to return an array
|
||||||
|
var colorInHSL = [h,s,l];
|
||||||
|
//console.log("HSL output "+ colorInHSL + ".");
|
||||||
|
return colorInHSL;
|
||||||
|
};
|
||||||
|
|
||||||
|
//https://stackoverflow.com/questions/36721830/convert-hsl-to-rgb-and-hex
|
||||||
|
function hslToHex(h, s, l) { //h, s, l params to hex triplet
|
||||||
|
//console.log(`Hexing some HSLs (the HSLs are ${h},${s},${l})`)
|
||||||
|
l /= 100;
|
||||||
|
var a = s * Math.min(l, 1 - l) / 100;
|
||||||
|
var f = n => {
|
||||||
|
var k = (n + h / 30) % 12;
|
||||||
|
var color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
|
||||||
|
return Math.round(255 * color).toString(16).padStart(2, '0'); // convert to Hex and prefix "0" if needed
|
||||||
|
};
|
||||||
|
//console.log(`Hexed to #${f(0)}${f(8)}${f(4)}`)
|
||||||
|
return `#${f(0)}${f(8)}${f(4)}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
//Pixels
|
||||||
|
|
||||||
function exposedToAir(pixel) {
|
function exposedToAir(pixel) {
|
||||||
return (isEmpty(pixel.x+1,pixel.y) || isEmpty(pixel.x-1,pixel.y) || isEmpty(pixel.x,pixel.y+1) || isEmpty(pixel.x,pixel.y-1));
|
return (isEmpty(pixel.x+1,pixel.y) || isEmpty(pixel.x-1,pixel.y) || isEmpty(pixel.x,pixel.y+1) || isEmpty(pixel.x,pixel.y-1));
|
||||||
|
|
@ -653,6 +759,20 @@
|
||||||
changePixel(pixel,breakIntoElement,changetemp)
|
changePixel(pixel,breakIntoElement,changetemp)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function tryBreak(pixel,changetemp=false,defaultBreakIntoDust=false) {
|
||||||
|
var info = elements[pixel.element];
|
||||||
|
var hardness = defaultHardness;
|
||||||
|
if(typeof(info.hardness) === "number") {
|
||||||
|
hardness = info.hardness;
|
||||||
|
};
|
||||||
|
hardness = 1 - hardness; //invert hardness, so a hardness of 0 becomes a 100% chance and a hardness of 1 becomes a 0% chance
|
||||||
|
if(Math.random() < hardness) {
|
||||||
|
return breakPixel(pixel,changetemp=false,defaultBreakIntoDust=false);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
//Logic
|
//Logic
|
||||||
|
|
||||||
function xor(c1,c2) {
|
function xor(c1,c2) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue