sandboxels/mods/heatglow.js

109 lines
4.4 KiB
JavaScript

function weightedAverage(num1, num2, weight){
return ((weight * num1)+((1-weight)*num2))
}
const heatfunc = function(pixel){
if (pixel.ogR == null || pixel.ogG == null || pixel.ogB == null || !(pixel.element == pixel.ogElement)){
pixel.ogR = parseInt(pixel.color.slice(4, pixel.color.indexOf(',')), 10)
pixel.ogG = parseInt(pixel.color.slice(pixel.color.indexOf(',') + 1, pixel.color.lastIndexOf(',')), 10)
pixel.ogB = parseInt(pixel.color.slice(pixel.color.lastIndexOf(',') + 1, -1), 10)
pixel.ogElement = pixel.element
}else{
var gethigh = (elements[pixel.element].tempHigh)
var halftemp = ((20+gethigh)/2)
if (pixel.temp <= (gethigh) - halftemp){
var ctemp = 0;
} else if (pixel.temp > (gethigh)-halftemp && pixel.temp <= gethigh){
var ctemp = ((1/halftemp)*pixel.temp)-(((gethigh)-halftemp)/halftemp)
}
if (ctemp <= 0.5){
var newR = (((510-(2*pixel.ogR))*ctemp)+pixel.ogR);
var newG = ((0-((2*pixel.ogG)*ctemp))+pixel.ogG);
var newB = ((0-((2*pixel.ogB)*ctemp))+pixel.ogB);
}else if (ctemp > 0.5){
var newR = 255;
var newG = ((510*ctemp)-255);
var newB= ((280*ctemp)-140);
}
let weight = (1-(ctemp/1.3))
pixel.color = "rgb(" + weightedAverage(pixel.ogR, newR, weight) + "," + weightedAverage(pixel.ogG, newG, weight) + "," + weightedAverage(pixel.ogB, newB, weight) + ")";
}
};
if (!eLists.metals) { eLists.metals = [] }
eLists.metals = eLists.metals.concat(["iron", "glass", "copper", "gold", "brass","steel","nickel","zinc","silver","aluminum","bronze","metal_scrap","oxidized_copper","tin","lead", "rose_gold"])
eLists.metals.forEach(metal => {
const prefunc = elements[metal].tick;
if (!prefunc){
elements[metal].tick = heatfunc;
}else{
const modfunc = function(pixel){
prefunc(pixel);
heatfunc(pixel);
};
elements[metal].tick = modfunc;
}
if (elements[metal].behavior == behaviors.WALL){
elements[metal].movable = false;
}
});
elements.color_baker = {
color: "#F61212",
tool: function(pixel) {
pixel.ogR = parseInt(pixel.color.slice(4, pixel.color.indexOf(',')), 10)
pixel.ogG = parseInt(pixel.color.slice(pixel.color.indexOf(',') + 1, pixel.color.lastIndexOf(',')), 10)
pixel.ogB = parseInt(pixel.color.slice(pixel.color.lastIndexOf(',') + 1, -1), 10)
},
category: "tools",
excludeRandom: true,
desc: "Use to bake a metals paint color into its 'true' color, for heating purposes.",
}
/*
const plantfunc = function(pixel){
if (pixel.ogR == null || pixel.ogG == null || pixel.ogB == null){
pixel.ogR = parseInt(pixel.color.slice(4, pixel.color.indexOf(',')), 10)
pixel.ogG = parseInt(pixel.color.slice(pixel.color.indexOf(',') + 1, pixel.color.lastIndexOf(',')), 10)
pixel.ogB = parseInt(pixel.color.slice(pixel.color.lastIndexOf(',') + 1, -1), 10)
var deadR = 130;
var deadG = 103;
var deadB = 40;
var burnR = 30;
var burnG = 30;
var burnB = 30;
var newR = pixel.ogR;
var newG = pixel.ogG;
var newB = pixel.ogB;
}else{
var gethigh = (elements[pixel.element].tempHigh)
var halftemp = ((20+gethigh)/2)
if (pixel.temp > halftemp){
var ctemp = ((1/halftemp)*pixel.temp)-(((gethigh)-halftemp)/halftemp);
} else (ctemp = 0)
if (ctemp <= 0.5 && ctemp > 0){
newR = weightedAverage(deadR, pixel.ogR, 2*ctemp);
newG = weightedAverage(deadG, pixel.ogG, 2*ctemp);
newB = weightedAverage(deadB, pixel.ogB, 2*ctemp);
}else if (ctemp > 0.5){
var modctemp = 2*(ctemp%0.5)
newR = weightedAverage(burnR, deadR, 2*modctemp);
newG = weightedAverage(burnG, deadG, 2*modctemp);
newB = weightedAverage(burnB, deadB, 2*modctemp);
}
if (!ctemp == 0){
pixel.color = "rgb(" + newR + "," + newG + "," + newB + ")";
} else {pixel.color = "rgb(" + pixel.ogR + "," + pixel.ogG + "," + pixel.ogB + ")"}
}
};
if (!eLists.burnplants) { eLists.burnplants = [] }
eLists.burnplants = eLists.burnplants.concat(["plant","dead_plant","grass","algae","sapling","evergreen","cactus","seeds","grass_seed","wheat_seed","flower_seed","pistil","petal","tree_branch","bamboo_plant","mushroom_spore","mushroom_stalk","mushroom_gill","mushroom_cap","hyphae","pumpkin_seed","pumpkin","corn","corn_seed","potato","potato_seed","root"])
eLists.burnplants.forEach(plant => {
const prefunc = elements[plant].tick;
if (!prefunc){
elements[plant].tick = plantfunc;
}else{
const modfunc = function(pixel){
prefunc(pixel);
plantfunc(pixel);
};
elements[plant].tick = modfunc;
}
});
*/